LSM 내부 흐름

쓰기는 먼저 받고, 정리는 나중에 한다

LSM-Tree는 무작위 디스크 갱신을 줄이기 위해 메모리에서 쓰기를 흡수한 뒤, 가득 차면 SSTable로 내리고 백그라운드에서 다시 합칩니다.

쓰기

새 레코드를 MemTable에 먼저 기록

메모리 쓰기라 매우 빠르고, 디스크 랜덤 I/O를 바로 만들지 않습니다.

Flush

MemTable이 차면 디스크에 SSTable로 순차 저장

기존 페이지를 제자리 수정하지 않고, 읽기 전용 파일을 하나 더 만듭니다.

정리

쌓인 SSTable은 Compaction으로 병합

중복과 오래된 값을 정리해 공간 효율을 높이고 검색 범위를 줄입니다.

읽을 때는 이렇게 확인

MemTable → 최신 SSTable → 오래된 SSTable 순으로 찾기 때문에, 읽기는 B+Tree보다 더 많은 파일을 확인할 수 있습니다.

잘 맞는 워크로드

RocksDB, LevelDB, Cassandra, HBase처럼 쓰기 비중이 높고 로그·시계열 유입이 큰 시스템

B+Tree와 비교

선택 기준은 읽기 경로와 증폭 특성

둘 다 정렬된 검색 구조지만, B+Tree는 즉시 갱신 중심이고 LSM-Tree는 배치 정리 중심입니다.

항목 B+Tree LSM-Tree
읽기 한 트리 경로를 따라 바로 탐색 MemTable과 여러 SSTable을 확인
쓰기 페이지를 제자리 갱신 메모리 기록 후 순차 flush
공간 효율 보통 좋음
쓰기 증폭 높음 낮음
읽기 증폭 낮음 높음
대표 workload OLTP 로그, IoT, 시계열

한 줄 정리

읽기 지연을 최소화하려면 B+Tree, 쓰기 유입량을 오래 버텨야 하면 LSM-Tree가 더 잘 맞습니다.