๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Ž/mongoDB

[mongoDB] WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„

by dar0m! 2022. 7. 15.
  • 1) ํ”Œ๋Ÿฌ๊ทธ์ธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„
    • ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ํŠน์„ฑ ๋น„๊ต
  • 2) ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ํ˜ผํ•ฉ ์‚ฌ์šฉ
  • 3) WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„
  • 4) WiredTiger ์Šคํ† ๋ฆฌ์ง€์˜ ์ €์žฅ ๋ฐฉ์‹
  • 5) ๋ฐ์ดํ„ฐ ํŒŒ์ผ ๊ตฌ์กฐ
  • 6) WiredTiger์˜ ๋‚ด๋ถ€ ์ž‘๋™ ๋ฐฉ์‹
    • ๊ณต์œ  ์บ์‹œ
    • ํ•˜์ž๋“œ ํฌ์ธํ„ฐ(Hazard Pointer)
    • ์Šคํ‚ต ๋ฆฌ์ŠคํŠธ(Skip-List)
    • ์บ์‹œ ์ด๋น…์…˜(Cache Eviction)
    • Checkpoint
    • MVCC
    • ๋ฐ์ดํ„ฐ ๋ธ”๋ก(ํŽ˜์ด์ง€)
    • ์šด์˜์ฒด์ œ ์บ์‹œ(ํŽ˜์ด์ง€ ์บ์‹œ)
    • ์••์ถ•
    • ์•”ํ˜ธํ™”
  • ์ฐธ๊ณ ์ž๋ฃŒ

 


 

1) ํ”Œ๋Ÿฌ๊ทธ์ธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„

ํด๋ผ์ด์–ธํŠธ ๋“œ๋ผ์ด๋ฒ„
(Java, Python, C/C++, Go, Spark, OGG ... )
โ†•
๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ
(Wire Protocol)
์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ๊ธฐ, ์ƒค๋“œ ๊ด€๋ฆฌ์ž, ๋ณด์•ˆ ๊ด€๋ฆฌ์ž, ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งค๋‹ˆ์ €
์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ API
(Storage Engine)
MMAPv1, WiredTiger(memory, encrypted๋กœ ์ด๋ค„์ง), RocksDB 

[MongoDB ์•„ํ‚คํ…์ฒ˜]

๊ฐ€์žฅ ํ•˜์œ„์— ์œ„์น˜ํ•œ MMAv1, WiredTiger ๋“ฑ์„ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋ผ๊ณ  ํ•œ๋‹ค. ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์˜๊ตฌ์ ์œผ๋กœ ๊ธฐ๋กํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ์ฝ์–ด์™€์„œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋ฉด MongoDB ์„œ๋ฒ„๋Š” ๊ทธ ์ฟผ๋ฆฌ๋ฅผ ๋ถ„์„ํ•ด์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ํšจ์œจ์ ์ธ์ง€ ํŒ๋‹จํ•œ๋‹ค. ์ด๋ฅผ ์˜ตํ‹ฐ๋งˆ์ด์ €๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.

์˜ตํ‹ฐ๋งˆ์ด์ €์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์—ญํ• ์€ ์ตœ์ ํ™”๋œ ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•˜๋ฉด ์‹ค์ œ ๊ทธ ์‹คํ–‰ ๊ณ„ํš์— ๋งž๊ฒŒ ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๊ณ  ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์˜ค๊ณ  ์–ด๋–ป๊ฒŒ ์ตœ์ ์œผ๋กœ ์ €์žฅํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋‹ค.

์ฆ‰, MongoDB ์„œ๋ฒ„๊ฐ€ ์‚ฌ๋žŒ์˜ ๋จธ๋ฆฌ ์—ญํ• ์„ ํ•œ๋‹ค๋ฉด, ๊ฐ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ์†๊ณผ ๋ฐœ์˜ ์—ญํ• ์„ ๋งก์€ ํ˜•ํƒœ๋‹ค.

MMAPv1 ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ MongoDB๊ฐ€ ์ฒ˜์Œ ์ถœ์‹œ๋์„ ๋–„๋ถ€ํ„ฐ ์‚ฌ์šฉ๋˜๋˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋ฉฐ, WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ MongoDB 3.0๋ถ€ํ„ฐ ๋„์ž…๋œ ์ƒˆ๋กœ์šด ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋‹ค. In-Memory ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๋ณ€ํ˜•์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ๋ณด๊ด€ํ•˜๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋‹ค. RocksDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ํŽ˜์ด์Šค๋ถ์—์„œ levelDB๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜์—ฌ ๊ฐœ์„ ํ•œ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋ฉฐ, TokuDB๋Š” Percona์—์„œ ๊ฐœ๋ฐœ ์ค‘์ธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋‹ค.

์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ํŠน์„ฑ ๋น„๊ต

