1.0๋…„ ๊ฐ„์˜ ๊ฐœ๋ฐœ ํ›„ ๋‘ ๋ฒˆ์งธ libmdbx vXNUMX ๋ฆด๋ฆฌ์Šค ํ›„๋ณด์ž…๋‹ˆ๋‹ค.

๋„์„œ๊ด€ 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

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