2014-10-17 7 views
3

CQL을 통해 정의 된 두 개의 테이블 (열 패밀리)이 있다고 가정 해 보겠습니다. 지금 같은 파티션 키를 사용하여 각 테이블에 행을 삽입하는 경우테이블은 Cassandra에서 파티션 ("로우 레벨 로우")을 공유합니까?

CREATE TABLE a (
    pk uuid, 
    cka int, 
    val text, 
    PRIMARY KEY (pk, cka) 
); 

CREATE TABLE b (
    pk uuid, 
    ckb text, 
    val1 boolean, 
    val2 decimal, 
    PRIMARY KEY (pk, ckb) 
); 

:

INSERT INTO a (pk, cka, val) 
    VALUES ('f47ac10b-58cc-4372-a567-0e02b2a3d379', 5, 'hi'); 

INSERT INTO b (pk, ckb, val1, val2) 
    VALUES ('f47ac10b-58cc-4372-a567-0e02b2a3d379', 'x', 'hello', 'hey'); 

이제 스토리지 수준에서 1 개 또는 2 행이 될 것인가?

답변

3

카산드라 2.

데이터에 디스크 "memtables"다음 플러시에 "SSTables"에 기록되어있을 것입니다. memtables 및 SSTables는 열 단위 패밀리 단위로 으로 유지 관리되므로 서로 다른 열 패밀리 (테이블)의 행은 항상 저장소 수준에서 고유 한 행을 작성합니다.

http://www.datastax.com/docs/1.1/dml/about_writes

산드 먼저 (내구성) 커밋 로그 기록하고 메모리 내의 테이블 구조에 memtable라고 쓴다 참조. 쓰기가 완료되면 은 성공적으로 커밋 로그와 메모리에 기록되므로, 은 쓰기시 매우 적은 디스크 I/O입니다. 쓰기는 메모리에서 일괄 처리되고 주기적으로 디스크에 SSTable (정렬 된 문자열 테이블)이라는 영구 테이블 구조로 기록됩니다. Memtables 및 SSTables는 열 패밀리별로 유지 관리됩니다. Memtables는 행 키별로 정렬 된 으로 구성되며 순차적으로 SSTable로 플러시됩니다 (관계형 데이터베이스와 마찬가지로 무작위로 검색하지 않음).