๊ธฐ๋ŠฅMMAPv1WiredTigerRocksDBTokuDB
์ž ๊ธˆ ์ˆ˜์ค€(lock-level) ์ปฌ๋ ‰์…˜ ๋„ํ๋จผํŠธ ๋„ํ๋จผํŠธ ๋„ํ๋จผํŠธ
๋ฐ์ดํ„ฐ ๊ตฌ์กฐ B-Tree B-Tree LSM Fractal-Tree
๋นŒํŠธ์ธ ์บ์‹œ X (์šด์˜์ฒด์ œ ์บ์‹œ) O O O
์„ธ์ปจ๋“œ๋ฆฌ ์ธ๋ฑ์Šค O O O O
๋ฐ์ดํ„ฐ ์••์ถ• X O O O
์ธ๋ฑ์Šค ์••์ถ• X O O O
์•”ํ˜ธํ™” X O X X
In-Memory ์ง€์› X O X X
์ปฌ๋ ‰์…˜ ํŒŒํ‹ฐ์…˜ X X X O
  • MongoDB์™€ ๊ฐ™์ด ์ž๋™์œผ๋กœ ์ƒค๋”ฉ๋˜๊ณ  ๋ถ„์‚ฐ๋˜๋Š” DBMS์—์„œ ํŒŒํ‹ฐ์…˜ ๊ธฐ๋Šฅ์€ ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, MongoDB ์„œ๋ฒ„์—์„œ๋„ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ์„ ํŠน์ • ์˜์—ญ์œผ๋กœ ์ œํ•œํ•  ๋•Œ์—๋Š” ์—ฌ์ „ํžˆ ํŒŒํ‹ฐ์…˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค.
  • MMAPv1 ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋‚˜ WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์‚ฌ์šฉํ•  ๋•Œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹จ์œ„๋กœ ๋””์Šคํฌ์˜ ํŒŒํ‹ฐ์…˜์„ ๋‹ค๋ฅด๊ฒŒ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„์ง(MongoDB 3.4) ์—†๋‹ค. ๋””์Šคํฌ ํŒŒํ‹ฐ์…˜์„ ๋ถ„๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ปฌ๋ ‰์…˜์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ  ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ฆฌ๋ˆ…์Šค์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋กœ ์—ฐ๊ฒฐ์‹œํ‚ค๋ฉด ๋””์Šคํฌ์˜ ์—ฌ๋Ÿฌ ํŒŒํ‹ฐ์…˜์„ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2) ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ํ˜ผํ•ฉ ์‚ฌ์šฉ

ํ•˜๋‚˜์˜ MongoDB ์„œ๋ฒ„(์ธ์Šคํ„ด์Šค)์—์„œ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†๋‹ค. ํ•˜์ง€๋งŒ ์ธ์Šคํ„ด์Šค๋งŒ ๋‹ค๋ฅด๋ฉด ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ๋‹ค๋ฅธ ์ œ์•ฝ์€ ์—†๋‹ค.

  • ๋˜ํ•œ ํ•˜๋‚˜์˜ ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์—์„œ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ„๋Š” WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ณ , ์„ธ์ปจ๋“œ๋ฆฌ(ํ”„๋ผ์ด๋จธ๋ฆฌ ํŽ˜์ผ ์˜ค๋ฒ„์šฉ) ๋ฉค๋ฒ„์—์„œ๋Š” RocksDB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์˜ ๋ชจ๋“  ๋ฉค๋ฒ„๊ฐ€ ์…ง๋‹ค์šด๋˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์˜ ์ผ๋ถ€ ๋ฉค๋ฒ„๋Š” ๋””์Šคํฌ ๊ธฐ๋ฐ˜์˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์ ์šฉํ•˜๋Š” ๊ตฌ์„ฑ์ด ๋„์›€์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์ผ๋ถ€ ์ƒค๋“œ๋Š” RocksDB๋กœ ๊ตฌ์„ฑํ•˜๊ณ , ์ผ๋ถ€ ์ƒค๋“œ๋Š” WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฐ ์ƒค๋“œ๊ฐ€ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅด๊ฑฐ๋‚˜ ์šฉ๋„๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๊ฐ ์ƒค๋“œ๋ฅผ ๋‹ค๋ฅธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ๊ตฌ์„ฑํ•ด์„œ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ ํŠน์„ฑ์— ๋งž๊ฒŒ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

3) WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„

WiredTiger ๋Š” berkeley DB ๊ฐœ๋ฐœ์ž๋“ค์— ์˜ํ•ด์„œ ๊ฐœ๋ฐœ๋œ ์ž„๋ฒ ๋””๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์œผ๋กœ MongoDB์˜ ๋””ํดํŠธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ๋„์ž…๋๋‹ค. MMAPv1 ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ WiredTiger ๋ฅผ ์ธ์ˆ˜ํ•˜๊ณ  MongoDB ์„œ๋ฒ„์˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ๋‚ด์žฅํ•œ ๊ฒƒ์ด๋‹ค.

ํŠน์ง•

  • ๋‚ด๋ถ€์ ์ธ ์ž ๊ธˆ ๊ฒฝํ•ฉ ์ตœ์†Œํ™”(Lock-free Algorithm)๋ฅผ ์œ„ํ•ด์„œ "ํ•˜์ž๋“œ ํฌ์ธํ„ฐ(Hazard-Pointer)"๋‚˜ "์Šคํ‚ต ๋ฆฌ์ŠคํŠธ(Skip-List)" ์™€ ๊ฐ™์€ ๋งŽ์€ ์‹ ๊ธฐ์ˆ ์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‹ค.
  • ์ตœ์‹  RDBMS ์„œ๋ฒ„๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” MVCC(์ž ๊ธˆ ์—†๋Š” ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ)์™€
  • ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์••์ถ•
  • ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ

์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

MongoDB ์„œ๋ฒ„๋Š” WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ๋‚ด์žฅํ•จ์œผ๋กœ์จ ๋‹จ๋ฒˆ์— ์ƒ์šฉ RDBMS ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋“ค์„ ๋ชจ๋‘ ์ง€์›ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

4) WiredTiger ์Šคํ† ๋ฆฌ์ง€์˜ ์ €์žฅ ๋ฐฉ์‹

