ืžืขืœื“ื•ื ื’ ืคื•ืŸ ื”ื•ื™ืš-ืคืึธืจืฉื˜ืขืœื•ื ื’ ืขืžื‘ืขื“ื™ื“ DBMS libmdbx 0.11.3

ื“ื™ ืœื™ื‘ืžื“ื‘ืงืก 0.11.3 (MDBX) ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืื™ื– ื‘ืืคืจื™ื™ื˜ ืžื™ื˜ ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ืึท ื”ื•ื™ืš-ืคืึธืจืฉื˜ืขืœื•ื ื’ ืกืึธืœื™ื“ ืขืžื‘ืขื“ื™ื“ ืฉืœื™ืกืœ-ื•ื•ืขืจื˜ ื“ืึทื˜ืึทื‘ื™ื™ืก. ื“ื™ libmdbx ืงืึธื“ ืื™ื– ืœื™ื™ืกืึทื ืกื˜ ืื•ื ื˜ืขืจ ื“ื™ OpenLDAP ืคึผื•ื‘ืœื™ืง ืœื™ืกืขื ืกืข. ืึทืœืข ืงืจืึทื ื˜ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขืžืขืŸ ืื•ืŸ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจื– ื–ืขื ืขืŸ ื’ืขืฉื˜ื™ืฆื˜, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื“ื™ ืจื•ืกื™ืฉืข ืขืœื‘ืจื•ืก 2000. ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ 2021, ืœื™ื‘ืžื“ื‘ืงืก ืื™ื– ื’ืขื ื™ืฆื˜ ื•ื•ื™ ืึท ืกื˜ืึธืจื™ื“ื–ืฉ ื‘ืึทืงืขื ื“ ืื™ืŸ ื“ื™ ืฆื•ื•ื™ื™ ืคืึทืกื˜ืึทืกื˜ ืขื˜ื”ืขืจืขื•ื ืงืœื™ื™ืึทื ืฅ - ืขืจื™ื’ืึธืŸ ืื•ืŸ ื“ื™ ื ื™ื™ึท "ืฉืึทืจืง", ื•ื•ืึธืก, ืœื•ื™ื˜ ื‘ื ื™ืžืฆื ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข, ืื™ื– ื“ื™ ื”ืขื›ืกื˜ืŸ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืขื˜ื”ืขืจืขื•ื ืงืœื™ืขื ื˜.

ื”ื™ืกื˜ืึธืจื™ืฉ, ืœื™ื‘ืžื“ื‘ืงืก ืื™ื– ืึท ื˜ื™ืฃ ืจื™ื•ื•ืขืจืงื™ื ื’ ืคื•ืŸ ื“ื™ LMDB DBMS ืื•ืŸ ืกืขืจืคึผืึทืกื™ื– ื–ื™ื™ืŸ ืึธื•ื•ืขืก ืื™ืŸ ืจื™ืœื™ื™ืึทื‘ื™ืœืึทื˜ื™, ืฉื˜ืจื™ืš ืฉื˜ืขืœืŸ ืื•ืŸ ืคืึธืจืฉื˜ืขืœื•ื ื’. ืงืึทืžืคึผืขืจื“ ืฆื• LMDB, ืœื™ื‘ืžื“ื‘ืงืก ืœื™ื™ื’ื˜ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ื˜ืจืึธืคึผ ืื•ื™ืฃ ืงืึธื“ ืงื•ื•ืึทืœื™ื˜ืขื˜, ืึทืคึผื™ ืคืขืกื˜ืงื™ื™ึทื˜, ื˜ืขืกื˜ื™ื ื’ ืื•ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื˜ืฉืขืงืก. ื ื ื•ืฆืŸ ืคึฟืึทืจ ืงืึธื ื˜ืจืึธืœื™ืจื•ื ื’ ื“ื™ ืึธืจื ื˜ืœืขื›ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืกื˜ืจื•ืงื˜ื•ืจ ืžื™ื˜ ืขื˜ืœืขื›ืข ืึธืคึผื–ื•ืš ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืื™ื– ืกืึทืคึผืœื™ื™ื“.

