
기본 키 (Primary Key)
카산드라에서 기본 키는 하나 이상의 파티션 키(Partition Key)와 0개 이상의 클러스터링 키(Clustering Key)로 구성되어 있습니다. 기본 키는 데이터를 고유하게 식별하는 것 외에도 기본 키의 파티션 키는 분산되어 있는 클러스터 내에서 데이터 배치에 중요할 역할을 합니다.
파티션 키(Partition Key)
파티션 키의 기본 목표는 데이터를 클러스터 전체에 고르게 분산하는 것입니다. 파티션 키는 데이터를 고유하게 식별하는것과 별도로 데이터가 어떤 노드에 배치할지를 위한 것이며 항상 기본키 정의의 첫 번재 값이 파티션 키가 됩니다.
CREATE TABLE chat (
chatroom_id int,
message_id int,
content text,
PRIMARY KEY (chatroom_id, message_id)
);
위의 CREATE 예제문에서 PRIMARY KEY (chatroom_id, message_id)
에서 첫 번째 key인 chatroom_id가 파티션 키가 됩니다.
클러스터링 키(Clustering Key)
클러스터링 키는 데이터가 배치된 노드 내에서 디스크의 어떤 위치에 저장될지를 결정합니다. (어느 노드에 저장될지에는 관여하지 않습니다.) 노드 내의 모든 데이터는 클러스터링 키를 기준으로 정렬되어 저장됩니다. 클러스터링 키는 기본키의 첫 번째 key를 제외한 나머지 키가 클러스터링 키가 됩니다.
위의 CREATE 예제문에서 PRIMARY KEY (chatroom_id, message_id)
에서 두번째 key인 message_id가 파티션 키가 됩니다.
몇가지 샘플 데이터를 넣어서 확인해 보겠습니다.
insert into chat(chatroom_id, message_id, content) values(1, 3, '안녕하세요!');
insert into chat(chatroom_id, message_id, content) values(1, 2, '반갑습니다');
insert into chat(chatroom_id, message_id, content) values(2, 1, '매너 채팅 부탁드립니다');
insert into chat(chatroom_id, message_id, content) values(1, 1, '채팅방이 생성 되었습니다.');
insert into chat(chatroom_id, message_id, content) values(2, 2, '알겠어요~');
select * from chat;

위의 테이블 정의에서 볼 수 있듯이 같은 파티션 키(chatroom_id) 내 클러스터링 키(message_id)가 오름차순으로 정렬되어있습니다. 기본적으로 카산드라는 클러스터링키 열의 오름차순으로 데이터를 정렬하지만 테이블 정의에서 WITH CLUSTERING ORDER BY
절을 사용하여 정렬 방법을 변경할 수 있습니다.
CREATE TABLE chat (
chatroom_id int,
message_id int,
content text,
PRIMARY KEY (chatroom_id, message_id)
) WITH CLUSTERING ORDER BY (message_id DESC)
지금까지 하나의 파티션 키와 하나의 클러스터링 키 조합만 살펴봤는데, 파티션키와 클러스터링 키 모두 여러개로 구성할 수 도 있습니다.
PRIMARY KEY((col1, col2), col3, col4)
col1, col2가 파티션 키가 되어 2개의 칼럼 조합으로 노드에 배치가 되고, col3, col4가 클러스터링 키로 작성 된 순서대로 데이터가 정렬이 됩니다.
'Database > NoSQL' 카테고리의 다른 글
[Cassandra] Cassandra 설치 방법 (0) | 2023.06.05 |
---|---|
[Cassandra] 조건 조회(Select Where)에 대하여 (0) | 2023.06.02 |
[Cassandra] 카산드라 기본 개념 (0) | 2023.05.23 |
[Cassandra] Apache Cassandra 란? (0) | 2023.05.19 |
[NoSQL] Cassandra vs Hbase vs MongoDB (0) | 2023.05.19 |