3๊ฐ€์ง€ ํƒ€์ž…์˜ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  1. ๋ ˆ์ฝ”๋“œ(row, record) ์Šคํ† ์–ด
    1. ์ผ๋ฐ˜์ ์ธ RDBMS ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ €์žฅ ๋ฐฉ์‹
    2. ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๊ฐ™์ด ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
    3. ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ํŒจํ„ด์— ์ ์ ˆํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ
    4. ๊ธฐ๋ณธ์ ์œผ๋กœ B-TREE ์•Œ๊ณ ๋ฆฌ์ฆ˜
  2. ์ปฌ๋Ÿผ ์Šคํ† ์–ด
    1. ๋Œ€์šฉ๋Ÿ‰์˜ ๋ถ„์„(OLAP์ด๋‚˜ Data WareHouse) ์šฉ๋„๋กœ ์‚ฌ์šฉ๋จ
    2. ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ์™€ ์ƒ๊ด€์—†์ด ๊ฐ ์ปฌ๋Ÿผ ๋‹จ์œ„ ๋˜๋Š” ์ปฌ๋Ÿผ์˜ ๊ทธ๋ฃน ๋‹จ์œ„(์ปฌ๋Ÿผ ํŒจ๋ฐ€๋ฆฌ ๋˜๋Š” ์ปฌ๋Ÿผ ๊ทธ๋ฃน)๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๊ด€๋ฆฌ
    3. ํŠน์ • ์ปฌ๋Ÿผ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง
    4. ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋“ค์ด๋Š” ์†๋„๋„ ๋งค์šฐ ๋นจ๋ผ์„œ ๋Œ€์šฉ๋Ÿ‰ ๋ถ„์„์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์ด๋‹ค.
  3. LSM(Log Structured Merge Tree) ์Šคํ† ์–ด
    1. HBase ๋‚˜ ์นด์‚ฐ๋“œ๋ผ์™€ ๊ฐ™์€ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ €์žฅ ๋ฐฉ์‹
    2. ์ฝ๊ธฐ ๋ณด๋‹ค๋Š” ์“ฐ๊ธฐ ๋Šฅ๋ ฅ์— ์ง‘์ค‘ํ•œ ์ €์žฅ ๋ฐฉ์‹
    3. ๋‚ด๋ถ€์ ์œผ๋กœ B-Tree ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์ˆœ์ฐจ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
    4. ์ˆœ์ฐจ ํŒŒ์ผ๋“ค์ด ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ 1๊ฐœ ์ด์ƒ์ด ๊ด€๋ฆฌ๋˜๋Š” ๋ฐฉ์‹
    5. ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ ๊ฐ€๋Šฅํ•œ ํฌ๊ธฐ์˜ ์กฐ๊ฐ(Memtable)์œผ๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ„์† ์ €์žฅ๋˜๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ ๊ฐ€๋Šฅํ•œ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด์„œ๋ฉด ์ด๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•œ๋‹ค.
    6. ๋””์Šคํฌ๋กœ ๊ฐ“ ์ €์žฅ๋œ ํŒŒ์ผ์€ Level-0. level-0์ด ๋งŽ์•„์ง€๋ฉด ๋ชจ์•„์„œ level-1 ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์กฐ๊ฐ์„ ๋งŒ๋“ ๋‹ค.
    7. ์ด๋ ‡๊ฒŒ ๋กœ๊ทธ์ฒ˜๋Ÿผ ๊ณ„์†ํ•ด์„œ ๊ธฐ๋ก๋˜๋Š” ํŒŒ์ผ๋“ค์„ ๋ณ‘ํ•ฉํ•˜์—ฌ level-n๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ ๊ณ„์† ์„ฑ์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์ด๋ฅผ ๋กœ๊ทธ ๊ธฐ๋ฐ˜์˜ ๋ณ‘ํ•ฉํŠธ๋ฆฌ(LogStructured Merge Tree)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    8. ์ผ๋ฐ˜์ ์œผ๋กœ LSM-Tree์—์„œ๋Š” ๋ ˆ๋ฒจ์ด ๋‚ฎ์„ ์ˆ˜๋ก ์ตœ์‹  ๋ฐ์ดํ„ฐ, ๋ ˆ๋ฒจ์ด ๋†’์„์ˆ˜๋ก ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ์ด๋‹ค.
    9. ๊ทธ๋Ÿฐ๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ตœ์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ๋ฒจ์ด ๋‚ฎ์€ ์ตœ๊ทผ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ํฌ๊ธฐ๋„ ์ž‘๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋ฉฐ, ๋ ˆ๋ฒจ์ด ๋†’์€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ผ์ˆ˜๋ก ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋˜๋ฏ€๋กœ ์ž˜ ์ฐธ์กฐ๋˜์ง€ ์•Š์•„์„œ ๋””์Šคํฌ์—๋งŒ ์ƒ์ฃผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค.
    10. LSM-Tree ๋Š” ์กฐ๊ฐ ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง„๋‹ค. ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ๋ธ”๋ก(ํŽ˜์ด์ง€) ๋‹จ์œ„๋กœ ํ‚ค๋ฅผ ์ƒ˜ํ”Œ๋งํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉ.

 

LSM-Tree๊ฐ€ ๋„์ž…๋œ ์ด์œ 

์„œ๋น„์Šค์˜ํŒจํ„ด์ด ๋ณ€๊ฒฝ๋˜๋ฉด์„œ ๋Œ€์šฉ๋Ÿ‰์˜ INSERT๋ฅผ ๋ฌธ์ œ์—†์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ด์กŒ๋‹ค.

๊ธฐ์กด ๋ฐ์ดํ„ฐ ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ๊ฑฐ์˜ ๋™์ผํ•œ ์ˆ˜์ค€์˜ INSERT ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•จ.

B-Tree๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋  ๋•Œ๋งˆ๋‹ค B-Tree๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๋น„์šฉ์ด ํ•„์š”ํ•˜๊ณ , ๊ฐˆ ์ˆ˜๋ก ํŠธ๋ฆฌ๊ฐ€ ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์— INSERT ์„ฑ๋Šฅ์ด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ ํฌ๋ฉด ํด ์ˆ˜๋ก ์ €์žฅ ๋น„์šฉ์ด ๋” ์ปค์ง€๊ฒŒ ๋˜๋Š” ๊ตฌ์กฐ๋‹ค. ํ•˜์ง€๋งŒ LSM-Tree๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ปค์ง€๋ฉด ์ด ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋””์Šคํฌ๋กœ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋งค์šฐ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ. N๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์ด ๊ฐ๊ฐ์˜ ํŒŒ์ผ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด N๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•ด์•ผ๋งŒ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, B-Tree ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ํ•˜๋‚˜์ด๋ฉฐ, ์ด ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ๋งŒ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋˜๋Š”๋ฐ, LSM-Tree ์—์„œ๋Š” N๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๋” ๋Š๋ฆฐ ์†๋„๋กœ ๊ฒ€์ƒ‰ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ LSM-Tree์—์„œ๋Š” ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ณ„์†ํ•ด์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์กฐ๊ฐํ™”๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋“ค์„ ๋ณ‘ํ•ฉํ•˜๋Š” ์ž‘์—…(์ปดํŒฉ์…˜)์„ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ์ œ๋Š” ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ณ‘ํ•ฉ ์ž‘์—…์€ ํ•œ ๋ฒˆ์— ๋งค์šฐ ๋งŽ์€ ๋””์Šคํฌ์™€ CPU ์ž์›์„ ํ•„์š”๋กœ ํ•˜๋Š”๋ฐ, ์ด ์ž‘์—…์œผ๋กœ ์ธํ•ด์„œ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์ด๋‚˜ ์ฝ๊ธฐ ์†๋„๋Š” ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค.

 

LSM-Tree๋Š” ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ํฌ๊ธฐํ•˜๊ณ  ๊ทธ๋งŒํผ์˜ ์ €์žฅ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ ์†”๋ฃจ์…˜์ธ ๊ฒƒ์ด๋‹ค. ์ฟผ๋ฆฌ ์„ฑ๋Šฅ๋„ B-Tree๋ณด๋‹ค ์•„์ฃผ ๋Š๋ฆฐ ํŽธ์ด๋ผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ "๋ธ”๋ฃธ ํ•„ํ„ฐ(Bloom Filter)"์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€์˜ ์ €์žฅ ๋ฐฉ์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ์•„์ง MongoDB์— ๋‚ด์žฅ๋œ WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ๋Š” ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ์ €์žฅ์†Œ๋งŒ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

 

5) ๋ฐ์ดํ„ฐ ํŒŒ์ผ ๊ตฌ์กฐ

WiredTigerLAS.wt

  • WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ์บ์‹œ์—์„œ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ์ด๋น…์…˜ ์„œ๋ฒ„(Eviction server thread)๋Š” ํ•„์š”ํ•œ ๋งŒํผ์˜ ์—ฌ์œ  ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด์•ผ ์‚ฌ์šฉ์ž ์š”์ฒญ ์ฟผ๋ฆฌ๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ์บ์‹œ์—์„œ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋“ค์ด ๋”ํ‹ฐ ํŽ˜์ด์ง€ ์ƒํƒœ(Dirty page)์—ฌ์„œ ๋””์Šคํฌ์— ๊ธฐ๋กํ•ด์•ผ ํ•  ๋•Œ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ž„์‹œ๋กœ WiredTigerLAS.wt ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ์ž„์‹œ๋กœ ๊ธฐ๋ก๋œ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋Š” ๋‚˜์ค‘์— ๋‹ค์‹œ ์›๋ž˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ ๊ธฐ๋ก๋˜๊ฑฐ๋‚˜ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋–„ ๋‹ค์‹œ ์บ์‹œ๋กœ ์ฝ์–ด์™€์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ํŠน์„ฑ ๋•Œ๋ฌธ์— ์ด ์ปฌ๋ ‰์…˜ ์ด๋ฆ„์ด Look Aside Table(LAS Table)์ด๋ผ๊ณ  ๋ถ™์—ฌ์ง„ ๊ฒƒ์ด๋‹ค.

...

6) WiredTiger์˜ ๋‚ด๋ถ€ ์ž‘๋™ ๋ฐฉ์‹

ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ RDBMS์™€ ๊ฑฐ์˜ ํก์‚ฌํ•œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค. MongoDB ์„œ๋ฒ„๊ฐ€ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„๋„ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋‹จ์ˆœํ•œ ์ €์žฅ์†Œ ๊ฐœ๋…์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, MongoDB ์— ์ธ์ˆ˜๋˜๊ธฐ ์ด์ „๋ถ€ํ„ฐ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” ์ž„๋ฒ ๋””๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์—ˆ์œผ๋ฉฐ MySQL ์„œ๋ฒ„์˜ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„๊ณผ ๊ฐ™์ด RDBMS ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์šฉ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค. p.67

  • B-Tree ๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ
  • ์„œ๋ฒ„ ํฌ๋ž˜์‹œ(๋น„์ •์ƒ ์ข…๋ฃŒ)๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์ €๋„ ๋กœ๊ทธ(WAL, Write Ahead Log)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ํ•˜์œ„์— ์žˆ๋Š” journal ์ด๋ผ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ €์žฅ๋˜๋ฉฐ, ๋‹ค๋ฅธ RDBMS์˜ redo ๋กœ๊ทธ(WAL)์ฒ˜๋Ÿผ ๋กœํ…Œ์ด์…˜๋˜๋ฉด์„œ ๋กœ๊ทธ ํŒŒ์ผ์˜ ๋กœ๊ทธ ์Šฌ๋กฏ์ด ์žฌํ™œ์šฉ๋˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ๋กœ๊ทธ ํŒŒ์ผ์ด ๊ณ„์† ์ƒ์„ฑ๋œ๋‹ค.
    • ์ฒดํฌํฌ์ธํŠธ ์‹œ์  ์ด์ „์˜ ์ €๋„ ๋กœ๊ทธ๋Š” ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฒดํฌํฌ์ธํŠธ ์ดํ›„ ์‹œ์ ์˜ ์ €๋„ ๋กœ๊ทธ๋งŒ ๋‚จ๊ธฐ๊ณ  ์ด์ „ ์ €๋„ ๋กœ๊ทธ๋Š” ์ž๋™์œผ๋กœ ์‚ญ์ œํ•œ๋‹ค.
  • ๋‚ด์žฅ๋œ ๊ณต์œ  ์บ์‹œ(๋ฒ„ํผ ํ’€)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋””์Šคํฌ์˜ ์ธ๋ฑ์Šค๋‚˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌ & ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์„ ๋ชจ์•„์„œ ํ•œ๋ฒˆ์— ๋””์Šคํฌ๋กœ ๊ธฐ๋กํ•˜๋Š” ์“ฐ๊ธฐ ๋ฐฐ์น˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง.
  • ๋ธ”๋ก ๋งค๋‹ˆ์ €(Block Manager)๋ฅผ ํ†ตํ•ด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ๋””์Šคํฌ์—์„œ ์ฝ์–ด์„œ ๊ณต์œ  ์บ์‹œ์— ์ ์žฌํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ๋„ํ๋จผํŠธ ๋ณ€๊ฒฝ ๋‚ด์šฉ์€ ๋จผ์ € ๊ณต์œ  ์บ์‹œ์— ์ ์šฉ๋˜๋Š”๋ฐ, ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜๋Š” ๊ณผ์ •์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ €๋„ ๋กœ๊ทธ์— ๊ธฐ๋กํ•œ ๋‹ค์Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹œ์ ์€ ์ €๋„ ๋กœ๊ทธ์˜ ๊ธฐ๋ก์ด ์™„๋ฃŒ๋˜๋Š” ์‹œ์ ์ด๋‹ค.
    • ๋ณ€๊ฒฝ๋˜๋‹ˆ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ๊ธฐ๋กํ•  ๋•Œ, ํ”„๋ ˆ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ๊ธฐ๋ก๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ํฌ๊ธฐ์— ์ตœ์ ์ธ ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค. && ๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ์••์ถ•๊ณผ ์•”ํ˜ธํ™” ๋“ฑ๊ณผ ๊ฐ™์ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ํˆฌ๋ช…ํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์˜ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋Š” ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ธฐ ์ „์— ๊ฐ€๊ณต ์ž‘์—…์„ ๊ฑฐ์น˜๋Š”๋ฐ ์ด๋ฅผ ๋ฆฌ์ปจ์‹ค๋ฆฌ์—์ด์…˜(Reconciliation) ๋ชจ๋“ˆ์ด ๋‹ด๋‹นํ•œ๋‹ค.
    • ๊ณต์œ  ์บ์‹œ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋งŒ์•ฝ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋ผ๋ฉด ๋ฆฌ์ปจ์‹ค๋ฆฌ์—์ด์…˜ ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๊ณ , ๊ณต์œ  ์บ์‹œ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค. ์ด๋Ÿฐ ๊ณผ์ • ์ค‘์—์„œ ์–ด๋Š ํ•œ ๊ณณ์ด๋ผ๋„ ์ฒ˜๋ฆฌ๊ฐ€ ๋Š๋ ค์ง€๊ฑฐ๋‚˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ฟผ๋ฆฌ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋Š๋ ค์ง€๊ฒŒ ๋œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ธ”๋ก์€ ๋ชจ๋‘ ๊ฐ€๋ณ€ ์‚ฌ์ด์ฆˆ๋‹ค. ์••์ถ• ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.

 