ื˜ืขื›ื ืึธืœืึธื’ื™ืข-ืงืœื•ื’, libmdbx ืึธืคืคืขืจืก ืึทืกื™ื“, ืฉื˜ืึทืจืง ื˜ื•ื™ืฉืŸ ืกื™ืจื™ืึทืœื™ื–ื™ื™ืฉืึทืŸ ืื•ืŸ ื ื™ื˜-ื‘ืœืึทืงื™ื ื’ ืœื™ื™ืขื ืขืŸ ืžื™ื˜ ืœื™ื ืขืึทืจ ืกืงื™ื™ืœื™ื ื’ ืึทืจื™ื‘ืขืจ ืงืคึผื• ืงืึธืจืขืก. ืึทื•ื˜ืึธ-ืงืึธืžืคึผืึทืงื˜ืึทืคืึทืงื™ื™ืฉืึทืŸ, ืึธื˜ืึทืžืึทื˜ื™ืง ื“ื™ื™ื˜ืึทื‘ื™ื™ืก ื’ืจื™ื™ืก ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืื•ืŸ ืงื™ื™ื˜ ืึธื ืคึฟืจืขื’ ืึธืคึผืฉืึทืฆื•ื ื’ ื–ืขื ืขืŸ ื’ืขืฉื˜ื™ืฆื˜. ื–ื™ื ื˜ 2016, ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืื™ื– ืคืึทื ื“ืึทื“ ื“ื•ืจืš Positive Technologies ืื•ืŸ ืื™ื– ื’ืขื ื™ืฆื˜ ืื™ืŸ ื–ื™ื™ึทืŸ ืคึผืจืึธื“ื•ืงื˜ืŸ ื–ื™ื ื˜ 2017.

libmdbx ืึธืคืคืขืจืก ืึท C ++ ืึทืคึผื™, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืขื ื˜ื•ื–ื™ืึทืกื˜-ื’ืขืฉื˜ื™ืฆื˜ ืฉืคึผืจืึทืš ื‘ื™ื™ื ื“ื™ื ื’ื– ืคึฟืึทืจ Rust, Haskell, Python, NodeJS, Ruby, Go ืื•ืŸ Nim.

