ืฉื—ืจื•ืจ ืฉืœ DBMS ืžื•ื˜ื‘ืข ืขื ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื libmdbx 0.10.4 ื•-libfpta 0.3.9

ืกืคืจื™ื•ืช libmdbx 0.10.4 (MDBX) ืฉื•ื—ืจืจื• ืขื ื™ื™ืฉื•ื ืฉืœ ืžืกื“ ื ืชื•ื ื™ื ืงื•ืžืคืงื˜ื™ ืžืฉื•ื‘ืฅ ืžืคืชื—-ืขืจืš ื‘ืขืœ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื, ื•ืกืคืจื™ื™ืช libfpta 0.3.9 (FPTA), ื”ืžื™ื™ืฉืžืช ื™ื™ืฆื•ื’ ื˜ื‘ืœืื™ ืฉืœ ื ืชื•ื ื™ื ืขื ืื™ื ื“ืงืกื™ื ืžืฉื ื™ื™ื ื•ืžืจื•ื›ื‘ื™ื ืขืœ ื’ื‘ื™ MDBX. ืฉืชื™ ื”ืกืคืจื™ื•ืช ืžื•ืคืฆื•ืช ืชื—ืช ืจื™ืฉื™ื•ื ื•ืช ืžืื•ืฉืจื™ื ืฉืœ OSI. ื›ืœ ืžืขืจื›ื•ืช ื”ื”ืคืขืœื” ื•ื”ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ื”ื ื•ื›ื—ื™ื•ืช ื ืชืžื›ื•ืช, ื›ืžื• ื’ื Elbrus 2000 ื”ืจื•ืกื™.

ืžื‘ื—ื™ื ื” ื”ื™ืกื˜ื•ืจื™ืช, libmdbx ื”ื•ื ืขื™ื‘ื•ื“ ืžืขืžื™ืง ืฉืœ ื”-LMDB DBMS ื•ื”ื•ื ืขื“ื™ืฃ ืขืœ ื”ืื‘ ื”ืงื“ืžื•ืŸ ืฉืœื• ื‘ืืžื™ื ื•ืช, ืžืขืจืš ืชื›ื•ื ื•ืช ื•ื‘ื™ืฆื•ืขื™ื. ื‘ื”ืฉื•ื•ืื” ืœ-LMDB, libmdbx ืฉืžื” ื“ื’ืฉ ืจื‘ ืขืœ ืื™ื›ื•ืช ืงื•ื“, ื™ืฆื™ื‘ื•ืช API, ื‘ื“ื™ืงื•ืช ื•ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช. ืžืกื•ืคืง ื›ืœื™ ืขื–ืจ ืœื‘ื“ื™ืงืช ืชืงื™ื ื•ืช ืžื‘ื ื” ืžืกื“ ื”ื ืชื•ื ื™ื ืขื ื›ืžื” ื™ื›ื•ืœื•ืช ืฉื—ื–ื•ืจ.

ืžื‘ื—ื™ื ื” ื˜ื›ื ื•ืœื•ื’ื™ืช, libmdbx ืžืฆื™ืข ACID, ืกื™ื“ื•ืจื™ ืฉื™ื ื•ื™ื™ื ื—ื–ืงื™ื ื•ืงืจื™ืื•ืช ืœื ื—ื•ืกืžื•ืช ืขื ืงื ื” ืžื™ื“ื” ืœื™ื ื™ืืจื™ ืขืœ ืคื ื™ ืœื™ื‘ื•ืช ื”ืžืขื‘ื“. ื”ืงื•ืžืคืงืฆื™ื” ืื•ื˜ื•ืžื˜ื™ืช, ื ื™ื”ื•ืœ ื’ื•ื“ืœ ืžืกื“ ื ืชื•ื ื™ื ืื•ื˜ื•ืžื˜ื™ ื•ื”ืขืจื›ืช ืฉืื™ืœืชืช ื˜ื•ื•ื— ื ืชืžื›ื™ื. ืžืื– 2016, ืคืจื•ื™ืงื˜ื™ื ืžืžื•ืžื ื™ื ืขืœ ื™ื“ื™ Positive Technologies ื•ืžืื– 2017 ืžืฉืžืฉื™ื ื‘ืžื•ืฆืจื™ื ืฉืœื”.

libmdbx ืžืฆื™ืข C++ API, ื›ืžื• ื’ื ื›ืจื™ื›ื•ืช ืฉืคื” ื”ื ืชืžื›ื•ืช ืขืœ ื™ื“ื™ ื—ื•ื‘ื‘ื™ื ืขื‘ื•ืจ Rust, Haskell, Python, NodeJS, Ruby, Go ื•-Nim. ืขื‘ื•ืจ libfpta, ืจืง ืชื™ืื•ืจ ื”-API ื–ืžื™ืŸ ืœืฆื™ื‘ื•ืจ ื‘ืฆื•ืจื” ืฉืœ ืงื•ื‘ืฅ ื›ื•ืชืจืช C/C++.

