... 카산드라는 위의 네 가지 특징을 가진 NoSQL이다.
Primary Key는 기존의 SQL에서의 개념과 같이 한 row 값을 나타나는 키 값
... PK = Partition Key + Clustering Key
Partition Key: 어느 노드에서 처리할 지 판단할 때, 사용하는 키 값
Clustering Key: 한 노드 내에서 데이터를 저장할 때, 사용하는 키 값
복합 파티션 키(Composite Partition Key), PK를 여러 컬럼으로 지정할 경우에 첫 번째 컬럼이 파티션 키가 된다. 그러나 파티션 키를 다수의 컬럼으로 지정할 수 있다. 여러 컬럼으로 파티션 키로 사용하는 것을 복합 파티션 키라 한다.
파티션 키는 다수의 노드 사이에서 어떤 노드에서 데이터를 처리할 지 결정할 때 사용한다. 즉, 파티션 키의 값에 따라 데이터를 처리할 노드가 결정된다. 만약 파티션 키에 대한 고려 없이 설정할 경우, 스큐(skewed) 현상이 일어날 수 있다. 따라서 테이블을 설계할 때, 파티션 키에 대한 cardinality와 파티셔너에 대한 충분한 고려가 필요하다.
Replication Factor(How Many Replica) + Replication Strategy(How to Replicate)
데이터를 한 노드에만 저장하는 것이 아니라 다수의 노드에 복사본을 저장하여 가용성을 높이는 개념이다.
파티션 키 값에 따라 한 노드에서 데이터를 처리할 때, 이 노드가 현재 사용할 수 없는 상황이라고 하면 replication strategy에 따라 다른 노드로 하여금 데이터를 처리하도록 한다.
Write Consistency & Read Consistency
One: 단 하나의 노드에서만 응답한 결과를 반환
All: Replica 수만큼, 모든 노드에서의 응답한 결과를 반환
Quorum: 지정한 quorum 수 만큼 노드에서의 응답한 결과를 반환
Local Quorum: Quorum과 같지만, 다른 데이터센터가 현재 데이터센터에서 응답한 결과를 반환
노드들 간에 서로의 상태를 특정 주기마다 공유하는 매커니즘, 이 프로토콜을 통해 어떤 노드가 이상한지 알 수 있다.
Commit Logs: 디스크 파일에 커밋 내용을 저장한다. 복구할 때, 사용한다.
Memtable: In-memery 테이블로 특정 크기를 가진 테이블이다. 메모리라서 쓰기 성능이 좋지만 휘발성, 크기 제한이 있다.
SSTable: Memtable은 휘발성이기 때문에 SSTable을 이용하여 데이터를 디스크에 저장한다. SSTable은 immutable하기 때문에 데이터를 수정할 수 없다. 최신 데이터를 저장하고 수정 이전의 데이터는 tombstone 으로 마킹한다.
Row Cache
Bloom Filter: 데이터가 있다고 했지만 실제로는 없을 수 있다. 그러나 데이터가 없다고 하면 반드시 데이터가 없다(False Positive).
Partition Key Cache
Partition Index Summary File: 데이터 인덱스를 빠르게 찾기 위해 도와준다.
Partition Index File
다수의 SSTable을 하나의 새로운 SSTable로 머지하는 작업이다. Tombstone 데이터와 중복 데이터를 지운다. Compaction이 진행될 때, stop the world가 일어난다.