카산드라란?


Cassandra, 카산드라를 언급할 때마다 개콘의 출산드라가 생각난다.

Cassandra는 아파치 분산 데이터베이스로, 구글의 BigTable 컬럼 기반 데이터 모델과 Amazon의 Dynamo 분산 모델을 기반으로 만들어졌다. Cassandra의 창시자 중 한 명인 Avinash Lakshman은 Dynamo 설계에 참여한 바 있었다. Cassadra는 곧 Facebook의 검색 엔진에 탑재되었다. 2008년 구글 코드를 통해 오픈 소스로 배포되었고, 2009년에는 아파치 프로젝트로 등록되었다. 당연하지만 NoSQL 제품 중 하나이다. 수년 전 Twitter가 MySQL에서 Cassandra로 전환하였다.

Cassandra는 Java 언어로 개발되었지만 Java 외에도 Perl, Ruby, Python, Scala, PHP, C# 등 다양한 언어를 지원한다. 

2014년 초 DB엔진닷컴이라는 DB 시장 랭킹 사이트에 따르면 Cassandra 는 전체 DBMS 랭킹에서 9위를 차지하고 있다. (참고로 MongoDB는 5위이며, Oracle NoSQL은 74위임)

Stephen Yen(스티븐 옌)은 "NoSQL is a Horseless Carriage" 라는 글에서 NoSQL에 대한 분류를 하였는데, Cassandra는 BigTable, HBase, Hypertable 등과 함께 "Wide Columnar Store"로 분류되었다. (원글은 찾을 수 없는 상태이며, 관련되어 http://highscalability.com/blog/2009/11/5/a-yes-for-a-nosql-taxonomy.html 참고)

Cassadra는 row key 를 가지는 key-value(K-V)형 저장소다. 또한 column을 기본으로 데이터를 다루는 colum 형 NoSQL 데이터베이스로 분류되기도 하는데, row 중심인 RDB 와는 달리 디스크에 데이터를 column 단위로 연속하여 저장한다. Column 단위로 관리되기 때문에 동일한 데이터라도 row 단위로 관리하는 것에 비해 더 많이 저장할 수 있다. 즉, 대량 데이터를 다루는데 특화되어 있다.

Column이 기본 단위로 column 에는 name, value, time stamp가 포함된다. Row key로 식별되는 한 row에는 여러 column이 포함될 수 있으며, 한 row에 저장할 수 있는 column 수는 20억개이고 각 row key의 최대 크기는 64KB 이다.

단점도 있다. RDB와는 다른 column형 DB인 관계로 생소하고 진입 장벽이 높다. 따라서 대량 데이터를 다루는 것이 아닌 경우 Cassandra를 고집할 필요는 없다. 

또한 복잡한 조건의 검색이 불가능하다. Row key와 column, 두 가지에 대한 index만 존재한다. 대량 데이터에 단순한 검색 조건인 경우는 무난하다.

Insert와 Update 시에는 원자성 보장이 안된다. 만약 lock을 구현하려면 zookeeper 등을 사용해야 한다.