본문 바로가기

Cassandra

카산드라의 한계들

아래글은  http://wiki.apache.org/cassandra/CassandraLimitations 여기 있는 글을 발로 번역한겁니다.. ;-)


변경이 안될것 같은 것

- 모든 데이터는 하나의 머신의 하나의 로우로 있어야 한다. 왜냐하면 row키는 단지 리플리케이션을 위한 노드를 결정하는데 쓰이며, 모든 데이터는 하나의 키로 연결되어 있기 때문이다. 

- 하나의 컬럼값은 2기가 이상 커질수 없다. (큰값들이 메모리에 읽기 요청이 들어오는 것보다는 "작은 수의 MB"가 더 적절하다. )

- 컬럼당 row의 최대값은 2000,000,000(20억)개이다. 
- 키와 컬럼명은 64키로 바이트 이하이어야 한다. 


현재 코드 베이스의 산물들

- 카산드라는 키와 컬럼이라는 2단계의 인덱스를 가지고 있다. 슈퍼패밀리에는 서브컬럼들까지 3단계인데, 이것들은 인덱싱되지 않느다. 서브컬럼에 대한 모든 요청은 슈퍼컬럼의 모든 서브컬럼으로 디시리얼라이즈된다. 그러니 당신은 많은 서브컬름을 요구하는 데이터모델을 피하길 바란다. 복합 컬럼은 이것에 해당되지 않는다. 

- 카산드라의 퍼블릭 API는 Thrift - no streaming기능을 제공한다 - 에 기초해있다. 쓰기위한 값이나 수정되는 값은 모두 메모리에 저장된다. 이것은 Thrift디자인으로 부터 따온것이고 그래서 변경되지 않을 가능성이 크다. 그러니 큰오브젝트를 카산드라에 추가하기위해서는 특별한 API가 필요하다. 그 특별한 API는 큰오브젝트를 개별의 몇개의 조각으로 자른다. 
하나의 잠정적인 접근은 요기에 쓰여져 있다. http://issues.apache.org/jira/browse/CASSANDRA-265.
차선책으로서는 당신이 직접 파일을 자른다음에 최소 한사람이 64메가를 사용하게끔 당신이 편한 사이즈로 청크하라.  
그리고 하나의 row로 일치되게끔하고. 컬럼값도 청크시켜라.

한물간 한계(limitations)들
- 0.7버전이전에는 카산드라의 컴팩션 코드는 모든 row에 대해 디시리얼라이즈 되었었다(컬럼 패밀리 별로).
그래서 모든 데이타는 메모리에 있거나 2기가 이하였다.(왜냐면 row의 길이는 java의 int로 시리얼라이즈 되었었다.)
-  0.7버전 이전에는, Thrift와 cassandra 사이에 랜덤값또는 악의적인 값에대해 충돌되는 부분이 있었다. 이것은 카산들의 포트를 다른 곳으로 노출하게 만드므로 좋지 않은 생각이다. 
- 0.4버전 이전에는 카산드라는 write ack가 없을 경우 커밋로그에 대해서 fsysc를 하지 않았다. 이거는 그냥 생략.

'Cassandra' 카테고리의 다른 글

Astyanax 조사#1  (0) 2012.02.08