Π‘ΠΎΡΡΠΎΡΠ»ΡΡ Π²ΡΠΏΡΡΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ libmdbx 0.11.3 (MDBX) Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠΉ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠ΄ libmdbx ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ OpenLDAP Public License. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡΡΠΈΠΉΡΠΊΠΈΠΉ ΠΠ»ΡΠ±ΡΡΡ 2000. ΠΠ° ΠΊΠΎΠ½Π΅Ρ ΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ 2021 Π³ΠΎΠ΄Π° libmdbx ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π±ΡΠΊΠ΅Π½Π΄ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π² Π΄Π²ΡΡ ΡΠ°ΠΌΡΡ Π±ΡΡΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°Ρ Ethereum β Erigon ΠΈ Π½ΠΎΠ²ΠΎΠΉ Β«ΠΠΊΡΠ»Π΅Β», ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΡΠΌ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ Ethereum.
Historice, libmdbx altum est Redesignium LMDB DBMS et suum progenitorem excedit secundum fidem, plumas et effectus. Comparatus LMDB, libmdbx multum emphasin in codice qualitatis, API stabilitatis, probatio, et inhibet automated multum ponit. Utilitas ad reprimendam integritatem structurae datorum praebetur cum quibusdam optionibus recuperandis.
Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ libmdbx ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ACID, ΡΡΡΠΎΠ³ΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π΅ ΡΡΠ΅Π½ΠΈΠ΅ Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΌ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΠ΄ΡΠ°ΠΌ Π¦ΠΠ£. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΊΠΎΠΌΠΏΠ°ΠΊΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΠ, ΠΎΡΠ΅Π½ΠΊΠ° ΠΎΠ±ΡΡΠΌΠ° Π²ΡΠ±ΠΎΡΠΎΠΊ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ (range query estimation). Π‘ 2016 Π³ΠΎΠ΄Π° ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΈΠ½Π°Π½ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Positive Technologies ΠΈ c 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.
- Π£ΡΡΡΠ°Π½Π΅Π½Ρ Π²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠ°Ρ Π‘++ 11/14/17/20. ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ: clang Π½Π°ΡΠΈΠ½Π°Ρ Ρ 3.9, gcc Π½Π°ΡΠΈΠ½Π°Ρ Ρ 4.8, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ±ΠΎΡΠΊΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Ρdevtoolset-9 Π΄Π»Ρ CentOS/RHEL 7.
- Π£ΡΡΡΠ°Π½Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° ΠΌΠ΅ΡΠ°-ΡΡΡΠ°Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΌΠ΅ΡΠ°-ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ mdbx_chk.
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ Π²ΠΎΠ·Π²ΡΠ°Ρ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ MDBX_PROBLEM ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΡ ΠΌΠ΅ΡΠ°-ΡΡΡΠ°Π½ΠΈΡ.
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ Π²ΠΎΠ·Π²ΡΠ°Ρ MDBX_NOTFOUND Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠ° MDBX_GET_BOTH.
- Π£ΡΡΡΠ°Π½Π΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π° Linux ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Ρ ΡΠ΄ΡΠΎΠΌ.
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΡΠ»Π°Π³ΠΎΠΌ MDBX_SHRINK_ALLOWED ΠΈ ΠΎΠΏΡΠΈΠ΅ΠΉ MDBX_ACCEDE.
- Π£ΡΡΡΠ°Π½Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π»ΠΈΡΠ½ΠΈΡ assert-ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ.
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΉ Π²ΠΎΠ·Π²ΡΠ°Ρ MDBX_RESULT_TRUE ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ mdbx_env_set_option().
- In summa, plus quam 90 mutationes ad 25 files factae sunt, ~1300 lineae additae, ~600 deletae sunt.
Source: opennet.ru