Database/NoSQL

[Cassandra] 카산드라 기본 개념

빈쿵바라기 2023. 5. 23. 17:08

카산드라 구성 컴포넌트

  • 카산드라 노드(Node)
    • 데이터가 저장되는 저장소
    • 여러개의 노드를 연결하는 구조로 노드에 장애가 발생하더라도 데이터가 복제된 다른 노드에서 데이터를 제공
    • 여러 개의 노드를 연결을 링(Ring)이라 표현

  • 데이터 센터
    • 서로 관련된 노드들의 집합
  • 클러스터
    • 하나 이상의 데이터 센터를 포함
  • 커밋 로그(Commit log)
    • 저장할 데이터가 입력 되면 커밋 로그에 해당 내용을 기록
    • 커밋 로그에 기록되면 카산드라가 데이터의 입력이 성공했다고 판단
    • 커밋 로그에 입력 된 후에는 해당 노드가 다운되거나 재시동하더라도 커밋 로그에 데이터가 존재하는 한 해당 내용을 복원 가능
  • Memtable
    • 카산드라의 메모리에 저장되어 있는 데이터
    • 커밋 로그에 기록 된 다음 데이터는 영구적으로 디스크에 저장하기 전에 Memtable에 저장
  • SSTable(Sorted String Table)
    • Memtable 또는 커밋 로그에 저장된 데이터가 꽉차면 비로서 Memtable에 있는 내용을 디스크에 SSTable 생성하여 기록
    • 파티션 키(Partition Key)와 클러스터링 키(Clustering Key)기준으로 정렬

 

카산드라 데이터 구조

  • 키스페이스(Keyspace)
    • 논리적 데이터의 최상단에 있는 컨테이너
    • RDB에서 데이터베이스와 비슷한 개념
    • 칼럼패밀리의 집합으로 구성
    • 키스페이스를 생성 시 데이터를 몇 개의 노드에 복제할지 결정(키스페이스 속성 설정)
    • 키스페이스 속성
      • Replication factor : 데이터 복제본 개수
        • 예를 들어 3으로 선언한 경우는 저장된 데이터를 인접한 두 개의 노드에 데이터를 복제
      • Replica placement strategy : 노드 링(Ring)에서 복제본 노드를 어떤 식으로 배치할지 결정
  • 칼럼 패밀리(Column Family) = 테이블(Table)
    • 키스페이스 안에 존재하며, 칼럼을 담는 컨테이너
    • Column과 Row로 구성되어 있어 RDB에서 테이블과 비슷함
    • 각 행(Row)마다 서로 다른 칼럼(Column)을 가질 수 있다.

  • 칼럼(Column)
    • 데이터를 이루는 가장 작은 다위 
    • 'name'과 'value'를 가지며 데이터가 갱신된 시각을 포함한 데이터 구조체
{  
    name: "emailAddress",
    value: "myEmail@example.com",
    timestamp: 123456789
}
  • 슈퍼칼럼(Super Column)
    • 칼럼 구조체 안에 다시 칼럼이 들어가 있는 구조체
    • 'name'과 'value'로 이루어짐
    • 슈퍼칼럼은 사용하지 않을 수 있음
{  
    name: "userAddress",
    value: {
        street: {name: "street", value: "75 park place", timestamp: 123456789},
        city: {name: "city", value: "New York", timestamp: 123456789},
        zip: {name: "zip", value: "58326", timestamp: 123456789},
    }
}