๊ณ ์„ฑ๋Šฅ ์ž„๋ฒ ๋””๋“œ DBMS libmdbx 0.11.3 ์ถœ์‹œ

libmdbx 0.11.3(MDBX) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ณ ์„ฑ๋Šฅ ์ปดํŒฉํŠธ ์ž„๋ฒ ๋””๋“œ ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌํ˜„๊ณผ ํ•จ๊ป˜ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. libmdbx ์ฝ”๋“œ๋Š” OpenLDAP Public License์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ˜„์žฌ ์šด์˜ ์ฒด์ œ์™€ ์•„ํ‚คํ…์ฒ˜๋Š” ๋Ÿฌ์‹œ์•„ Elbrus 2000๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ง€์›๋ฉ๋‹ˆ๋‹ค. 2021๋…„ ๋ง์— libmdbx๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋‘ Ethereum ํด๋ผ์ด์–ธํŠธ์ธ Erigon๊ณผ ์ƒˆ๋กœ์šด "Shark"์—์„œ ์Šคํ† ๋ฆฌ์ง€ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. information์€ ์ตœ๊ณ  ์„ฑ๋Šฅ์˜ Ethereum ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค.

์—ญ์‚ฌ์ ์œผ๋กœ libmdbx๋Š” LMDB DBMS๋ฅผ ์‹ฌ์ธต์ ์œผ๋กœ ์žฌ์„ค๊ณ„ํ–ˆ์œผ๋ฉฐ ์•ˆ์ •์„ฑ, ๊ธฐ๋Šฅ ์„ธํŠธ ๋ฐ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ์ด์ „ ์ œํ’ˆ์„ ๋Šฅ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. LMDB์™€ ๋น„๊ตํ•˜์—ฌ libmdbx๋Š” ์ฝ”๋“œ ํ’ˆ์งˆ, API ์•ˆ์ •์„ฑ, ํ…Œ์ŠคํŠธ ๋ฐ ์ž๋™ํ™”๋œ ๊ฒ€์‚ฌ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ์ผ๋ถ€ ๋ณต๊ตฌ ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ  ์ธก๋ฉด์—์„œ libmdbx๋Š” ACID, ๊ฐ•๋ ฅํ•œ ๋ณ€๊ฒฝ ์ง๋ ฌํ™” ๋ฐ CPU ์ฝ”์–ด ์ „์ฒด์— ๊ฑธ์ณ ์„ ํ˜• ํ™•์žฅ์„ ํ†ตํ•œ ๋น„์ฐจ๋‹จ ์ฝ๊ธฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ์••์ถ•, ์ž๋™ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํฌ๊ธฐ ๊ด€๋ฆฌ, ๋ฒ”์œ„ ์ฟผ๋ฆฌ ์ถ”์ •์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. 2016๋…„๋ถ€ํ„ฐ ์ด ํ”„๋กœ์ ํŠธ๋Š” Positive Technologies์˜ ์ž๊ธˆ ์ง€์›์„ ๋ฐ›์•˜์œผ๋ฉฐ 2017๋…„๋ถ€ํ„ฐ ํ•ด๋‹น ์ œํ’ˆ์— ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

libmdbx๋Š” C++ API๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งค๋‹ˆ์•„๊ฐ€ ์ง€์›ํ•˜๋Š” Rust, Haskell, Python, NodeJS, Ruby, Go ๋ฐ Nim์šฉ ์–ธ์–ด ๋ฐ”์ธ๋”ฉ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

11์›” XNUMX์ผ ์ด์ „ ๋‰ด์Šค ์ดํ›„ ์ถ”๊ฐ€๋œ ์ฃผ์š” ํ˜์‹ , ๊ฐœ์„  ๋ฐ ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • C++ API๋Š” ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๊ทœ๋ชจ ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•  ๋•Œ GC ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ํฌ๊ฒŒ ๊ฐ€์†ํ™”๋˜์—ˆ์œผ๋ฉฐ ์ด๋Š” Ethereum ์ƒํƒœ๊ณ„์—์„œ libmdbx๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜•์‹์˜ ๋‚ด๋ถ€ ์„œ๋ช…์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์™„์ „ํžˆ ํˆฌ๋ช…ํ•œ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์›ํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๋ฒ„์ „์—์„œ ๊ธฐ๋ก๋œ ํŠธ๋žœ์žญ์…˜์„ ์ฝ์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์†์ƒ์— ๋Œ€ํ•œ ๊ฑฐ์ง“ ๊ธ์ • ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • mdbx_env_get_syncbytes(), mdbx_env_get_sync๊ธฐ๊ฐ„() ๋ฐ mdbx_env_get_syncbytes() ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. MDBX_SET_UPPERBOUND ์ž‘์—…์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • C++ 11/14/17/20 ๋ชจ๋“œ์—์„œ ์ง€์›๋˜๋Š” ๋ชจ๋“  ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ๋นŒ๋“œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ๊ณ ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. CentOS/RHEL 3.9์šฉ cdevtoolset-4.8๋ฅผ ์‚ฌ์šฉํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ํฌํ•จํ•˜์—ฌ 9๋ถ€ํ„ฐ clang, 7๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” gcc ๋“ฑ ๋ ˆ๊ฑฐ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ์™€์˜ ํ˜ธํ™˜์„ฑ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.
  • mdbx_chk ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋ฉ”ํƒ€ํŽ˜์ด์ง€๋กœ ์ˆ˜๋™ ์ „ํ™˜ํ•œ ํ›„ ๋ฉ”ํƒ€ํŽ˜์ด์ง€ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ ˆ๊ฑฐ์‹œ ๋ฉ”ํƒ€ ํŽ˜์ด์ง€๋ฅผ ๋ฎ์–ด์“ธ ๋•Œ ๋ฐ˜ํ™˜๋˜๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ MDBX_PROBLEM ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • MDBX_GET_BOTH ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ถ€์ •ํ™•ํ•œ ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ MDBX_NOTFOUND ๋ฐ˜ํ™˜์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ปค๋„๊ณผ์˜ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํฌํ•จ๋œ ํ—ค๋” ํŒŒ์ผ์ด ์—†์„ ๋•Œ Linux์—์„œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • MDBX_SHRINK_ALLOWED ๋‚ด๋ถ€ ํ”Œ๋ž˜๊ทธ์™€ MDBX_ACCEDE ์˜ต์…˜ ๊ฐ„์˜ ์ถฉ๋Œ์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ช‡ ๊ฐ€์ง€ ๋ถˆํ•„์š”ํ•œ ์–ด์„ค์…˜ ํ™•์ธ์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • mdbx_env_set_option() ํ•จ์ˆ˜์—์„œ MDBX_RESULT_TRUE์˜ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฐ˜ํ™˜์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ „์ฒด์ ์œผ๋กœ 90๊ฐœ ํŒŒ์ผ์— 25๊ฐœ ์ด์ƒ์˜ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์กŒ์œผ๋ฉฐ ~1300์ค„์ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ  ~600์ค„์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€