Learning
토픽 61 / 66·분산/저장소 자료구조

SSTable (Sorted String Table)

SSTable (Sorted String Table)

키-값 쌍이 키 순서대로 정렬되어 저장된 불변(Immutable) 디스크 파일로, LSM-Tree의 디스크 계층을 구성하는 핵심 자료구조

특징: 정렬된 불변 파일, 순차 읽기/쓰기 최적화, 병합(Merge) 효율적, 한 번 쓰면 수정 불가

구성요소

  • Data Block: 정렬된 키-값 쌍 저장, 압축 가능(Snappy, LZ4, Zstd)
  • Index Block: 각 Data Block의 첫 키와 오프셋 매핑, 이진 탐색으로 블록 위치 결정
  • Bloom Filter Block: 각 SSTable에 포함된 키의 멤버십 테스트, 불필요한 디스크 읽기 방지
  • Meta Block: 통계, 압축 정보, 필터 정보 등 메타데이터
  • Footer: Index Block과 Meta Block의 오프셋 저장

불변성(Immutability): 생성 후 수정/삭제 불가 → 동시 읽기 안전(락 불필요), 캐싱 용이, 스냅샷 지원

병합(Compaction)

  • 여러 SSTable을 병합하여 중복 키 제거, 삭제 마커(Tombstone) 적용, 새 SSTable 생성
  • 정렬된 파일 간 머지소트: O(N) 순차 읽기/쓰기 → I/O 효율적
  • Compaction 전략: Leveled(레벨별 크기 제한, 읽기 최적화), Size-Tiered(크기별 병합, 쓰기 최적화)

Bloom Filter 연계: 읽기 시 SSTable에 키가 존재하는지 Bloom Filter로 사전 확인 → 없으면 디스크 접근 생략 → 읽기 증폭 감소

읽기 과정: MemTable 검색 → L0 SSTable(최신) → L1 → L2 → ... 순서, 각 SSTable에서 Bloom Filter 확인 → Index Block 이진 탐색 → Data Block 접근

비교

적용사례: LevelDB, RocksDB, Cassandra, HBase, Google Bigtable

연관: LSM-Tree, Compaction, Bloom Filter, MemTable, WAL