Introduction Apache Avro 는 데이터 직렬화 시스템이다. Avro 는 아래 기능들을 제공한다. 풍부한 데이터 구조 간결하고 빠른 Binary Data 포멧 영구 데이터를 저장하기 위한 컨테이너 파일 Remote 프로시져 콜 (RPC) 다양한 언어와 간단하게 연동 가능. RPC 프로토콜을 사용하거나 구현하거나 데이터를 읽거나 쓰기 위해 코드 Generation 이 필수는 아니다. 코드 Generation 은 정적인 타입을 가지는 언어를 구현할때 가치가 있는 최적화 옵션이다. Schemas Avro 는 Schema 에 의존한다. Avro 데이터를 읽을때는 Avro 데이터가 쓰여질 당시에 사용되었던 Schema 가 필요하다. 이것은 각 데이터가 per-value 오버헤드 없이 쓰여질 수 있도..
쿼리를 정의했다면, 카산드라 테이블을 설계한 준비가 된 것이다. 첫번째로 각 쿼리에 포함되어있는 논리 모델을 포함하는 테이블을 만들고 구상중인 모델의 엔티티와 관계를 그린다. 각 테이블의 이름을 지정하려면 주로 조회하는 엔티티 이름으로 시작하는 이름을 지을 수 있다. 다른 관계가 있는 에티티의 요소로 Query 를 한다면 이 두가지 테이블의 이름을 붙이고 by 로 구분을 지을 수 있다. 예를 들어 hotels_by_poi 다음에 테이블의 PK 를 결정하고 추가 Parititon Key 를 Query 요소를 기반으로 추가하고 Clustering 요소를 고유성과 필요한 정렬을 제공하기 위해 추기해야한다. PK 를 설계하는 것은 특히 중요하다. PK 가 각 Partition 에 어떻게 저장될지 그리고 Disk..
이 호텔 도메인을 위해 Query 우선 접근 방법으로 데이터 모델링을 해보자. Application 을 위한 UI 디자인은 쿼리를 추출해내기 위한 좋은 결과물이다. 당신이 프로젝트 Stakeholder 와 UX 디자이너와 논의한다고 가정해보자. 그 대화를 통해 아래오 같은 Query 들을 추출해낼 수 있을 것이다. Q1. 호텔 근처의 관광지는? Q2. 주어진 호텔의 이름과 위치와 같은 정보는? Q3. 관광지 근처의 호텔은? Q4. 주어진 기간동안 이용 가능한 객실은? Q5. 객실의 별점과 어메니티는? 이와 같이 쿼리를 속기헤보는 것은 전체를 설명하는 것보다 도움이될 때가 종종 있다. 여기에 리스트된 Query 들은 Q1, Q2, 등등 으로 넘더링되어있다. 이제 Application 이 성공하여 고객이 호..
데이터 모델링을 하기 위해 호텔 도메인을 이용해보자. 호텔에 객실에 머무는 게스트가 있고 각 호텔은 여러개의 Room 을 가지고 있다. 게스트가 예약한 Room 에 대한 정보가 있고 각 Room 에서 제공되는 Amentity 가 있다. 관심이 있을만한 "공원", "박물관", "쇼핑" 과 같이 게스트들이 관심있어할만한 데이터 또한 Point Of Interest 에 저장된다. RDBMS Design 만약 당신이 새로운 데이터 기반 Application 을 구축한다면, 적절한 normalized 테이블과 FK 를 사용하여 데이터를 모델링할것이다. 아래 도표는 관계형 데이터베이스를 사용한 데이터 모델링을 나타낸다. 관계형 데이터베이스는 Many to Many Join 을 활용한다. Hotel Points , ..
카산드라는 테이블에 데이터를 저장한다. 각 테이블은 Row 와 Column 으로 구성되어있다. CQL 은 테이블에 저장된 데이터를 찾기위한 Query 로 사용된다. 카산드라 데이터 모델은 Query 에 최적화 되어있다. 카산드라는 관계형 데이터베이스에서 사용하는 관계형 데이터 모델링을 지원하지 않는다. What is Data Modeling? 데이터 모델링은 엔티티와 엔티티간의 관계를 식별하는 과정이다. 관계형 데이터베이스에서는 다른테이블의 데이터와 연관짓기 위하여 FK 를 테이블에 지정하였다. Application 에서 데이터베이스로 만드는 쿼리는 테이블의 구조에 기인하고 테이블 조인에 의해서 데이터가 조회된다. 카산드라에서는 데이터 모델링은 Query-Driven 이다. 데이터 접근 패턴과 Appli..
Dynamo 카산드라는 분산형 Key-value 시스템인 Amazon 의 Dynamo 에 많은 기능들을 의존한다. Dynamo 시스템의 각 노드들은 아래와 같은 세개의 주요 요소가 있다. 분할된 Datset 에 대한 조정 요청 Ring 멤버십과 실패 탐지 Local 의 지속 저장 엔진 카산드라는 Log Structured Merge Tree(LSM) 기반의 스토리지 엔진을 사용하면서 위에서 두가지 클러스터링 요소들을 주로 이끌어냈다. 특히 카산드라는 Dynamo 의 아래 스타일들을 의존한다: 변하지 않는 Hashing 을 사용한 데이터 Partitioning 버전으로 관리된 데이터를 사용하는 Multi Master Gossip 프로토콜을 사용하여 실패 탐지와 분산 클러스터 멤버십 하드웨어의 증분 scal..
Overview 카산드라는 오픈소스, 분산, NoSQL 데이터베이스이다. 카산드라는 넓게 분할된 Column 기반 스토리지 모델을 제공한다. 카산드라는 최초에 Facebook 에 의해서 디자인 되었으며 Amazon 의 Dynamo 분산 스토리지를 구현하기 위한 Event Driven 아키텍쳐, Replication 기술, 구글의 Bigtable 데이터와 스토리지 Engine Model 들을 사용하였다. Dynamo 와 Bigtable 은 둘 다 확장성, 안정성과 고가용성 Storage System 을 위해 개발되었지만 개선할 부분들이 존재했다. 카산드라 는 이 두가지 시스템의 조합으로 동종 최고의 성능으로 디자인 되었다. Application 이 read, write 에 낮은 latency 가 필요해지고..
pmap 커맨드를 사용하면 linux process 의 가상 메모리 주소의 대역과 Mapping 된 결과를 확인할 수 있다. 10: java -Xms30m -Xmx30m -verbose:gc -XX:+UseG1GC Main Address Kbytes RSS Dirty Mode Mapping 00000000fe200000 31232 30364 30364 rw--- [ anon ] 00000000fe200000 0 0 0 rw--- [ anon ] 0000000100080000 1048064 0 0 ----- [ anon ] 0000000100080000 0 0 0 ----- [ anon ] 0000562ecc068000 4 4 0 r-x-- java 0000562ecc068000 0 0 0 r-x-- ja..
https://woooongs.tistory.com/85 -Xms 보다 Memory 사용량이 더 적은 이유 Logstash 는 JVM 에서 동작중이며 -Xms (최소 힙 크기 사이즈) 는 1g 로 실행되었다. 하지만 메트릭에서 보는 것 처럼 Java process 가 사용하는 메모리는 572MB 로 최소 힙 크기보다 적은 양의 메모리를 사 woooongs.tistory.com 위 글에서 최소 힙 사이즈보다 사용중인 물리 메모리가 더 작은 이유에 대해서 확인해보았다. JVM 은 가상메모리에는 최소 힙 사이즈 만큼 공간을 할당하지만 실제로 객체를 힙에 저장하기 전까지는 물리 메모리를 점유하지 않는다. 하지만 위 글에서 해결되지 않는 의문이 있었다. 객체가 실제로 힙에 저장될때 Java process RSS ..
Logstash 는 JVM 에서 동작중이며 -Xms (최소 힙 크기 사이즈) 는 1g 로 실행되었다. 하지만 메트릭에서 보는 것 처럼 Java process 가 사용하는 메모리는 572MB 로 최소 힙 크기보다 적은 양의 메모리를 사용하고 있다고 메트릭은 표현하고 있다. 어떻게 최소 힙 크기보다 적은 양의 메모리를 사용하고 있을까? 라는 궁금증이 생겼다. 우선 해당 메트릭은 Kubernetes 의 cAdvisor 에 의해서 수집되는 지표이다. cAdvisor 가 수집하는 여러가지 메모리 지표중 container_memory_working_set_bytes 를 사용하여 메모리 사용량을 나타내고 있다. cAdvison 코드에 보면 container_memory_working_set_bytes 는 아래와 같이..
- Total
- Today
- Yesterday
- msyql-connector-java
- custom config data convertion
- reactor
- circurit breaker
- Flux
- getBoolean
- rate limit
- N+1
- AbstractMethodError
- wait()
- Lazy
- router
- ResultSet
- reative
- RouteDefinition
- RoutePredication
- ConcurrentHashMap
- mariada-connector
- notifyAll()
- referencedColumnName
- dynamodb
- Seperate Chaining
- MariaDB
- aurora
- notify()
- mariadb-connector-j
- HashMap
- DyanomoDB
- GlobalFilter
- spring cloud gateway
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |