- 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์์ ๊ฐ๋ฐ ์ค์ธ ์คํ ๋ฆฌ์ง ์์ง์ด๋ค.
์คํ ๋ฆฌ์ง ์์ง ํน์ฑ ๋น๊ต
์ ๊ธ ์์ค(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๊ฐ์ง ํ์ ์ ์ ์ฅ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ๋ ์ฝ๋(row, record) ์คํ ์ด
- ์ผ๋ฐ์ ์ธ RDBMS ๊ฐ ์ฌ์ฉํ๋ ์ ์ฅ ๋ฐฉ์
- ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ํ๊บผ๋ฒ์ ๊ฐ์ด ์ ์ฅํ๋ ๋ฐฉ์
- ๋ค์ํ ์๋น์ค ํจํด์ ์ ์ ํ๊ฒ ๋์ํ ์ ์๋ ๊ตฌ์กฐ
- ๊ธฐ๋ณธ์ ์ผ๋ก B-TREE ์๊ณ ๋ฆฌ์ฆ
- ์ปฌ๋ผ ์คํ ์ด
- ๋์ฉ๋์ ๋ถ์(OLAP์ด๋ Data WareHouse) ์ฉ๋๋ก ์ฌ์ฉ๋จ
- ํ ์ด๋ธ์ ๋ ์ฝ๋์ ์๊ด์์ด ๊ฐ ์ปฌ๋ผ ๋จ์ ๋๋ ์ปฌ๋ผ์ ๊ทธ๋ฃน ๋จ์(์ปฌ๋ผ ํจ๋ฐ๋ฆฌ ๋๋ ์ปฌ๋ผ ๊ทธ๋ฃน)๋ก ๋ฐ์ดํฐ ํ์ผ์ ๊ด๋ฆฌ
- ํน์ ์ปฌ๋ผ ๋จ์๋ก ๋ฐ์ดํฐ ํ์ผ์ ์์ฑํ๋ฏ๋ก ๋ฐ์ดํฐ ํ์ผ ํฌ๊ธฐ๊ฐ ์์์ง
- ํ ์ด๋ธ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ค์ด๋ ์๋๋ ๋งค์ฐ ๋นจ๋ผ์ ๋์ฉ๋ ๋ถ์์ ์ ํฉํ ๋ฐฉ์์ด๋ค.
- LSM(Log Structured Merge Tree) ์คํ ์ด
- HBase ๋ ์นด์ฐ๋๋ผ์ ๊ฐ์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์ฃผ ์ฌ์ฉํ๋ ์ ์ฅ ๋ฐฉ์
- ์ฝ๊ธฐ ๋ณด๋ค๋ ์ฐ๊ธฐ ๋ฅ๋ ฅ์ ์ง์คํ ์ ์ฅ ๋ฐฉ์
- ๋ด๋ถ์ ์ผ๋ก B-Tree ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ง ์๊ณ , ์์ฐจ ํ์ผ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ์์ฐจ ํ์ผ๋ค์ด ์๊ฐ ์์๋๋ก 1๊ฐ ์ด์์ด ๊ด๋ฆฌ๋๋ ๋ฐฉ์
- ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ ๊ฐ๋ฅํ ํฌ๊ธฐ์ ์กฐ๊ฐ(Memtable)์ผ๋ก ๋ฐ์ดํฐ ํ์ผ์ ๊ด๋ฆฌํ๋๋ฐ, ๋ฐ์ดํฐ๊ฐ ๊ณ์ ์ ์ฅ๋๋ฉด์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ ๊ฐ๋ฅํ ํ๊ณ๋ฅผ ๋์ด์๋ฉด ์ด๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋ค.
- ๋์คํฌ๋ก ๊ฐ ์ ์ฅ๋ ํ์ผ์ Level-0. level-0์ด ๋ง์์ง๋ฉด ๋ชจ์์ level-1 ๋ฐ์ดํฐ ํ์ผ ์กฐ๊ฐ์ ๋ง๋ ๋ค.
- ์ด๋ ๊ฒ ๋ก๊ทธ์ฒ๋ผ ๊ณ์ํด์ ๊ธฐ๋ก๋๋ ํ์ผ๋ค์ ๋ณํฉํ์ฌ level-n๊น์ง์ ๋ฐ์ดํฐ ํ์ผ๋ก ๊ณ์ ์ฑ์ฅํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ฏ๋ก ์ด๋ฅผ ๋ก๊ทธ ๊ธฐ๋ฐ์ ๋ณํฉํธ๋ฆฌ(LogStructured Merge Tree)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก LSM-Tree์์๋ ๋ ๋ฒจ์ด ๋ฎ์ ์๋ก ์ต์ ๋ฐ์ดํฐ, ๋ ๋ฒจ์ด ๋์์๋ก ์ค๋๋ ๋ฐ์ดํฐ์ด๋ค.
- ๊ทธ๋ฐ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ์ต์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๋ ๋ฒจ์ด ๋ฎ์ ์ต๊ทผ์ ๋ฐ์ดํฐ ํ์ผ์ด ํฌ๊ธฐ๋ ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ฉฐ, ๋ ๋ฒจ์ด ๋์ ๋ฐ์ดํฐ ํ์ผ์ผ์๋ก ๋ฐ์ดํฐ ํ์ผ์ ํฌ๊ธฐ๊ฐ ํฌ๊ณ ์ค๋๋ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋๋ฏ๋ก ์ ์ฐธ์กฐ๋์ง ์์์ ๋์คํฌ์๋ง ์์ฃผํ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
- 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 ์์ถ์ด๋ ์ธ๋ฑ์ค ํค์์ ์ผ์ชฝ ๋ถ๋ถ์ ์ค๋ณต ์์ญ์ ์๋ตํ๋ ์์ถ ๋ฐฉ์์ด๋ค. ํ๋ฆฌํฝ์ค ์์ถ์ ๋ธ๋ก ์์ถ๊ณผ ๋ค๋ฅด๊ฒ ๊ณต์ ์บ์์ ์ ์ฌ๋ ์ํ์์๋ ์์ถ์ํ๋ฅผ ์ ์งํ๋ค. ํ๋ฆฌํฝ์ค ์์ถ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋, ํญ์ ์์ ํ ํค ๊ฐ์ ์ป๊ธฐ ์ํด์ ์กฐ๋ฆฝ๊ณผ์ ์ ๊ฑฐ์น๋๋ฐ, ํ์ด์ง ์ฒซ๋ฒ์งธ์ ์๋ ์ธ๋ฑ์ค ํค๋ถํฐ ์ฌ์กฐ๋ฆฝ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ฉด ํจ์จ์ด ๋จ์ด์ง๊ธฐ๋ ํ๋ค. ์์ถ๋ฅ ์ด ์ข์ผ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฝ๋ ์๋๊ฐ ๋จ์ด์ง์๋ ์๊ณ , ์ธ๋ฑ์ค๋ฅผ ์ญ์์ผ๋ก ์ฝ์๋๋ ๋ ์ฌํด์ง๋ค.
์ํธํ
์ํฐํ๋ผ์ด์ฆ ๋ฒ์ ์์๋ง ์ํธํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ฐ, ์ปค๋ฎค๋ํฐ ๋ฒ์ ์ ์์ค ์ฝ๋์๋ ์ํธํ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ธํฐํ์ด์ค๊ฐ ๊ทธ๋๋ก ๋จ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ ํ๋ฌ๊ทธ์ธ ํํ์ ๋ชจ๋์ ๊ฐ๋ฐํ๋ค๋ฉด ์ปค๋ฎค๋ํฐ ๋ฒ์ ์์๋ ๋ฐ์ดํฐ ์ํธํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ ์๋ฃ
RealMongoDB
'๐ > mongoDB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[mongoDB] ์ธ๋ฑ์ค(Index) (0) | 2022.07.18 |
---|---|
[mongoDB] ์ค๋ฉ(Sharding) (0) | 2022.07.18 |
๋๊ธ