LSM ํŠธ๋ฆฌ

LSM ํŠธ๋ฆฌ๋Š” Log Structured Merge Tree์˜ ์ค€๋ง๋กœ, ๋กœ๊ทธ์™€ ๊ฐ™์ด ์‚ฌ์ด์ฆˆ๊ฐ€ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์ €์žฅํ•ด์„œ ์ธ๋ฑ์‹ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค.

Patrick O'Neil์™ธ 3๋ช…์— ์˜ํ•ด 1996๋…„์— ๊ณ ์•ˆ๋˜์—ˆ๋‹ค.

์‘์šฉ ์ˆ˜์ค€์—์„œ ์ž์ฃผ ์“ฐ์ง„ ์•Š๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ™์€๊ฑธ ๋งŒ๋“ค๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
RDB์—์„œ ์ง€๋ฐฐ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ „ํ†ต์ ์ธ ์ธ๋ฑ์Šค ๊ตฌ์กฐ์ธ B-Tree์™€ ๋Œ€๋น„๋˜๋Š” ํŽธ์ด๋‹ค.




LSM ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ์™€ ์›๋ฆฌ


LSM ํŠธ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์ธ ํŠธ๋ฆฌ์™€ ๋‹ค๋ฅด๊ฒŒ ๋ช‡๊ฐœ์˜ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ตœ์ดˆ๋กœ ์ œ์•ˆ๋œ ํ˜•ํƒœ๋Š” 2๋‹จ๊ณ„์ด๋‚˜, ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 3๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
ํŒŒ์ผ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋„ˆ๋ฌด ํด ๋•Œ๋ฅผ ๊ณ ๋ คํ•ด์„œ ์ค‘๊ฐ„ sort ๋ ˆ์ด์–ด๋ฅผ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋‹ค.

์—ฌํ•˜ํŠผ ๊ธฐ๋ณธ์ ์ธ ์ €์žฅ ์›๋ฆฌ๋Š” ์ด๋ ‡๋‹ค.

  1. ๋น ๋ฅด๊ณ  ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ(RAM)์—๋Š” ์ง„์งœ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์ด๋ฅผ memtable์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ๋ ˆ๋“œ๋ธ”๋ž™ ํŠธ๋ฆฌ, skiplist ๋“ฑ์œผ๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค.
    (level 0)
  2. ๋А๋ฆฌ๊ณ  ํฐ ๋””์Šคํฌ์—๋Š” ์ •๋ ฌ๋œ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์ด๋ฅผ Sorted String Table(SST)์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
    (level 1, 2)

์“ฐ๊ธฐ ๋™์ž‘ ์›๋ฆฌ๋Š” ์ด๋ ‡๋‹ค.

  1. ์ฒ˜์Œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…/์ˆ˜์ •ํ•  ๋•Œ๋Š” ์ž‘๊ณ  ๋น ๋ฅธ memtable์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  2. ๋งŒ์•ฝ memtable์˜ ํฌ๊ธฐ๊ฐ€ ์ผ์ •์น˜(๋ช‡ MB)๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๊ทธ๊ฑธ ํŒŒ์ผ๋กœ ์ €์žฅํ•ด์„œ ๋””์Šคํฌ์— ๋ณด๊ด€ํ•œ๋‹ค.
  3. ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •์€ ํ•ญ์ƒ append only๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— seq I/O๋กœ ๋Œ์•„์„œ ๋งค์šฐ ๋น ๋ฅด๋‹ค.

์ฝ๊ธฐ ๋™์ž‘ ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค.

  1. ์ฝ๊ธฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด memtable์—์„œ ํ‚ค๋ฅผ ์ฐพ๋Š”๋‹ค.
  2. ํ‚ค๊ฐ€ memtable์— ์—†๋‹ค๋ฉด ๋””์Šคํฌ์˜ ์ตœ์‹  ์„ธ๊ทธ๋จผํŠธ๋ถ€ํ„ฐ SS Table์„ ๋’ค์ ธ์„œ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
  3. ์ด ์ฝ๊ธฐ ์„ฑ๋Šฅ์€ O(N)๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์ด ์ปค์ง์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ์‹ฌ๊ฐํ•˜๊ฒŒ ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.
  4. ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๋ณด์™„์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ณด์กฐ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•œ๋‹ค.



์ปดํŒฉ์…˜ (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