LSM ํธ๋ฆฌ
LSM ํธ๋ฆฌ๋ Log Structured Merge Tree์ ์ค๋ง๋ก, ๋ก๊ทธ์ ๊ฐ์ด ์ฌ์ด์ฆ๊ฐ ํฐ ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌ ํํ๋ก ์ ์ฅํด์ ์ธ๋ฑ์ฑํ ์ ์๊ฒ ํด์ฃผ๋ ์๋ฃ๊ตฌ์กฐ๋ค.
Patrick O'Neil์ธ 3๋ช ์ ์ํด 1996๋ ์ ๊ณ ์๋์๋ค.
์์ฉ ์์ค์์ ์์ฃผ ์ฐ์ง ์๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์๊ฑธ ๋ง๋ค๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
RDB์์ ์ง๋ฐฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ ํต์ ์ธ ์ธ๋ฑ์ค ๊ตฌ์กฐ์ธ B-Tree์ ๋๋น๋๋ ํธ์ด๋ค.
LSM ํธ๋ฆฌ์ ๊ตฌ์กฐ์ ์๋ฆฌ
LSM ํธ๋ฆฌ๋ ์ผ๋ฐ์ ์ธ ํธ๋ฆฌ์ ๋ค๋ฅด๊ฒ ๋ช๊ฐ์ ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋๋ค. ์ต์ด๋ก ์ ์๋ ํํ๋ 2๋จ๊ณ์ด๋, ์ผ๋ฐ์ ์ผ๋ก๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 3๋จ๊ณ๋ก ๊ตฌ์ฑ๋๋ค.
ํ์ผ ์ฌ์ด์ฆ๊ฐ ๋๋ฌด ํด ๋๋ฅผ ๊ณ ๋ คํด์ ์ค๊ฐ sort ๋ ์ด์ด๋ฅผ ํ๋ ๋ ์ถ๊ฐํ ๊ฒ์ด๋ค.
์ฌํํผ ๊ธฐ๋ณธ์ ์ธ ์ ์ฅ ์๋ฆฌ๋ ์ด๋ ๋ค.
- ๋น ๋ฅด๊ณ ์์ ๋ฉ๋ชจ๋ฆฌ(RAM)์๋ ์ง์ง ํธ๋ฆฌ ํํ๋ก ์ธ๋ฑ์ค ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ด๋ฅผ memtable์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๋ ๋๋ธ๋ ํธ๋ฆฌ, skiplist ๋ฑ์ผ๋ก ๊ตฌํ๋ ์ ์๋ค.
(level 0) - ๋๋ฆฌ๊ณ ํฐ ๋์คํฌ์๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ด๋ฅผ Sorted String Table(SST)์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
(level 1, 2)
์ฐ๊ธฐ ๋์ ์๋ฆฌ๋ ์ด๋ ๋ค.
- ์ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ /์์ ํ ๋๋ ์๊ณ ๋น ๋ฅธ memtable์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ๋ง์ฝ memtable์ ํฌ๊ธฐ๊ฐ ์ผ์ ์น(๋ช MB)๋ฅผ ์ด๊ณผํ๋ฉด ๊ทธ๊ฑธ ํ์ผ๋ก ์ ์ฅํด์ ๋์คํฌ์ ๋ณด๊ดํ๋ค.
- ํ์ผ์ด ์์ฑ๋๋ ๊ณผ์ ์ ํญ์ append only๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ seq I/O๋ก ๋์์ ๋งค์ฐ ๋น ๋ฅด๋ค.
์ฝ๊ธฐ ๋์ ์๋ฆฌ๋ ๊ฐ๋จํ๋ค.
- ์ฝ๊ธฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด memtable์์ ํค๋ฅผ ์ฐพ๋๋ค.
- ํค๊ฐ memtable์ ์๋ค๋ฉด ๋์คํฌ์ ์ต์ ์ธ๊ทธ๋จผํธ๋ถํฐ SS Table์ ๋ค์ ธ์ ๊ฐ์ ์ฐพ๋๋ค.
- ์ด ์ฝ๊ธฐ ์ฑ๋ฅ์ O(N)๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ํ์ผ์ด ์ปค์ง์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ์ฌ๊ฐํ๊ฒ ์ ํ๋ ์ ์๋ค.
- ๋๋ฌธ์ ์ฑ๋ฅ ๋ณด์์ ์ํด ์ฌ๋ฌ๊ฐ์ง ๋ณด์กฐ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ๋ค.
์ปดํฉ์ (Compaction)
LSM์ ๊ณ์ํด์ ํ์ผ์ appendํ๋ ๊ตฌ์กฐ๋ผ๊ณ ํ๋ค.
๋๋ฌธ์ ํ์ผ์ด ๋์ด๋ ๋๋ง๋ค read ์๊ฐ์ด ์ ํ์ ์ผ๋ก ๋์ด๋๋๋ฐ, ๊ทธ๊ฑธ ์ข ์ค์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ์ปดํฉ์
์ด๋ค.
๊ทธ๋์ LSM์ ๊ธฐ๋ฐํ ๋๋ถ๋ถ์ DB ์์คํ ์์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค์์ ์ปดํฉ์ ์ ๋๋ ค์ ์ฌ๋ฌ๊ฐ์ SS Table ํ์ผ์ ๋ณํฉํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
์ ์ด์ ๊ฐ ํ์ผ๋ค์ด ์ ๋ ฌ๋ ์ํ๋ก ์ ์ฅ๋์ด์๊ธฐ ๋๋ฌธ์ ์ด ๋ณํฉ์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ด๋ฃจ์ด์ง๊ณ , ์ด ๋์ํํ๊ฐ merge sort์ ๋น์ทํ๋ค๊ณ ํด์ Merge Tree๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฒ์ด๊ธฐ๋ ํ๋ค.
์๋ฌดํผ ์ด ์ปดํฉ์ ๊ณผ์ ์์ ์ค๋ณต๋ ํค๋ ์ญ์ ๋ ํค๋ ์ ๊ฑฐ๋๋ค.
๋ธ๋ฃธ ํํฐ
LSM์์ read ์ฑ๋ฅ์ ๋์ด์ฌ๋ฆฌ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ์ฃผ๋ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ ๋ธ๋ฃธ ํํฐ๋ค.
์์ธํ ๊ฒ์ ๋ณ๋ ํฌ์คํธ๋ฅผ ์ฐธ์กฐํ๋ค.
https://blog.naver.com/sssang97/223231946274
LSM Tree vs B-Tree
LSM ํธ๋ฆฌ๊ฐ ์๋ก ๋ ์ค๋ฅด๋ ํํ์ ๊ตฌ์กฐ๋ผ๊ณ ํด์ B-Tree๋ณด๋ค ์ฐ์ํ๋ค๊ฑฐ๋ ํ๊ฑด ์๋๋ค.
๊ทธ๋ฌ๋ฉด ๋ค ๊ฐ์์๊ณ B-Tree๋ฅผ ๋ฒ๋ ธ๊ฒ ์ง...
๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์๋๋ฐ, ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ๋์ฒด๋ก LSM์ write๊ฐ ๋น ๋ฅด๊ณ , B-Tree๋ read๊ฐ ๋น ๋ฅด๋ค๊ณ ํ ์ ์๋ค.
write์ ์ต์ ํ๋ NoSQL ์์คํ
๋ค์ด ๋๋ถ๋ถ LSM์ ์ฐจ์ฉํ๋ ์ด์ ์ด๊ธฐ๋ ํ๋ค.
๋์คํฌ ์ ์ฅ ํจ์จ๋ LSM์ด ์ข์ ํธ์ด๋ค. LSM์ด ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋ผ์ ๋์คํฌ๊ฐ ๋ญ๋น์์ด ๊ฝ๊ฝ ์ฐจ๋ ๋ฐ๋ฉด์, B-Tree๋ ํํธํ๋ผ์ ๋น ๊ณต๊ฐ์ด ๋ง์ด ์๊ธด๋ค.
๋์์ฑ ์ ์ด ์ธก๋ฉด์์๋ LSM์ด ๋์จํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ์ ๋ถ๋ฆฌํ ๋ถ๋ถ์ด ์๋ค.
B-Tree๋ ํ ํค๊ฐ ๋์์ ํ ๊ณณ์๋ง ์กด์ฌํ๋ค๋๊ฒ ๋ณด์ฅ๋๋๋ฐ, LSM์ ์ฌ๋ฌ ํ์ผ์ ํผ์ ธ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ํด์, ๊ฐ๋ ฅํ ํธ๋์ญ์
์์ค์ ๋ณด์ฅํด์ผ ํ ๋๋ B-Tree๊ฐ ์ ๋ฆฌํ ๋ถ๋ถ์ด ๋ง๋ค.
์ฌ์ฉ๋ก
์์ฉ ์์ค์ ์ฌ์ฉ๋ก๋ ์ ์ง๋ง, ์์คํ ์์ค์์๋ ๋งค์ฐ ๋ง์ด ์ฌ์ฉ๋๋ค.
Apache AsterixDB, Bigtable, HBase, LevelDB, Apache Accumulo, SQLite4, Tarantool, RocksDB, WiredTiger(MongoDB), Apache Cassandra, InfluxDB, YugabyteDB, ScyllaDB, and CockroachDB ๋ฑ... ๋น๊ต์ ๊ทผ๋์ ํ์ํ DB ์์คํ
๋ค์ ๋๋ถ๋ถ LSM ํธ๋ฆฌ๋ก ์ธ๋ฑ์ค ์์คํ
์ ๊ตฌํํ๋ค.
์ด๊ฑฐ ๋ง๊ณ ๋ ๋ง๋ค.
์ฐธ์กฐ
https://en.m.wikipedia.org/wiki/Log-structured_merge-tree
https://jaeyeong951.medium.com/%EC%83%89%EC%9D%B8-index-%EC%9D%98-%EB%91%90-%EA%B0%80%EC%A7%80-%ED%98%95%ED%83%9C-lsm-%ED%8A%B8%EB%A6%AC-b-%ED%8A%B8%EB%A6%AC-7a4ab7887db5
https://getchan.github.io/data/LSM_tree/
https://sukill.tistory.com/m/87