๊ณต์œ  ์บ์‹œ

WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ ์‚ฌ์šฉ์ž์˜ ์ฟผ๋ฆฌ๋Š” ๊ณต์œ  ์บ์‹œ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋•Œ๋กœ๋Š” ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜์ฒœ์—์„œ ์ˆ˜๋งŒ ๋ฒˆ ๊ณต์œ  ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณต์œ  ์บ์‹œ์˜ ์ตœ์ ์™€๋Š” MongoDB์˜ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์— ์žˆ์–ด์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

 

ํ•˜์ž๋“œ ํฌ์ธํ„ฐ(Hazard Pointer)

"์‚ฌ์šฉ์ž ์“ฐ๋ ˆ๋“œ"๋Š” ์‚ฌ์šฉ์ž์˜ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ WiredTiger ์บ์‹œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์“ฐ๋ ˆ๋“œ์ด๋ฉฐ, "์ด๋น…์…˜ ์“ฐ๋ ˆ๋“œ(Eviction Thread)"๋Š” ์บ์‹œ๊ฐ€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ์ฝ์–ด ๋“ค์ผ ์ˆ˜ ์žˆ๋„๋ก ๋นˆ ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋‹ค.

WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๋ชจ๋“  "์‚ฌ์šฉ์ž ์“ฐ๋ ˆ๋“œ"๋Š” WiredTiger ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•  ๋•Œ, ๋จผ์ € ํ•˜์ž๋“œ ํฌ์ธํ„ฐ์— ์ž์‹ ์ด ์ฐธ์กฐํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋“ฑ๋กํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  '์‚ฌ์šฉ์ž ์“ฐ๋ ˆ๋“œ'๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ '์ด๋น…์…˜ ์“ฐ๋ ˆ๋“œ'๋Š” ๋™์‹œ์— ์บ์‹œ์—์„œ ์ œ๊ฑฐํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ๊ณจ๋ผ์„œ ์บ์‹œ์—์„œ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ '์ด๋น…์…˜ ์“ฐ๋ ˆ๋“œ'๋Š” ์ ์ ˆํžˆ ์ œ๊ฑฐํ•ด๋„ ๋  ๋งŒํ•œ ํŽ˜์ด์ง€(์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํŽ˜์ด์ง€)๋ฅผ ๊ณจ๋ผ์„œ ๋จผ์ € ํ•˜์ž๋“œ ํฌ์ธํ„ฐ์— ๋“ฑ๋ก๋ผ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ํ•˜์ž๋“œ ํฌ์ธํ„ฐ์— ๋“ฑ๋ก๋ผ ์žˆ์œผ๋ฉด ๊ทธ ํŽ˜์ด์ง€๋Š” ๋ฌด์‹œํ•˜๊ณ  ํ•˜์ž๋“œ ํฌ์ธํ„ฐ์— ๋“ฑ๋ก๋˜์ง€ ์•Š๋Š” ํŽ˜์ด์ง€๋งŒ ์บ์‹œ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

์ด๋Ÿฐ ๊ธฐ์ˆ  ๋•๋ถ„์— WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๋‹ค์–‘ํ•œ ์“ฐ๋ ˆ๋“œ๋“ค์ด ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋“ค์— ๋Œ€ํ•ด์„œ ์ž ๊ธˆ ๋Œ€๊ธฐ ์—†์ด ๊ฐ์ž์˜ ์ž„๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์Šคํ‚ต ๋ฆฌ์ŠคํŠธ(Skip-List)

