반응형
카산드라가 여러 개의 노드(클러스터)로 구성되었다면 모든 노드에 동일한 데이터 세트가 저장될까요?
만약 모든 노드에 동일한 데이터 세트를 저장한다면 아래의 그림처럼 모든 노드가 '홍길동', '이순신', '김유신' 데이터를 가진 모습일 것입니다. 물론 Availability는 매우 증가합니다만, 노드가 증가할수록 모든 노드에 동일 데이터를 복제하기 위해 카산드라는 매우 바쁘게 일해야 할 것입니다. 그리고 대용량의 데이터를 모든 노드에 저장하는 것은 그만큼의 디스크를 확보해야 하므로 비용적인 측면에서는 매우 비효율입니다.
카산드라는 데이터를 모든 노드에 복제하기보다는 아래의 그림처럼 특정 노드에 할당합니다. 그러면 데이터를 모든 노드에 복제하기 위해 바쁠 필요가 없습니다. 그리고 이웃한 한 두 개의 노드에 복제하여 Availability도 충족할 수 있습니다. 노드마다 확보해야 할 디스크도 노드에서 저장할 데이터만큼만 확보하면 되니 비용적인 측면에서도 절약됩니다.
아래 그림은 '홍길동' 데이터를 입력하는 과정을 표현한 것입니다.
① 클라이언트를 통해 홍길동의 연락처를 입력하게 됩니다.
② 홍길동의 연락처가 저장될 노드를 찾아 해당 노드로 데이터를 전달합니다.
③ 이웃한 노드에 데이터를 복제합니다.
위의 ②번의 빨간색 부분에 관여하는 역할을 파티셔너(Partitioner)라고 합니다. 파티셔너는 해당 데이터가 저장될 위치를 해시(hash) 함수를 통해 찾게 됩니다. 이때 해시 함수를 통과한 값을 토큰(token) 이라 합니다.
반응형
'NoSQL > Cassandra DB' 카테고리의 다른 글
카산드라(cassandra), 토큰(token) (0) | 2020.10.12 |
---|---|
카산드라(cassandra), 데이터 저장 구조 - 파티션 키(Partition Key) (0) | 2020.09.23 |
카산드라(cassandra), 데이터를 읽고 쓰는 과정 (0) | 2020.09.08 |
카산드라(cassandra), 클라이언트에서 노드(Node) 접근 - 코디네이터(Coordinator) (0) | 2020.08.31 |
카산드라(cassandra), 기본 구조 (0) | 2020.08.25 |