카산드라의 노드에는 토큰 범위(token range)가 할당돼 있습니다. 그리고 파티션 키를 통해 얻은 토큰 값으로 해당 노드를 찾게 됩니다. 그런데 토큰의 범위는 -2^63 부터 (2^63)-1 사이의 한정된 값을 가지는데 노드마다 일부를 부여합니다. 토큰의 범위를 단순화하여 예를 들면 아래의 그림과 같습니다.
카산드라의 초기 버전(ver. 1.1 이하) 에서는 위의 그림처럼 노드마다 오직 하나의 토큰 범위를 수작업으로 할당했습니다. 그러므로 노드가 추가되거나 제거된다면 기존의 토큰 범위를 조정해야 했습니다. 토큰 범위를 조정한다는 것은 해당 데이터의 이동이 발생한다는 의미입니다. 그러므로 토큰 범위를 재할당하는 작업은 비용이 큰 작업입니다. 카산드라는 이러한 문제를 개선하기 위해 카산드라 ver. 1.2부터 Virtual Node(vnode) 라는 개념을 도입하였습니다.
이전 방식의 노드에서는 하나의 토큰 범위를 가진 반면 Virtual Node에서는 여러 개의 토큰 범위를 가질 수 있습니다. 즉, 아래와 같이 표현할 수 있습니다.
위의 그림에서 표현하였듯이 노드마다 세 개의 토큰 범위를 갖고 토큰 범위마다 연속적이지 않습니다. 토큰의 범위는 -2^63 부터 (2^63)-1 사이의 값으로 동일하지만, 노드마다 해당 범위 내에서 1개 이상 토큰 범위를 설정할 수 있습니다. 이 값은 카산드라 설치 시 기본적으로는 256개로 설정되며, 이 값을 1개로 설정한다면 이전 버전(ver. 1.1이하)의 방식과 동일하므로 Virtual Node의 장점을 사용할 수 없습니다.
'NoSQL > Cassandra DB' 카테고리의 다른 글
카산드라(cassandra), 데이터 저장 구조 - 클러스터링 키(Clustering Key) (0) | 2020.11.02 |
---|---|
카산드라(cassandra), 데이터 저장 구조 - 키스페이스(Keyspace) (0) | 2020.10.23 |
카산드라(cassandra), 토큰(token) (0) | 2020.10.12 |
카산드라(cassandra), 데이터 저장 구조 - 파티션 키(Partition Key) (0) | 2020.09.23 |
카산드라(cassandra), 데이터가 저장되는 노드 찾기 - 파티셔너(Partitioners) (0) | 2020.09.15 |