libmdbx 0.10.4(MDBX) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ณ ์ฑ๋ฅ ์ปดํฉํธ ์๋ฒ ๋๋ ํค-๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌํ๊ณผ ํจ๊ป ์ถ์๋์์ผ๋ฉฐ, ๋ณด์กฐ ๋ฐ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ํ ํ์ ํํ์ ๊ตฌํํ๋ ๊ด๋ จ libfpta 0.3.9(FPTA) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ์๋์์ต๋๋ค. MDBX ์์. ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ OSI ์น์ธ ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ํ์ฌ์ ๋ชจ๋ ์ด์ ์ฒด์ ์ ์ํคํ ์ฒ๋ ๋ฌผ๋ก Russian Elbrus 2000๋ ์ง์๋ฉ๋๋ค.
์ญ์ฌ์ ์ผ๋ก libmdbx๋ LMDB DBMS๋ฅผ ์ฌ์ธต์ ์ผ๋ก ์ฌ์์ ํ ๊ฒ์ด๋ฉฐ ์์ ์ฑ, ๊ธฐ๋ฅ ์ธํธ ๋ฐ ์ฑ๋ฅ ๋ฉด์์ ์ด์ ๋ฒ์ ๋ณด๋ค ์ฐ์ํฉ๋๋ค. LMDB์ ๋น๊ตํ์ฌ libmdbx๋ ์ฝ๋ ํ์ง, API ์์ ์ฑ, ํ ์คํธ ๋ฐ ์๋ํ๋ ๊ฒ์ฌ์ ์ค์ ์ ๋ก๋๋ค. ์ผ๋ถ ๋ณต๊ตฌ ๊ธฐ๋ฅ๊ณผ ํจ๊ป ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฌํ๋ ์ ํธ๋ฆฌํฐ๊ฐ ์ ๊ณต๋ฉ๋๋ค.
๊ธฐ์ ์ธก๋ฉด์์ libmdbx๋ ACID, ๊ฐ๋ ฅํ ๋ณ๊ฒฝ ์ง๋ ฌํ ๋ฐ CPU ์ฝ์ด ์ ์ฒด์ ๊ฑธ์ณ ์ ํ ํ์ฅ์ ํตํ ๋น์ฐจ๋จ ์ฝ๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ ์์ถ, ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌ๊ธฐ ๊ด๋ฆฌ, ๋ฒ์ ์ฟผ๋ฆฌ ์ถ์ ์ด ์ง์๋ฉ๋๋ค. 2016๋ ๋ถํฐ ํ๋ก์ ํธ๋ Positive Technologies์ ์๊ธ ์ง์์ ๋ฐ์์ผ๋ฉฐ 2017๋ ๋ถํฐ ํด๋น ํ๋ก์ ํธ๊ฐ ํด๋น ์ ํ์ ์ฌ์ฉ๋์์ต๋๋ค.
libmdbx๋ C++ API๋ฟ๋ง ์๋๋ผ ๋งค๋์๊ฐ ์ง์ํ๋ Rust, Haskell, Python, NodeJS, Ruby, Go ๋ฐ Nim์ฉ ์ธ์ด ๋ฐ์ธ๋ฉ๋ ์ ๊ณตํฉ๋๋ค. libfpta์ ๊ฒฝ์ฐ API ์ค๋ช ๋ง C/C++ ํค๋ ํ์ผ ํ์์ผ๋ก ๊ณต๊ฐ์ ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค.
9์ XNUMX์ผ ์ด์ ๋ด์ค ์ดํ ์ถ๊ฐ๋ ์ฃผ์ ํ์ , ๊ฐ์ ๋ฐ ์์ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฌํ ๊ฐ๋ฅํ ๋น๋๋ฅผ ํ์ฑํํฉ๋๋ค.
- ๋งค์ฐ ๋๋ฌผ๊ฒ ํธ๋์ญ์ ์ปค๋ฐ ์ค์ ๋ฃจํ/์ ์ง๊ฐ ๋ฐ์ํ ์ ์๋ ๋ฒ๊ทธ๋ฅผ ์์ ํ์ต๋๋ค. ์ด ๋ฌธ์ ๋ Positive Tecnologies ์ ๋ฌธ๊ฐ๋ค์ด ์์ฒด ์ ํ์ ๋ด๋ถ์ ์ผ๋ก ํ ์คํธํ๋ ๋์ ํ์ธ๋์์ต๋๋ค.
- ํ์ด์ง ํธ๋ฆฌ์ ๋๋ฌ ๊ฐ๋ฅํ ๋ชจ๋ ๋น๋ํ ์ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ์ GC ์ฝํ ์ธ ๋ฅผ ํ์ธํ๋๋ก ํ ์คํธ๊ฐ ๊ฐ์ ๋๊ณ ํ ์คํธ ์๋๋ฆฌ์ค๊ฐ ํ์ฅ๋์์ต๋๋ค.
- C++ API์์๋ ์ถ๊ฐ "noException"์ด ์์ ๋์๊ณ "cursor::erase()" ๋ฉ์๋์ ์ถ๊ฐ ์ค๋ฒ๋ก๋๊ฐ ์ถ๊ฐ๋์์ผ๋ฉฐ ๋ฒํผ ๊ตฌํ์์ ์ ๋ ฌ์ ๋ณด์ฅํ๊ธฐ ์ํด "std::string" ์ฌ์ฉ์ด ์๋ต๋์์ต๋๋ค. (CLANG libstdc++์ ๊ด๋ จ๋จ)
- ๋๊ท๋ชจ ํธ๋์ญ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ๋ ๋๋ฌผ๊ฒ ์์์น ๋ชปํ ์ค๋ฅ MDBX_PROBLEM์ผ๋ก ๋ํ๋๋ ๋ํฐ ํ์ด์ง ์ ์ถ ์๊ณ ๋ฆฌ์ฆ(๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ด์ง์ ์ ํ์ ๋ฐฐ์ถ)์ ํ๊ท๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋์ ์ธ ์์์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ง ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ์ฌ ๋จ๊ณ์ ํ ์คํธ๋ฅผ ์ํํ์ต๋๋ค.
- ์ฌ์ํ ๊ฒฝ๊ณ UndefineBehaviorSanitizer ๋ฐ Coverity Scan ๋ฌธ์ ๋ฅผ ์์ ํ์ต๋๋ค.
- ์ด์ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฏธ์ง ๋ด์ ์ค์ฒฉ ํ์ด์ง์์ ์ค๋๋์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ด๋ถ ํ๋๊ทธ "P_DIRTY"๋ฅผ ํ์ธํ๋ ๋ฌธ์ ๋ฅผ ์์ ํ์ต๋๋ค.
- CMake ์คํฌ๋ฆฝํธ์์ LTO(๋งํฌ ํ์ ์ต์ ํ)์ ํ์ํ ์ปดํ์ผ๋ฌ ๊ตฌ์ฑ ์์ ๊ฒ์์ด ๊ฐ์ ๋์์ต๋๋ค.
- ์ต๋ ๋์ ๋ ์ ์๊ฐ 32767๋ช ์ผ๋ก ๋์ด๋ฌ์ต๋๋ค.
- Valgrind ๋ฐ AddressSanitizer ์ฌ์ฉ ์ ์ฑ๋ฅ์ด ํฅ์๋์์ต๋๋ค.
- Windows์์๋ MDBX_NOTLS ๋ชจ๋(์ค๋ ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ์ง ์์)์์ ์์ ํ ๋ SRW ์ ๊ธ์ ์ฌ๊ท ์ฌ์ฉ์ด ์ ๊ฑฐ๋์์ผ๋ฉฐ, ์์คํ ์๊ฐ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ bootid ์์ฑ์ด ์์ ๋์์ผ๋ฉฐ, WSL1 ๋ฐ WSL2 ๊ฐ์ง๊ฐ ๊ฐ์ ๋์์ผ๋ฉฐ, DrvFS๋ฅผ ํตํด ๋ง์ดํธ๋ Plan 9์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๊ธฐ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ์ ์ฒด์ ์ผ๋ก 160๊ฐ ํ์ผ์ 57๊ฐ ์ด์์ ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ก์ผ๋ฉฐ ~5000์ค์ด ์ถ๊ฐ๋์๊ณ ~2500์ค์ด ์ญ์ ๋์์ต๋๋ค.
ํนํ ๊ทนํ ์ฌ์ฉ ์๋๋ฆฌ์ค ํ
์คํธ์ ๋์์ ์ค Erigon ํ๋ก์ ํธ ํ(Ethereum ์ํ๊ณ)์ ๊ฐ์ฌ์ ๋ง์์ ์ ํ๊ณ ์ถ์ต๋๋ค. libmdbx v0.10.0์ด ์ถ์๋ ์ดํ 1๊ฐ์ ๋์ ๊ฐ Erigon ์ค์น์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณผ๋ฅจ์ด 2-7TB(์ด๋๋ฆฌ์ ๋
ธ๋์ XNUMX%์์ ์ฌ์ฉ๋จ)์ธ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์์ ๋ํ ๋ณด๊ณ ๊ฐ XNUMX๊ฑด๋ง ์ ์๋์๋ค๋ ์ ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ด๋ ์ํํธ์จ์ด ์ค๋ฅ๊ฐ ์๋ ์ธ๋ถ ์ด์ ๋ก ์ธํด ๋ฐ์ํ์ต๋๋ค. ๋ ๊ฐ์ง ๊ฒฝ์ฐ ์์ธ์ RAM ์ค๋ฅ์๊ณ , ์ธ ๋ฒ์งธ๋ BTRFS๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ๋ฆฌ์ง ํ์ ์์คํ
์ ํน์ ๊ตฌ์ฑ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ค์ ํ๋ ๋์ ๋ฐ์ํ ์ค๋ฅ์์ต๋๋ค.
์ถ์ฒ : opennet.ru