본 글은 데이터 중심 어플리케이션(마틴 클레프만)으로 스터디하며 해당 책의 내용을 요약 정리한 내용입니다.
https://github.com/ddia-study/ddia-study
데이터셋이 매우 크거나 질의 처리량이 매우 높다면 복제만으로는 부족하고 데이터를 파티션을 쪼갤 필요가 있다.
이 작업을 샤딩이라고도 한다.
데이터 파티셔닝을 원하는 주된 이유는 확장성이다.
보통 복제와 파티셔닝을 함께 적용해 각 파티션의 복사본을 여러 노드에 저장한다.
각 레코드는 정확히 한 파티션에 속하더라도 이를 여러 다른 노드에 저장해서 내결함성을 보장할 수 있다.
파티셔닝의 목적은 데이터와 질의 부하를 노드 사이에 고르게 분산시키는 것이다.
파티셔닝이 고르게 이뤄지지 않아 다른 파티션보다 데이터가 많거나 질의를 많이 받는 파티션이 있다면 *쏠렸다(skewed)고 말한다.
불균형하게 부하가 높은 파티션을 핫스팟이라고 한다.
레코드를 어떻게 할당하는 것이 좋을까?
관련 내용
키 범위 기준 예시로, 센서 데이터베이스 이야기가 나왔다.
센서 데이터베이스에서 이문제를 회피하려면 키의 첫 번째 요소로 타임스탬프가 아닌 다른 것을 사용해야 한다.
실제로 IoT 분야에서 비슷한 방법으로 데이터를 운용하곤 한다.
보조 색인은 보통 레코드를 유일하게 식별하는 용도가 아니라 특정한 값이 발생한 항목을 검색하는 수단이다.
사용자 123이 실행한 액션을 모두 찾거나 hogwash라는 단어를 포함하는 글을 모두 찾거나 빨간색 자동차를 모두 찾는 등의 작업에 쓰인다.
시간이 지나면 DB에 변화가 생긴다.
클러스터에서 한 노드가 담당하던 부하를 다른 노드로 옮기는 과정을 rebalancing이라고 한다.
재균형화는 자동으로 실행될까, 수동으로 실행될까?
적절히 조합해보는 방법도 있다.
클라이언트에서 요청을 보내려고 할 때 어느 노드로 접속해야 하는지 어떻게 알 수 있을까?
"foo 키를 읽거나 쓰려면 어떤 IP 주소와 포트 번호로 접속해야 할까?"
이 문제는 DB에 국한되지 않은 Service Discovery의 일종이다.
Gosship Protocol : https://medium.com/@heonjang.lee96/gossip-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EC%9D%B4%EB%9E%80-906500c3de4b
대규모 병렬 처리(massively parallel processing, MPP)는 훨씬 복잡한 질의를 지원한다.
MPP Query Optimizer는 복잡한 질의를 여러 실행 단계와 파티션으로 분해하며 이들 중 다수는 데이터베이스 클러스터 내의 서로 다른 노드에서 병렬적으로 실행될 수 있다.
(참고로 10장에서도 나온다)
Chapter 8. 분산 시스템의 골칫거리 - Part 2 (0) | 2022.06.10 |
---|---|
Chapter 8. 분산 시스템의 골칫거리 - Part 1 (0) | 2022.06.10 |
Chapter 5. Replication(복제) (0) | 2022.06.10 |
Chapter 3. Storage and Search (0) | 2022.06.10 |
Chapter 1. Reliability, Scalability, Maintainability (0) | 2022.06.10 |
댓글 영역