ื—ื™ื“ื•ืฉื™ื, ืฉื™ืคื•ืจื™ื ื•ืชื™ืงื•ื ื™ื ืžืจื›ื–ื™ื™ื ืฉื ื•ืกืคื• ืžืื– ื”ื—ื“ืฉื•ืช ื”ืงื•ื“ืžื•ืช ื‘-9 ื‘ืžืื™:

  • ืžืืคืฉืจ ื‘ื ื™ื™ื” ื ื™ืชื ืช ืœืฉื—ื–ื•ืจ.
  • ืชื™ืงืŸ ื‘ืื’ ืฉื‘ื’ืœืœื•, ื‘ื ืกื™ื‘ื•ืช ื ื“ื™ืจื•ืช ืžืื•ื“, ืœื•ืœืื”/ื”ืงืคืื” ืขืœื•ืœื” ืœื”ืชืจื—ืฉ ื‘ืžื”ืœืš ื‘ื™ืฆื•ืข ืขืกืงื”. ื”ื‘ืขื™ื” ื–ื•ื”ืชื” ืขืœ ื™ื“ื™ ืžื•ืžื—ื™ Positive Tecnologies ื‘ืžื”ืœืš ื‘ื“ื™ืงื•ืช ืคื ื™ืžื™ื•ืช ืฉืœ ื”ืžื•ืฆืจื™ื ืฉืœื”ื.
  • ื”ื‘ื“ื™ืงื•ืช ืฉื•ืคืจื• ื•ืชืจื—ื™ืฉื™ ื”ื‘ื“ื™ืงื” ื”ื•ืจื—ื‘ื• ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื›ืœ ื”ืžืฆื‘ื™ื ื”ืœื-ืื™ื–ืžื•ืจืคื™ื™ื ื”ื ื’ื™ืฉื™ื ืฉืœ ืขืฅ ื”ืขืžื•ื“ื™ื ื•ืชื•ื›ืŸ GC ื‘ืชื•ืš ืžืกื“ ื”ื ืชื•ื ื™ื.
  • ื‘-C++ API, ืชื•ืงืŸ "noexcept" ื ื•ืกืฃ, ืขื•ืžืกื™ื ื ื•ืกืคื™ื ื ื•ืกืคื• ืขื‘ื•ืจ ืฉื™ื˜ืช "cursor::erase()", ื™ื™ืฉื•ื ืžืื’ืจื™ื ื ื—ืกืš ืžื”ืฉื™ืžื•ืฉ ื‘-"std::string" ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ื™ื™ืฉื•ืจ (ืจืœื•ื•ื ื˜ื™ ืขื‘ื•ืจ CLANG libstdc++).
  • ื ืกื™ื’ื” ื‘ืืœื’ื•ืจื™ืชื ืฉืคื™ื›ืช ื”ื“ืฃ ื”ืžืœื•ื›ืœืš (ืคืœื™ื˜ื” ืกืœืงื˜ื™ื‘ื™ืช ืฉืœ ื“ืคื™ ืžืกื“ ื ืชื•ื ื™ื ืฉื”ืฉืชื ื•) ืฉื”ืชื‘ื˜ืื” ื‘ืฉื’ื™ืื” ื‘ืœืชื™ ืฆืคื•ื™ื” ื ื“ื™ืจื” MDBX_PROBLEM ื‘ืขืช ืฉื™ื ื•ื™ ื ืชื•ื ื™ื ื‘ืขืกืงืื•ืช ืขื ืง ื‘ื•ื˜ืœื”.
  • ื‘ื•ืฆืขื” ื‘ื“ื™ืงืช ืคืื–ื™ื ื’ ื‘ืชื•ืกืคืช ืžืกืคืจ ื‘ื“ื™ืงื•ืช ืœื”ื‘ื˜ื—ืช ื™ืฆื™ื‘ื•ืช ื‘ืžืงืจื” ืฉืœ ืคื’ื™ืขื” ืžื›ื•ื•ื ืช ื‘ืžืื’ืจ ื”ื ืชื•ื ื™ื.
  • ืชื•ืงื ื• ื‘ืขื™ื•ืช ืฉืœ ืื–ื”ืจื•ืช ืงืœื•ืช UndefinedBehaviorSnitizer ื•ืกืจื™ืงืช Coverity.
  • ืชื•ืงืŸ ื‘ื“ื™ืงืช ื”ื“ื’ืœ ื”ืคื ื™ืžื™ ื”ืžื™ื•ืฉืŸ ื•ื”ืœื ื‘ืฉื™ืžื•ืฉ ืขื•ื“ "P_DIRTY" ื‘ื“ืคื™ื ืžืงื•ื ื ื™ื ื‘ืชื•ืš ืชืžื•ื ื•ืช ืžืกื“ ื ืชื•ื ื™ื ืฉื ื•ืฆืจื• ืขืœ ื™ื“ื™ ื’ืจืกืื•ืช ื™ืฉื ื•ืช ื™ื•ืชืจ ืฉืœ ื”ืกืคืจื™ื™ื”.
  • ื‘ืกืงืจื™ืคื˜ื™ื ืฉืœ CMake, ื”ื—ื™ืคื•ืฉ ืื—ืจ ืจื›ื™ื‘ื™ ืžื”ื“ืจ ื”ื ื“ืจืฉื™ื ืœ-LTO (ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื–ืžืŸ ืงื™ืฉื•ืจ) ืฉื•ืคืจ.
  • ื”ืžืกืคืจ ื”ืžืจื‘ื™ ืฉืœ ืงื•ืจืื™ื ื‘ื•-ื–ืžื ื™ืช ื”ื•ื’ื“ืœ ืœ-32767.
  • ื‘ื™ืฆื•ืขื™ื ืžืฉื•ืคืจื™ื ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-Valgrind ื•-AddressSnitizer.
  • ื‘-Windows, ื‘ื•ื˜ืœ ื”ืฉื™ืžื•ืฉ ื”ืจืงื•ืจืกื™ ื‘-SRW-lock ื‘ืขืช ืขื‘ื•ื“ื” ื‘ืžืฆื‘ MDBX_NOTLS (ืœืœื ืฉื™ืžื•ืฉ ื‘ืื—ืกื•ืŸ ืžืงื•ืžื™ ืฉืœ ืคืชื™ืœ), ื™ืฆื™ืจืช ืืชื—ื•ืœ ืชื•ืงืŸ ืื ื–ืžืŸ ื”ืžืขืจื›ืช ื”ืฉืชื ื”, ื–ื™ื”ื•ื™ WSL1 ื•-WSL2 ืฉื•ืคืจ, ื•ื”ื™ื›ื•ืœืช ืคืชื— ืžืกื“ ื ืชื•ื ื™ื ื‘ืชื•ื›ื ื™ืช 9 ื”ืžื•ืชืงืŸ ื‘ืืžืฆืขื•ืช DrvFS ื ื•ืกืฃ.
  • ื‘ืกืš ื”ื›ืœ, ื‘ื•ืฆืขื• ื™ื•ืชืจ ืž-160 ืฉื™ื ื•ื™ื™ื ื‘-57 ืงื‘ืฆื™ื, ื ื•ืกืคื• ~5000 ืฉื•ืจื•ืช, ~2500 ื ืžื—ืงื•.

