Database/Cassandra

[Cassandra] Table, Column, Partition Key Clustering Key

bisi 2020. 5. 21. 11:55

카산드라 테이블 생성, Partition Key와 Clustering Key 설정, 컬럼 특성에 대해서 알아보자.

 

1. 테이블 생성 규칙

테이블 이름은 영숫자 및 밑줄로 구성될수 있다. 

반드시 문자로 시작해야한다. 

 

2. 주요 키 

카산드라의 주요 키(Primary key)는 파티션 키(Partition Key)와 클러스터링 키(Cluster Key)로 구성되어 있다. 

주요 키를 설정은 테이블을 생성할 때 적용할 수 있다. RDBMS의 쿼리문과 비슷하게 사용할 수 있다. 

파티션키는 필수적으로 설정되어야하고, 복합키로도 설정이 가능하다. 

 

주요 키 설정 방법은 2가지가 있다.

 

방법 1. Column에 직접 설정

CREATE TABLE emp(
     emp_id int PRIMARY KEY,
     emp_name text,
     emp_city text,
     emp_sal varint,
     emp_phone varint,
);

 

방법2. Primary key으로 설정

CREATE TABLE emp2(
     emp_id int ,
     emp_name text,
     emp_city text,
     emp_sal varint,
     emp_phone varint,
     primary key (emp_id, emp_city )
);

 

카산드라의 데이터는 파티션키를 기준으로 저장이되기 때문에,  파티션의 크기, 파티션 내 데이터 순서, 클러스터 노드 간 파티션 분포를 고려하여 최소 1개 이상의 파티션 키를 가져한다.

 

클러스터링 키는 파티션키 내부에서 데이터 순서를 정렬한다. 이 값은 필수적으로 설정하지 않아도 된다. 하지만 데이터를 최적화된 성능으로 가져오기 위해 데이터 구조에 맞는 클러스터링 키를 설정하는 것을 추천한다.

 

복합키로 설정할때는 방법2을 활용하여 괄호로 구분하면 된다.

 

  • 파티션 키 : emp_id, emp_name | 클러스터링 키 : emp_city
CREATE TABLE emp2(
     emp_id int ,
     emp_name text,
     emp_city text,
     emp_sal varint,
     emp_phone varint,
     primary key ((emp_id, emp_name), emp_city )
);

 

  • 파티션 키 : emp_id | 클러스터링 키 : emp_sal, emp_city
CREATE TABLE emp2(
     emp_id int ,
     emp_name text,
     emp_city text,
     emp_sal varint,
     emp_phone varint,
     primary key (emp_id, (emp_sal, emp_city) )
);

 

  • 파티션 키 : emp_id, emp_name | 클러스터링 키 : X
CREATE TABLE emp3(
                     emp_id int ,
                     emp_name text,
                     emp_city text,
                     emp_sal varint,
                     emp_phone varint,
                     primary key (( emp_id, emp_city) )
);

 

클러스터링 키의 구체적인 순서는 아래와 같이 WITH CLUSTERING ORDER BY 옵션을 적용해주면 된다.

CREATE TABLE emp5(
     emp_id int ,
     emp_name text,
     emp_city text,
     emp_sal varint,
     emp_phone varint,
     primary key (emp_id, emp_city )
)WITH CLUSTERING ORDER BY (emp_city DESC);

옵션을 적용하지 않는 기본값은 ASC 이고, ASC 나 DESC로 구체적으로 설정해줄 수 있다.

 

 

3. 컬럼의 데이터 타입

테이블의 컬럼은 아래와 같은 다양한 타입을 지원한다.

주로 많이 사용하는 타입은 text, int, timestamp 등이 있다. 

 

map, set, list와 같은 데이터 콜렉션 타입의 지원이 된다. 

콜렉션 타입은 중첩 될 수 없으며, 컬렉션에는 고정 된 데이터 형식이 포함 될 수 있다. 

 

  • 콜렉션 타입 사용 예시
CREATE TABLE team
(
    id            UUID PRIMARY KEY,
    lastname      text,
    cyclist_teams set<text>,
    events        list<text>,
    teams         map<int,text>
);

 

카산드라는 자바로 구현할때 데이터 타입을 바로 적용할 수 있는 장점이 있다. 

단, decimal, float, double, varint 타입은 주의해서 사용해야한다. [공식레퍼런스 바로가기]

 

 

 

 

 

 

참고 사이트 

https://docs.datastax.com/en/cql-oss/3.3/cql/cql_reference/cql_data_types_c.html

https://docs.datastax.com/en/dse/5.1/cql/cql/cql_reference/cql_commands/cqlCreateTable.html

https://www.tutorialspoint.com/cassandra/cassandra_create_table.htm