ื”ื•ื™ืคึผื˜ ื™ื ืึธื•ื•ื•ื™ื™ืฉืึทื ื–, ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ ืื•ืŸ ืงืขืจืขืงืฉืึทื ื– ืฆื•ื’ืขื’ืขื‘ืŸ ื–ื™ื ื˜ ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ื ื™ื™ึทืขืก ืื•ื™ืฃ 11 ืืงื˜ืื‘ืขืจ:

  • ื“ื™ C ++ ืึทืคึผื™ ืื™ื– ื’ืขืจืขื›ื ื˜ ื•ื•ื™ ื’ืจื™ื™ื˜ ืคึฟืึทืจ ื ื•ืฆืŸ.
  • ื“ื™ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืคื•ืŸ GC ื“ืึทื˜ืŸ ื•ื•ืขืŸ ืงืึทืžื™ื˜ื™ื ื’ ืจื™ื–ื™ืง ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– ืื™ื– ื‘ืื˜ื™ื™ื˜ื™ืง ืึทืงืกืขืœืขืจื™ื™ื˜ื™ื“, ื•ื•ืึธืก ืื™ื– ืกืคึผืขืฆื™ืขืœ ื•ื•ื™ื›ื˜ื™ืง ื•ื•ืขืŸ ื ื™ืฆืŸ ืœื™ื‘ืžื“ื‘ืงืก ืื™ืŸ ื“ื™ ืขื˜ื”ืขืจืขื•ื ื™ืงืึธื•ืกื™ืกื˜ืึทื.
  • ื“ื™ ื™ื ืขืจืœืขืš ื›ืกื™ืžืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืคึฟืึธืจืžืึทื˜ ืื™ื– ืคืืจืขื ื“ืขืจื˜ ืฆื• ืฉื˜ื™ืฆืŸ ืึธื˜ืึทืžืึทื˜ื™ืง ืึทืคึผื“ื™ื™ื˜ื™ื ื’, ื•ื•ืึธืก ืื™ื– ื’ืึธืจ ื˜ืจืึทื ืกืคึผืขืจืึทื ื˜ ืคึฟืึทืจ ื ื™ืฆืขืจืก. ื“ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืขืœื™ืžื™ื ื™ืจืŸ ืคืึทืœืฉ-positive ืึทืจื˜ื™ืงืœืขืŸ ื•ื•ืขื’ืŸ ื“ื™ื™ื˜ืึทื‘ื™ื™ืก ืงืึธืจื•ืคึผืฆื™ืข ื•ื•ืขืŸ ืึทื•ื˜ื“ื™ื™ื˜ื™ื“ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื“ืขืจ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ ืฆื• ืœื™ื™ืขื ืขืŸ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– ืจืขืงืึธืจื“ืขื“ ื“ื•ืจืš ืงืจืึทื ื˜ ื•ื•ืขืจืกื™ืขืก.
  • ืฆื•ื’ืขืœื™ื™ื’ื˜ ืคืึทื ื’ืงืฉืึทื ื– mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() ืื•ืŸ mdbx_env_get_syncbytes(). ืฆื•ื’ืขื’ืขื‘ืŸ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ื“ื™ MDBX_SET_UPPERBOUND ืึธืคึผืขืจืึทืฆื™ืข.
  • ืึทืœืข ื•ื•ืึธืจื ื™ื ื’ื– ื•ื•ืขืŸ ื‘ื ื™ืŸ ืžื™ื˜ ืึทืœืข ืฉื˜ื™ืฆื˜ ืงืึทืžืคึผื™ื™ืœืขืจื– ืื™ืŸ C ++ 11/14/17/20 ืžืึธื“ืขืก ื–ืขื ืขืŸ ื™ืœื™ืžืึทื ื™ื™ื˜ืึทื“. ืงืึทืžืคึผืึทื˜ืึทื‘ื™ืœืึทื˜ื™ ืžื™ื˜ ืœืขื’ืึทื˜ ืงืึธืžืคึผื™ืœืขืจืก ืื™ื– ื™ื ืฉื•ืจื“: ืงืœืึทื ื’ ืกื˜ืึทืจื˜ื™ื ื’ ืคื•ืŸ 3.9, ื’ืงืง ืกื˜ืึทืจื˜ื™ื ื’ ืคื•ืŸ 4.8, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ื ื™ืฆืŸ cdevtoolset-9 ืคึฟืึทืจ CentOS / RHEL 7.
  • ืคืึทืจืคืขืกื˜ื™ืงื˜ ื“ื™ ืžืขื’ืœืขื›ืงื™ื™ื˜ ืคื•ืŸ ืึท ืžืขื˜ืึท ื‘ืœืึทื˜ ืงืึธื ืคืœื™ืงื˜ ื ืึธืš ืžืึทื ื™ื•ืึทืœื™ ืกื•ื•ื™ื˜ืฉื™ื ื’ ืฆื• ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืžืขื˜ืึท ื‘ืœืึทื˜ ืžื™ื˜ ื“ื™ mdbx_chk ื ื•ืฆืŸ.
  • ืคืึทืจืคืขืกื˜ื™ืงื˜ ืื•ืžื’ืขืจื™ื›ื˜ MDBX_PROBLEM ื˜ืขื•ืช ืื™ื– ืื•ืžื’ืขืงืขืจื˜ ื•ื•ืขืŸ ืึธื•ื•ื•ืขืจืจื™ื™ื˜ื™ื ื’ ืœืขื’ืึทื˜ ืžืขื˜ืึท ื‘ืœืขื˜ืขืจ.
  • ืคืึทืจืคืขืกื˜ื™ืงื˜ ืฆื•ืจื™ืงืงื•ืžืขืŸ MDBX_NOTFOUND ืื™ืŸ ืคืึทืœ ืคื•ืŸ ืึท ื™ื ืขืงืกืึทืงื˜ ื’ืœื™ื™ึทื›ืŸ ื•ื•ืขืŸ ืคึผืจืึทืกืขืกื™ื ื’ ืึท MDBX_GET_BOTH ื‘ืขื˜ืŸ.
  • ืคืึทืจืคืขืกื˜ื™ืงื˜ ืึท ื–ืึทืžืœื•ื ื’ ื˜ืขื•ืช ืื•ื™ืฃ ืœื™ื ื•ืงืก ืื™ืŸ ื“ืขืจ ืึทื•ื•ืขืง ืคื•ืŸ ื›ืขื“ืขืจ ื˜ืขืงืขืก ืžื™ื˜ ื“ื™ืกืงืจื™ืคึผืฉืึทื ื– ืคื•ืŸ ื™ื ื˜ืขืจืคื™ื™ืกื™ื– ืžื™ื˜ ื“ื™ ืงืขืจืŸ.
  • ืคืึทืจืคืขืกื˜ื™ืงื˜ ืึท ืงืึธื ืคืœื™ืงื˜ ืฆื•ื•ื™ืฉืŸ ื“ื™ MDBX_SHRINK_ALLOWED ื™ื ืขืจืœืขืš ืคืึธืŸ ืื•ืŸ ื“ื™ MDBX_ACCEDE ืึธืคึผืฆื™ืข.
  • ืขื˜ืœืขื›ืข ื•ืžื ื™ื™ื˜ื™ืง ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื˜ืฉืขืงืก ื–ืขื ืขืŸ ื™ืœื™ืžืึทื ื™ื™ื˜ืึทื“.
  • ืคืึทืจืคืขืกื˜ื™ืงื˜ ืื•ืžื’ืขืจื™ื›ื˜ ืฆื•ืจื™ืงืงืขืจ ืคื•ืŸ MDBX_RESULT_TRUE ืคึฟื•ืŸ mdbx_env_set_option () ืคึฟื•ื ืงืฆื™ืข.
  • ืื™ืŸ ื’ืึทื ืฅ, ืžืขืจ ื•ื•ื™ 90 ืขื ื“ืขืจื•ื ื’ืขืŸ ื–ืขื ืขืŸ ื’ืขืžืื›ื˜ ืฆื• 25 ื˜ืขืงืขืก, ~ 1300 ืฉื•ืจื•ืช ื–ืขื ืขืŸ ืฆื•ื’ืขื’ืขื‘ืŸ, ~ 600 ื–ืขื ืขืŸ ืื•ื™ืกื’ืขืžืขืงื˜.

ืžืงื•ืจ: opennet.ru

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’