Lock-Free ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ๊ธฐ์ˆ ์ด ์Šคํ‚ต ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค.

  • ํ‰๊ท  ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ B-Tree ์™€ ๊ฐ™์€ log(n)
  • ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๋„ ๋งŽ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ์ž ๊ธˆ์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ฒ€์ƒ‰ ๋˜ํ•œ ๋ณ„๋„์˜ ์ž ๊ธˆ์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋…ธ๋“œ ์‚ญ์ œ๋Š” ์ž ๊ธˆ์„ ํ•„์š”๋กœ ํ•˜์ง€๋งŒ, B-Tree ์ž๋ฃŒ ๊ตฌ์กฐ ๋ณด๋‹ค๋Š” ์ž ๊ธˆ์„ ๋œ ํ•„์š”๋กœ ํ•˜๋ฏ€๋กœ ํฐ ์„ฑ๋Šฅ ์ €ํ•˜ ์ด์Šˆ๋Š” ์•„๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ํ•˜๋‚˜์˜ ์Šคํ‚ต ๋ฆฌ์ŠคํŠธ์— ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ์„œ๋กœ ์ „ํ˜€ ์ž ๊ธˆ ๊ฒฝํ•ฉ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์–ธ๋‘ ๋กœ๊ทธ๋ฅผ ์Šคํ‚ต ๋ฆฌ์ŠคํŠธ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
    • ์–ธ๋‘ ๋กœ๊ทธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ด์œ ๋Š” ๋กค๋ฐฑ๋  ๋•Œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•จ์ž„. RDBMS ์—์„œ๋Š” ์–ธ๋‘ ๋กœ๊ทธ๋ฅผ ์ž ๊ธˆ ์—†๋Š” ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ(MVCC) ์šฉ๋„๋กœ๋„ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.
    • ๊ณต์œ  ์บ์‹œ์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ(์–ธ๋‘ ๋กœ๊ทธ)๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ์‚ดํŽด๋ณด์ž.
    • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์Šคํ‚ต ๋ฆฌ์ŠคํŠธ์— ์ฐจ๊ณก์ฐจ๊ณก ๊ธฐ๋กํ•ด๋‘”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ์—๋Š” ๋ณ€๊ฒฝ ์ด๋ ฅ์ด ์ €์žฅ๋œ ์Šคํ‚ต ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์›ํ•˜๋Š” ์‹œ์ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ„๋‹ค. ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์ง์ ‘ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€์— ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ ๋ฆฌ์ŠคํŠธ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ์ด์œ ๋Š” ์“ฐ๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
    • ๋ณ€๊ฒฝ๋˜๋Š” ๋‚ด์šฉ์„ ์Šคํ‚ต ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.
    • ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋ฅผ ๋™์‹œ์— ์ฝ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์žˆ์–ด์„œ ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋งค์šฐ ํ–ฅ์ƒ๋œ๋‹ค.

 

์บ์‹œ ์ด๋น…์…˜(Cache Eviction)

WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๊ณต์œ  ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์žˆ์–ด, ์ƒˆ๋กœ์šด ๋””์Šคํฌ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ์ฝ์–ด์„œ ๊ณต์œ  ์บ์‹œ์— ์ ์žฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋นˆ ๊ณต๊ฐ„์„ ํ•ญ์ƒ ์ ์ ˆํžˆ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋นˆ ๊ณต๊ฐ„์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ์ด๋น…์…˜ ๋ชจ๋“ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ “์ด๋น…์…˜ ์„œ๋ฒ„(Eviction Server)”๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

์ด๋น…์…˜ ์„œ๋ฒ„๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์“ฐ๋ ˆ๋“œ๋กœ ์‹คํ–‰๋˜๋Š”๋ฐ ๊ณต์œ  ์บ์‹œ์— ์ ์žฌ๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€ ์ค‘์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€ ์œ„์ฃผ๋กœ ๊ณต์œ  ์บ์‹œ์—์„œ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์„ ํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๊ณต์œ  ์บ์‹œ ์Šค์บ”์ด ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•˜๋ฉฐ B-Tree์˜ ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๋Š” ์ž์ฃผ ์ ‘๊ทผ๋˜๋Š” ๋น„์œจ์— ๊ด€๊ณ„์—†์ด ๊ณต์œ  ์บ์‹œ์— ์œ ์ง€ํ•˜๋ ค๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. ์ด์ „์—๋Š” SSD๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ด๋น…์…˜์ด ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€์˜ ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ๋”ฐ๋ผ๊ฐ€์ง€ ๋ชปํ•ด์„œ ์บ์‹œ๊ฐ€ ๊ฐ€๋“์ฐจ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ํ˜„์ƒ์€ ๋ฒ„์ „์—…์ด ๋˜๋ฉด์„œ ์ ์ฐจ ๋‚˜์•„์กŒ๊ณ  ํ˜„์žฌ๋Š” MongoDB์—์„œ SSD๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ตœ์ ์˜ ์ €์žฅ๋งค์ฒด๋กœ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค.

 

Checkpoint

์ฒดํฌํฌ์ธํŠธ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๊ณผ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ๊ฐ€ ๋™๊ธฐํ™” ๋˜๋Š” ์‹œ์ ์„ ์˜๋ฏธํ•˜๋ฉฐ, WiredTiger ์—”์ง„์€ ๋ฒ„์ „ 3.6๋ถ€ํ„ฐ MongoDB๋Š” 60์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ƒ์„ฑ(์Šค๋ƒ…์ƒท ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋ก)ํ•œ๋‹ค. ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด 60์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ๋˜๋Š” 2GB์˜ ์ €๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋œ ๊ฒฝ์šฐ ์ค‘ ๋จผ์ € ๋ฐœ์ƒํ•˜๋Š” ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ์ปค๋ฐ‹๋œ ํŠธ๋žœ์žญ์…˜์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ(WAL, Write Ahead Log = ์ €๋„๋กœ๊ทธ)๋ฅผ ๋จผ์ € ๊ธฐ๋กํ•˜๊ณ , ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์€ ํŠธ๋žœ์žญ์…˜์— ์ƒ๊ด€์—†์ด ๋’ค๋กœ ๋ฏธ๋ค„ ์ž‘์—… ํ•œ๋‹ค.

