ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libmdbx 0.11.3 (MDBX) Π±Π΅ΡΠ΅ ΠΏΡΡΠ½Π°ΡΠ° Ρ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½Π° Π²Π³ΡΠ°Π΄Π΅Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Ρ ΠΊΠ»ΡΡ-ΡΡΠΎΠΉΠ½ΠΎΡΡ. ΠΠΎΠ΄ΡΡ Π½Π° libmdbx Π΅ Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠ°Π½ ΠΏΠΎΠ΄ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈΡ Π»ΠΈΡΠ΅Π½Π· OpenLDAP. ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½Π°ΡΡΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΡΡΠΊΠΈΡΡ Elbrus 2000. Π ΠΊΡΠ°Ρ Π½Π° 2021 Π³. libmdbx ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π² Π΄Π²Π°ΡΠ° Π½Π°ΠΉ-Π±ΡΡΠ·ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π° Ethereum - Erigon ΠΈ Π½ΠΎΠ²ΠΈΡ βSharkβ, ΠΊΠΎΠΉΡΠΎ ΡΠΏΠΎΡΠ΅Π΄ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π½Π° Ethereum Ρ Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ.
ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ libmdbx Π΅ Π΄ΡΠ»Π±ΠΎΠΊ ΡΠ΅Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π° LMDB DBMS ΠΈ Π½Π°Π΄ΠΌΠΈΠ½Π°Π²Π° ΡΠ²ΠΎΡ ΠΏΡΠ°ΡΠΎΠ΄ΠΈΡΠ΅Π» ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡ, Π½Π°Π±ΠΎΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ. Π ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ LMDB, libmdbx Π½Π°Π±Π»ΡΠ³Π° ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ΄Π°, ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡΡΠ° Π½Π° API, ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. ΠΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ΅Π»ΠΎΡΡΡΠ° Π½Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΡΠ΅ Π΄ΠΎΡΡΠ°Π²Ρ Ρ Π½ΡΠΊΠΎΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅.
Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ½ΠΎ, libmdbx ΠΏΡΠ΅Π΄Π»Π°Π³Π° ACID, ΡΠΈΠ»Π½Π° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π² ΡΠ΄ΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°. ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠΏΠ»ΡΡΠ½ΡΠ²Π°Π½Π΅, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½. ΠΡ 2016 Π³. ΠΏΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ ΡΠΈΠ½Π°Π½ΡΠΈΡΠ° ΠΎΡ Positive Technologies ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Π½Π΅ΠΉΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ ΠΎΡ 2017 Π³.
libmdbx ΠΏΡΠ΅Π΄Π»Π°Π³Π° C++ API, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈ ΠΎΡ Π΅Π½ΡΡΡΠΈΠ°ΡΡΠΈ Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½ΠΈΡ Π·Π° Rust, Haskell, Python, NodeJS, Ruby, Go ΠΈ Nim.
ΠΡΠ½ΠΎΠ²Π½ΠΈ Π½ΠΎΠ²ΠΎΠ²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° Π½ΠΎΠ²ΠΈΠ½Π° Π½Π° 11 ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ:
- C++ API ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° Π³ΠΎΡΠΎΠ² Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π°.
- ΠΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° GC Π΄Π°Π½Π½ΠΈ ΠΏΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° libmdbx Π² Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Ethereum.
- ΠΡΡΡΠ΅ΡΠ½ΠΈΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡ Π½Π° ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅. Π’ΠΎΠ²Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΡΠ°Π»ΡΠΈΠ²ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° ΠΏΠΎΠ²ΡΠ΅Π΄Π΅Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() ΠΈ mdbx_env_get_syncbytes(). ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° MDBX_SET_UPPERBOUND.
- ΠΡΠΈΡΠΊΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Ρ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠΈ C++ 11/14/17/20 ΡΠ° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°Π½ΠΈ. ΠΡΠΈΠ³ΡΡΠ΅Π½Π° Π΅ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ Π½Π°ΡΠ»Π΅Π΄Π΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ: clang ΠΎΡ 3.9, gcc ΠΎΡ 4.8, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° cdevtoolset-9 Π·Π° CentOS/RHEL 7.
- ΠΠΎΠΏΡΠ°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Π½Π° ΠΌΠ΅ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ»Π΅Π΄ ΡΡΡΠ½ΠΎ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΊΡΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° ΠΌΠ΅ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° mdbx_chk.
- ΠΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π° Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½Π° Π³ΡΠ΅ΡΠΊΠ° MDBX_PROBLEM, ΠΊΠΎΡΡΠΎ ΡΠ΅ Π²ΡΡΡΠ° ΠΏΡΠΈ ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° Π½Π°ΡΠ»Π΅Π΄Π΅Π½ΠΈ ΠΌΠ΅ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠΈ.
- ΠΠΎΡΠΈΠ³ΠΈΡΠ°Π½ΠΎ Π²ΡΡΡΠ°Π½Π΅ Π½Π° MDBX_NOTFOUND Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π½Π΅ΡΠΎΡΠ½ΠΎ ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° MDBX_GET_BOTH Π·Π°ΡΠ²ΠΊΠ°.
- ΠΠΎΠΏΡΠ°Π²Π΅Π½Π° Π΅ Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Linux ΠΏΡΠΈ Π»ΠΈΠΏΡΠ° Π½Π° Π·Π°Π³Π»Π°Π²Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ Ρ ΡΠ΄ΡΠΎΡΠΎ.
- ΠΠΎΡΠΈΠ³ΠΈΡΠ°Π½ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ ΡΠ»Π°Π³ MDBX_SHRINK_ALLOWED ΠΈ ΠΎΠΏΡΠΈΡΡΠ° MDBX_ACCEDE.
- ΠΡΠΊΠΎΠ»ΠΊΠΎ Π½Π΅Π½ΡΠΆΠ½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΠ²ΡΡΠ΄Π΅Π½ΠΈΡΡΠ° ΡΠ° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°Π½ΠΈ.
- ΠΠΎΡΠΈΠ³ΠΈΡΠ°Π½ΠΎ Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΎ Π²ΡΡΡΠ°Π½Π΅ Π½Π° MDBX_RESULT_TRUE ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ° mdbx_env_set_option().
- ΠΠ±ΡΠΎ Π±ΡΡ Π° Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 90 ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² 25 ΡΠ°ΠΉΠ»Π°, ~1300 ΡΠ΅Π΄Π° Π±ΡΡ Π° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ, ~600 Π±ΡΡ Π° ΠΈΠ·ΡΡΠΈΡΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru