https://priyankvex.wordpress.com/2019/04/28/introduction-to-lsm-trees-may-the-logs-be-with-you/
원문링크
Introduction to LSM Trees: May the logs be with you
LSM Trees overview This post is a part of a newsletter that I run: “Scamming The Coding Interview“, which is geared towards helping people ACE their coding interviews. We send a coding qu…
priyankvex.wordpress.com
소개
우리가 생각할 수 있는 가장 심플한 데이터 베이스의 구현은 어떤 것일까 ?
간단하게 파일의 끝에 append 하는 방법이 가장 그럴싸한(구현하기 쉬운) 설계일 것이다.
사실 이 바닥에서는 불변의(새로만들지 않는) append-only 데이터 구조가 실제로 가장 강력한 아이디어다. Appen 전용의 로그에 데이터를 저장하는 이 아이디어는 SSTable 과 LSM Tree 의 기본 개념이다. 카산드라와 RockDB 가 이런 개념의 DB이다.
What is an LSM Tree?
LSM Tree를 정의한다면 다음과 같다.
“Log Structured Merge Tree” 는 성능을 우선시하는 그래서 인서트와 업데이트 비율이 높은 성격의 데이터를 저장할 때 매력적인 데이터 스트럭쳐다.
LSM Tree는 2 혹은 그 이상의 레벨로 구성된 트리 같은 데이터 스트럭쳐다. 가장 간단한 버전은 C0와 C1 두 레벨로 구성된다.
C0 은 memtable 이라고도 불리는데 온전히 메모리에만 존재한다. memtable 은 AVL 같은 Balanced tree 구조를 이용해서 구현하고 key로 정렬된 key-value 형태로 저장한다. 모든 insert 와 update 는 C0 에 쓰여진다.
C1은 사이즈가 매우 크고 메모리가 아니라 디스크에 저장된다. C1은 빠른 key lookup 을 위해 해쉬 인덱스(Hash Index)를 동반한 불변 immutable 로그 세그먼트들로 구성된다.
C1은 일반적으로 SSTable 로 구현한다.
What are SSTables and how does it fit in the LSM tree?
log 기반의 데이터 스트럭쳐에서 , Insert 와 update 들은 로그 파일에 append 된다. 파일에 append 한다는 것이 매우 효율적이고 빠르다는 것이 main 아이디어이고 이 아이디어가 DB가 많은 양의 쓰기 작업을 감당할 수 있게 만들어 준다. 로그 파일들이 늘어감에 따라 이 파일들을 분할 (segment) 하는 것이 당연하다. 이래서 SSTable (String Sorted Table) 이 등장한 것이다.
SSTable 은 immutable 로그 세그먼트들에 문자열 기준으로 정렬되어 key-value 쌍 형태로 저장된다.
이런 구조이 주요 장점
-
Lookup 이 매우 빠르고 효율적이다. Hash Index가 없을 때도
-
Range query (범위 질의)가 가능함
만약 C0의 in-meomory 사이즈가 설정치를(일반적으로 몇 메가바이트) 초과하게 되면 SSTable 에 키로 정렬된 새로운 Segment로 Disk에 flush 된다
Overview of LSM Tree’s working:
지금까지 LSM 트리에 대한 모든 컨셉들을 살펴보았기 때문에 이제 각각의 조각들을 합쳐서 큰 그림을 볼 수 있게 되었다.
Inserting data into LSM Tree:
-
쓰기 요청이 들어오면 메모리 상주 table 에 insert 하고
-
메모리 상주 table 의 사이즈가 설정치를 초과하면 disk 에 flush 되고
-
메모리 상주 table이 이미 정렬되어 있다면 새로운 SSTable segment 를 생성한다
-
old segment들은 주기적으로 merge 되서 disk space 에 저장되고 data 의 파편화를 최소화한다.
Reading data from LSM Tree:
-
주어진 키가 먼저 메모리 상주 table에서 lookup 되고
-
그런 다음에 hash index 를 사용하여 compaction 상태에 따라 하나 혹은 그 이상의 segment 에서 search 한다.
Sample use case in a system
LSMTree 설계에서 지적했듯이 트랜잭션 로그 라든가 사용자 이벤트 혹은 어떤 스트림 데이터를 자주 쓰는 workload가 많은 경우를 처리하기 위해서 좋은 방식이다.
예를 들어 LSM Tree 은 어떤 애플리케이션들이 생성한 이벤트들을 저장할 때 활용될 수 있다.
Advantages of LSM tree
-
LSM Tree 는 매우 높은 write 성능을 낼 수 있다
-
LSM Tree 는 더 잘 압축되어 사이즈가 훨씨 적은 로그 세그먼트 파일을 만들어 낼 수 있다.
Disadvantages of LSM Tree
-
압축(Compaction) 과정이 현재 실행중인 read write 성능을 저하시킬 수 있다
-
Read/Write 처리량이 압축과정에서 소모되어 성능을 감소 시킬 수 있다.
-
각각의 키가 동시에 여러 곳에 존재하기 때문에 키의 존재 여부를 체크할 때는 모든 세그먼트를 다 스캔해야 한다.
Conclusion
LSM Tree 는 단지 log 에 append 한다는 아이디어 기반한다. 전통적인 데이터 베이스 시스템에서 병목지점인 매우 높은 쓰기 처리량을 필요로 할 때 유용하다.
'Study > 발번역' 카테고리의 다른 글
SF 2023_08호 (0) | 2023.08.23 |
---|---|
Science Focus 2023년 5월호 (1) | 2023.05.22 |
Science Focus March 2021 (0) | 2023.03.08 |