๋์๊ด libmdbx LMDB๋ ๊ณ ์ฑ๋ฅ์ ์ปดํฉํธํ ๋ด์ฅํ ํค-๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ LMDB์ ํ์์ผ๋ก ํฌ๊ฒ ์ฌ์ค๊ณ๋์์ต๋๋ค.
ํ์ฌ ๋ฒ์ v0.5๋ ๊ธฐ์ ๋ฆด๋ฆฌ์ค๋ก, ๋ชจ๋ ๊ฐ์ ์ด ์๋ฃ๋๊ณ ๊ณต๊ฐ ์ต์ข
ํ
์คํธ ๋ฐ ์์ ํ ๋จ๊ณ๋ก ์ ํ๋์์ผ๋ฉฐ ์ดํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฒซ ๋ฒ์งธ ์ ์ฒด ๋ฆด๋ฆฌ์ค๊ฐ ํ์ฑ๋์์ต๋๋ค.
LMDB ๊ฝค ์ ์๋ ค์ง ํธ๋์ญ์ ๋ด์ฅํ ํค-๊ฐ DBMS์ ๋๋ค. ํธ๋ฆฌB+ ะฑะตะท ์ฌ์ ์๋ฐฉ์ ๋ก๊น , ์ด๋ ๋ค์ค ์ค๋ ๋ ํ๋ก์ธ์ค ๋ผ๊ฐ ๋คํธ์ํฌ๊ฐ ์๋ ๋ก์ปฌ๋ก ๊ณต์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ์๋ ฅ ์๊ณ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ์๋ํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก MDBX๋ LMDB๋ณด๋ค ๋น ๋ฅด๊ณ ์์ ์ ์ด๋ฉฐ, libmdbx๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ์์ ๋ชจ๋ ์ฃผ์ ๊ธฐ๋ฅ์ ์ ์งํฉ๋๋ค. ACID CPU ์ฝ์ด ์ ๋ฐ์ ๊ฑธ์น ์ ํ ํ์ฅ์ ํตํ ๋น์ฐจ๋จ ์ฝ๊ธฐ ๋ฐ ๋ช ๊ฐ์ง ์๋ก์ด ํญ๋ชฉ๋ ์ถ๊ฐํฉ๋๋ค.
LMDB์ ๊ด๋ จ๋ libmdbx์ ์ฐจ์ด์ ๋ฐ ๊ฐ์ ์ฌํญ์ ๋ํ ์ค๋ช ์ ๋ณ๋์ ๊ธฐ์ฌ(Habrรฉ ๋ฐ Medium์ ๊ฒ์๋ ์์ )๊ฐ ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ๊ณ ๋์ ๋๋ ์ฌํญ์ ์ธ๊ธํ๋ ๊ฒ์ด ์ ์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๋ ํ์ง, ํ ์คํธ ๋ฐ ์๋ ๊ฒ์ฌ์ ๋ ๋ง์ ๊ด์ฌ์ ๊ธฐ์ธ์ ๋๋ค.
- ๋งค๊ฐ๋ณ์ ํ์ธ๋ถํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ ๋ด๋ถ ๊ฐ์ฌ์ ์ด๋ฅด๊ธฐ๊น์ง ์ด์ ์ค์ ํจ์ฌ ๋ ๋ง์ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ์๋ ์์ถ ๋ฐ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌ๊ธฐ ๊ด๋ฆฌ.
- 32๋นํธ ๋ฐ 64๋นํธ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ํ ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์์ ๋๋ค.
- ๋ฒ์๋ณ ํ๋ณธ ํฌ๊ธฐ ์ถ์ (๋ฒ์ ์ฟผ๋ฆฌ ์ถ์ )
- ํฌ์ผ์ดํฌ๋ณด๋ค ๋ ๋ฐฐ ํฐ ํค์ ์ฌ์ฉ์๊ฐ ์ ํํ ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ด์ง ํฌ๊ธฐ๋ฅผ ์ง์ํฉ๋๋ค.
libmdbx ๋ฆด๋ฆฌ์ค ํ๋ณด๋ 2019๋ 2์ MDBX์ MithrilDB ํ๋ก์ ํธ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ๋ก ํ ๊ฒฐ์ (์๋ ์ฐธ์กฐ)์ ๊ฒฐ๊ณผ์ ๋๋ค. ๋์์ libmdbx๋ (ํฉ๋ฆฌ์ ์ธ) ์ต๋ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ ๊ฑฐํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ค์ ๋ก ์ฒ์์ ์ถ์ ํ๊ณ ๊ณํํ๋ ๊ฒ๋ณด๋ค ์ง์ ๋ ๋ฐฉํฅ์ผ๋ก 3~XNUMX๋ฐฐ ๋ ๋ง์ ์์ ์ด ์ํ๋์์ต๋๋ค.
- Mac OS ๋ฐ XNUMX์ฐจ ๊ณ์ธต ํ๋ซํผ(FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD)์ ๋ํ ์ง์์ด ๊ตฌํ๋์์ต๋๋ค. ํ์์ ๋ฐ๋ผ AIX ๋ฐ HP-UX ์ง์์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ์ฝ๋๋ ์ ์๋์ง ์์ Behavior Sanitizer ๋ฐ Address Sanitizer๋ฅผ ์ฌ์ฉํ์ฌ ์ญ์ ๋์์ผ๋ฉฐ -Wpedantic์ ์ฌ์ฉํ์ฌ ๋น๋ํ ๋์ ๋ชจ๋ ๊ฒฝ๊ณ , ๋ชจ๋ Coverity Static Analyser ๊ฒฝ๊ณ ๋ฑ์ด ์ ๊ฑฐ๋์์ต๋๋ค.
- ์ ๋ฐ์ดํธ API ์ค๋ช .
- ์ฝ์ ํ๊ธฐ ์ฝ๋๋ก ์์ค ์ฝ๋๋ฅผ ํตํฉํฉ๋๋ค.
- CMake ์ง์.
- ์ค์ฒฉ ํธ๋์ญ์ ์ง์.
- bootid๋ฅผ ์ฌ์ฉํ์ฌ OS๊ฐ ์ฌ๋ถํ ๋์๋์ง ํ์ธํฉ๋๋ค(๋ํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ง).
- ์ ๋ฐ์ดํธ๋/์ค๋๋ ํ์ด์ง ๋ฐ ํ์ฅ๋ ๊ฑฐ๋ ์ ๋ณด๋ฅผ ์ข ํฉ์ ์ผ๋ก ๊ณ์ฐํฉ๋๋ค.
- ํธํ ๋ชจ๋์์ ์ด๋ฏธ ์ด๋ ค ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํ MDBX_ACCEDE ์ต์ ์ ๋๋ค.
- ์ฌ์ฉ OFD ์ฐจ๋จ ๊ฐ๋ฅํ ๋.
- ํ์ดํ์ ํซ ๋ฐฑ์ .
- ์ ๋ฌธ์ ์ผ๋ก ์ต์ ํ๋ ๋ด๋ถ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ(qsort()๋ณด๋ค ์ต๋ 2-3๋ฐฐ ๋น ๋ฅด๊ณ std::sort()๋ณด๋ค ์ต๋ 30% ๋น ๋ฆ ๋๋ค).
- ์ต๋ ํค ๊ธธ์ด๊ฐ ๋์ด๋ฌ์ต๋๋ค.
- ๋ฏธ๋ฆฌ ์ฝ๊ธฐ ์๋ ์ ์ด(๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ ์บ์ฑ ์ ๋ต)
- ๋์ฑ ๊ณต๊ฒฉ์ ์ด๊ณ ๋น ๋ฅธ ์๋ ์์ถ.
- B+ ํธ๋ฆฌ ํ์ด์ง๋ฅผ ๋ณํฉํ๊ธฐ ์ํ ๋ณด๋ค ์ต์ ์ ์ ๋ต์ ๋๋ค.
- ์๋ชป ์ฌ์ฉ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ก์ปฌ์ด ์๋ ํ์ผ ์์คํ (NFS, Samba ๋ฑ)์ ์ ์ดํฉ๋๋ค.
- ํ ์คํธ ์ธํธ๊ฐ ํ์ฅ๋์์ต๋๋ค.
libmdbx์ "๋ค์" ๋ฒ์ ๊ฐ๋ฐ์ ๋ณ๋์ ํ๋ก์ ํธ๋ก ๊ณ์๋ฉ๋๋ค. ๋ฏธ์ค๋ฆดDB, MDBX "ํ์ฌ" ๋ฒ์ ์ ๊ฐ๋ฐ ๋ฒกํฐ๋ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ๋๊ฒฐํ๊ณ ์์ ํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ด ๊ฒฐ์ ์ ๋ค์ ์ธ ๊ฐ์ง ์ด์ ๋ก ๋ด๋ ค์ก์ต๋๋ค.
- ์์ ํ ํธํ๋์ง ์์: MithrilDB๋ ๊ณํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ๋ค๋ฅธ(ํธํ๋์ง ์๋) ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ ํ์๊ณผ ๋ค๋ฅธ(ํธํ๋์ง ์๋) API๊ฐ ํ์ํฉ๋๋ค.
- ์๋ก์ด ์์ค ์ฝ๋: MithrilDB ์์ค ์ฝ๋๋ LMDB์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ผ์ด์ ์ค๊ฐ ๋ถ์ฌ๋์์ผ๋ฉฐ ํ๋ก์ ํธ ์์ฒด๋ ๋ค๋ฅธ ๋ผ์ด์ ์ค(์น์ธ)๋ก ๊ฒ์๋ ์์ ์ ๋๋ค. OSI ํนํ ์ํ์น 2.0์๋๋ผ OpenLDAP ์ฌ๋จ).
- ๋ถ๋ฆฌ๋ ์ ์ฌ์ ์ธ ํผ๋์ ๋ฐฉ์งํ๊ณ , ๋ ๋ง์ ํ์ค์ฑ์ ์ ๊ณตํ๋ฉฐ, ํ๋ก์ ํธ๊ฐ ๋ ๋ฆฝ์ ์ธ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋๋ก ๋ณด์ฅํฉ๋๋ค.
MDBX์ ๋ง์ฐฌ๊ฐ์ง๋ก MithrilDB๋ ๋ค์์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ํธ๋ฆฌ B+ ๋ํ MDBX ๋ฐ LMDB์ ์ฌ๋ฌ ๊ฐ์ง ๊ทผ๋ณธ์ ์ธ ๋จ์ ์ ์ ๊ฑฐํ๋ฉด์ ๋งค์ฐ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํนํ, ๊ธด ์ฝ๊ธฐ ํธ๋์ญ์ ์ผ๋ก ์ธํด ๊ฐ๋น์ง ์ฒ๋ฆฌ๊ฐ ์ฐจ๋จ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ "ํฝ์ฐฝ"์ผ๋ก ๋ํ๋๋ "๊ธด ์ฝ๊ธฐ" ๋ฌธ์ ๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค. ์๋ก์ด MithrilDB ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- HDD, SSD, ๋นํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ ๋ฑ ์ฌ๋ฌ ์ด๊ธฐ์ข ๋ฏธ๋์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฐ์น๋ฅผ ์ง์ํฉ๋๋ค.
- "๊ฐ์น ์๋" ๋ฐ์ดํฐ์ "๋ฎ์ ๊ฐ์น", "ํซ", "์" ๋ฐ "์ฝ๋" ๋ฐ์ดํฐ์ ๋ํ ์ต์ ์ ์ ๋ต์ ๋๋ค.
- Merkle ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌด๊ฒฐ์ฑ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
- WAL์ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ฐ๊ธฐ ์ง์ฝ์ ์ธ ์๋๋ฆฌ์ค์์ ํจ์ฌ ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ฉฐ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ๋์คํฌ์ ์๋ ๋ฐ์ดํฐ์ ๊ฒ์ผ๋ฅธ ์บ์น์ ๊ณ ์ ์ ๋๋ค.
์ถ์ฒ : linux.org.ru