์ฒดํฌํฌ์ธํŠธ๋Š” DBMS๊ฐ€ ์„œ๋ฒ„๊ฐ€ ํฌ๋ž˜์‹œ๋˜๊ฑฐ๋‚˜ ์žฌ๊ตฌ๋™ ๋˜์—ˆ์„๋•Œ, ๋ณต๊ตฌ๋ฅผ ์‹œ์ž‘ํ•  ์‹œ์ ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€์ด ๋œ๋‹ค. ์ฒดํฌํฌ์ธํŠธ์˜ ๊ฐ„๊ฒฉ์ด ๊ธธ๋ฉด ๋ณต๊ตฌ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ฒŒ ๋˜๊ณ , ๋˜ ๋ฐ˜๋Œ€๋กœ ๋„ˆ๋ฌด ์งง์œผ๋ฉด ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. Oracle์ด๋‚˜ MySQL์˜ INNODB๊ฐ€ Fuzzy ๋ฐฉ์‹์˜ ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ MongoDB์˜ WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ Sharp ์ฒดํฌํฌ์ธํŠธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ‰์ƒ์‹œ์—๋Š” ๋””์Šคํฌ ์“ฐ๊ธฐ๊ฐ€ ์—†์ง€๋งŒ, ์ฒดํฌํฌ์ธํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์— ํ•œ ๋ฒˆ์— ๋ชจ์•„์„œ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

WiredTiger์˜ ์ฒดํฌํฌ์ธํŠธ๋Š” ์ ˆ๋Œ€ ๊ธฐ์กด์˜ B-Tree ๊ตฌ์กฐ๋ฅผ ๋ฎ์–ด ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ์ƒˆ๋กœ์šด leaf ํŽ˜์ด์ง€๊ฐ€ ์ถ”๊ฐ€๋ ๋•Œ ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์„ ํ• ๋‹น ๋ฐ›๊ณ , ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๊ฐ€ ๊ตฌ์„ฑ๋˜๋ฉด root ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๊ฐ€ ๊ธฐ์กด leaf๋ถ€ํ„ฐ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ leaf๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” B-Tree ๊ตฌ์กฐ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ๋งŒ์•ฝ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” leaf๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ถ€๋ถ„์€ ์ณ๋‚ด๊ณ  ์ „์ฒด์ ์œผ๋กœ ๋‹ค์‹œ B-Tree ๊ตฌ์กฐ๋ฅผ ์™„์„ฑํ•œ๋‹ค. ์ƒˆ๋กœ์šด B-Tree๊ตฌ์กฐ๊ฐ€ ์™„์„ฑ๋˜๋ฉด ๊ธฐ์กด์˜ B-Tree๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋˜ ๊ณต๊ฐ„์„ ๋ฐ˜๋‚ฉํ•œ๋‹ค.

 

MVCC

WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ์„ธ๊ฐ€์ง€์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์ œ๊ณตํ•˜๋Š”๋ฐ,

  • REPEATABLE-READ
  • READ_COMMITTED
  • SNAPSHOT

SNAPSHOT ์ˆ˜์ค€์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ๊ธฐ๋ณธ์œผ๋กœ ์„ ํƒํ•˜๊ณ  ์žˆ๋‹ค.

WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ SNAPSHOT ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ REPEATABLE-READ์™€ ๋™์ผํ•œ ์ˆ˜์ค€์ด๋‹ค. ์˜ˆ์ „ 3.x ๋ฒ„์ „์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜์„ ์—„๊ฒฉํ•˜๊ฒŒ ์œ ์ง€ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, 4๋ฒ„์ „ ๋ถ€ํ„ฐ๋Š” RDBMS ์ˆ˜์ค€์˜ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ ๋ธ”๋ก(ํŽ˜์ด์ง€)

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

ํ•˜์ง€๋งŒ ์ปฌ๋ ‰์…˜ ๋ณ„๋กœ ๋ฏธ์„ธํ•˜๊ฒŒ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€์ด ์ƒ๊ธฐ๊ณ  ์šด์˜ ๋น„์šฉ์„ ๋†’์ด๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

๋ถ„์„์ด๋‚˜ ๋Œ€๋Ÿ‰์˜ Insert ์ž‘์—…์ด ๋งŽ๋‹ค๋ฉด ํŽ˜์ด์ง€๋ฅผ ํฌ๊ฒŒ, ์†Œ๊ทœ๋ชจ์˜ ๋ฐ์ดํ„ฐ์— Random access๊ฐ€ ์žฆ๊ณ  ๋นˆ๋ฒˆํ•˜๊ฒŒ Update๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง€ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์šด์˜์ฒด์ œ ์บ์‹œ(ํŽ˜์ด์ง€ ์บ์‹œ)

WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ Cached IO๋ฅผ ๊ธฐ๋ณธ ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด ์ฐธ์กฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋Š” ๋ฆฌ๋ˆ…์Šค ํŽ˜์ด์ง€ ์บ์‹œ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ž์‹ ์˜ ๊ณต์œ  ์บ์‹œ์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. OS์˜ ํŽ˜์ด์ง€ ์บ์‹œ์—๋„ ์žˆ๊ณ , WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—๋„ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์„ ๋”๋ธ” ๋ฒ„ํผ๋ง์ด๋ผ๊ณ  ํ•˜๋ฉฐ, RDBMS์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋”๋ธ” ๋ฒ„ํผ๋ง ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Direct IO ๋ฐฉ์‹์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. Cached IO๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„๊ฐ€ ๋””์Šคํฌ ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ๋ฅผ ์ „๋‹ดํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด๋•Œ ํŽ˜์ด์ง€ ์บ์‹œ ์ฒ˜๋ฆฌ์—์„œ ๊ฐ€๋”์‹ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์„ฑ๋Šฅ์ ์ธ ๋ถ€๋ถ„์—์„œ๋Š” Cached IO๊ฐ€ Direct IO๋ณด๋‹ค ๋น ๋ฅธ ์†๋„๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

 