ืื ื™ ืจื•ืฆื” ืœื”ื•ื“ื•ืช ื‘ืžื™ื•ื—ื“ ืœืฆื•ื•ืช ื”ืคืจื•ื™ืงื˜ ืฉืœ Erigon (Ethereum ecosystem) ืขืœ ื”ืกื™ื•ืข ืฉืœื”ื ื‘ื‘ื“ื™ืงื” ื‘ืชืจื—ื™ืฉื™ ืฉื™ืžื•ืฉ ืงื™ืฆื•ื ื™. ื–ื” ืžืฉืžืขื•ืชื™ ืฉื‘ื—ืžื™ืฉื” ื—ื•ื“ืฉื™ื ืžืื– ื™ืฆื™ืืช libmdbx v0.10.0, ืขื ื ืคื— ืžืกื“ ื ืชื•ื ื™ื ืฉืœ 1-2 TB ื‘ื›ืœ ื”ืชืงื ืช Erigon (ื‘ืฉื™ืžื•ืฉ ื‘-7% ืžืฆืžืชื™ Ethereum), ื”ืชืงื‘ืœื• ืจืง ืฉืœื•ืฉื” ื“ื™ื•ื•ื—ื™ื ืขืœ ืฉื—ื™ืชื•ืช ื‘ืžืกื“ ื”ื ืชื•ื ื™ื, ื›ื•ืœื ืฉื”ืชืจื—ืฉื” ืžืกื™ื‘ื•ืช ื—ื™ืฆื•ื ื™ื•ืช, ื•ืœื ืฉื’ื™ืื•ืช ืชื•ื›ื ื”: ื‘ืฉื ื™ ืžืงืจื™ื ื”ืกื™ื‘ื” ื”ื™ื™ืชื” ืชืงืœื•ืช RAM, ื‘ืฉืœื™ืฉื™ ืฉื’ื™ืื” ื‘ืื™ืคื•ืก ื ืชื•ื ื™ื ื‘ืชืฆื•ืจื” ืกืคืฆื™ืคื™ืช ืฉืœ ืชืช-ืžืขืจื›ืช ื”ืื—ืกื•ืŸ ื‘ืืžืฆืขื•ืช BTRFS.

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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”