์••์ถ•

WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ์••์ถ• ๊ธฐ๋Šฅ์ด๋‹ค. RDBMS์™€ ๋น„๊ต ํ–ˆ์„๋•Œ ํฌ๊ฒŒ 3๊ฐ€์ง€ ์žฅ์ ์ด ์žˆ๋‹ค.

  • ๊ฐ€๋ณ€ ์‚ฌ์ด์ฆˆ์˜ ํŽ˜์ด์ง€ ์‚ฌ์šฉ: ํŽ˜์ด์ง€๊ฐ€ ๊ฐ€๋ณ€ ์‚ฌ์ด์ฆˆ์ด๊ธฐ ๋•Œ๋ฌธ์— ์••์ถ• ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ธฐ๋•Œ๋ฌธ์— RDBMS๋“ค์ฒ˜๋Ÿผ ํŽ˜์ด์ง€๋ฅผ ์Šคํ”Œ๋ฆฟํ•˜์—ฌ ์—ฌ๋Ÿฌ๋ฒˆ ์••์ถ•ํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ ๋ ˆ์ด์–ด์—์„œ์˜ ์••์ถ•์ง€์›: WiredTiger์˜ ๋ธ”๋ก ๋งค๋‹ˆ์ €๊ฐ€ ๋””์Šคํฌ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ์ฝ์–ด์˜ค๋ฉด์„œ ๊ณต์œ  ์บ์‹œ์— ์ ์žฌํ•  ๋•Œ ์••์ถ•์„ ํ•ด์ง€ํ•œ ์ƒํƒœ์—์„œ ์ ์žฌํ•˜๊ณ , ๊ณต์œ  ์บ์‹œ์—์„œ ๋””์Šคํฌ๋กœ ๊ธฐ๋ก๋˜๋Š” ํŽ˜์ด์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ์••์ถ•์„ ์‹คํ–‰ํ•ด์„œ ์ €์žฅํ•œ๋‹ค.
  • ๋‹ค์–‘ํ•œ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ง€์›: 4.2๋ฒ„์ „๋ถ€ํ„ฐ Zstd๋ฅผ ์ง€์›ํ•˜์ง€ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ, zlib๊ณผ Snappy๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ์••์ถ•๋ฅ ์ด ๋†’์„์ˆ˜๋ก ๊ณต๊ฐ„ ์ ˆ์•ฝ์ด ๋˜์ง€๋งŒ ์••์ถ•ํ•˜๊ณ  ํ•ด์ œํ•  ๋•Œ ์†๋„๋Š” ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.
  ์••์ถ•๋ฅ  ์••์ถ•์†๋„ (MB/sec) ์••์ถ•ํ•ด์ œ ์†๋„ (MB/sec)
zstd 2.9 330 940
zlib 2.7 95 360
Snappy 2.1 480 1600

WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ๋Š” ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ปฌ๋ ‰์…˜๊ณผ ์ธ๋ฑ์Šค ๊ทธ๋ฆฌ๊ณ  ์ €๋„๋กœ๊ทธ์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ ์••์ถ•์„ ์ ์šฉํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ €๋„ ๋กœ๊ทธ์™€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ Snappy๋กœ, ์ธ๋ฑ์Šค๋Š” Prefix ์••์ถ•์„ ์ ์šฉํ•ด์„œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. Prefix ์••์ถ•์ด๋ž€ ์ธ๋ฑ์Šค ํ‚ค์—์„œ ์™ผ์ชฝ ๋ถ€๋ถ„์˜ ์ค‘๋ณต ์˜์—ญ์„ ์ƒ๋žตํ•˜๋Š” ์••์ถ• ๋ฐฉ์‹์ด๋‹ค. ํ”„๋ฆฌํ”ฝ์Šค ์••์ถ•์€ ๋ธ”๋ก ์••์ถ•๊ณผ ๋‹ค๋ฅด๊ฒŒ ๊ณต์œ  ์บ์‹œ์— ์ ์žฌ๋œ ์ƒํƒœ์—์„œ๋„ ์••์ถ•์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ํ”„๋ฆฌํ”ฝ์Šค ์••์ถ•์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ, ํ•ญ์ƒ ์™„์ „ํ•œ ํ‚ค ๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•ด์„œ ์กฐ๋ฆฝ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š”๋ฐ, ํŽ˜์ด์ง€ ์ฒซ๋ฒˆ์งธ์— ์žˆ๋Š” ์ธ๋ฑ์Šค ํ‚ค๋ถ€ํ„ฐ ์žฌ์กฐ๋ฆฝ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋ฉด ํšจ์œจ์ด ๋–จ์–ด์ง€๊ธฐ๋„ ํ•œ๋‹ค. ์••์ถ•๋ฅ ์ด ์ข‹์œผ๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์ฝ๋Š” ์†๋„๊ฐ€ ๋–จ์–ด์งˆ์ˆ˜๋„ ์žˆ๊ณ , ์ธ๋ฑ์Šค๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ฝ์„๋•Œ๋Š” ๋” ์‹ฌํ•ด์ง„๋‹ค.

 

์•”ํ˜ธํ™”

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฒ„์ „์—์„œ๋งŒ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฒ„์ „์˜ ์†Œ์Šค ์ฝ”๋“œ์—๋„ ์•”ํ˜ธํ™” ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•œ๊ฒŒ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜•ํƒœ์˜ ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•œ๋‹ค๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฒ„์ „์—์„œ๋„ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 


์ฐธ๊ณ ์ž๋ฃŒ

rastalion.me

RealMongoDB

 
 
 

'๐Ÿ’Ž > mongoDB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[mongoDB] ์ธ๋ฑ์Šค(Index)  (0) 2022.07.18
[mongoDB] ์ƒค๋”ฉ(Sharding)  (0) 2022.07.18

๋Œ“๊ธ€