ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libmdbx 0.13.2 (MDBX) Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½Π° Π²Π³ΡΠ°Π΄Π΅Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΊΠ»Π°Ρ ΠΊΠ»ΡΡ-ΡΡΠΎΠΉΠ½ΠΎΡΡ. ΠΠΎΠ΄ΡΡ Π½Π° libmdbx ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ Apache 2.0. ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π°ΠΊΡΡΠ°Π»Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΡΡΠΊΠΈΡ ΠΠ»Π±ΡΡΡ 2000. ΠΠ° libmdbx Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ ΡΠ°Π·Π²ΠΈΡ API Π·Π° C++, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈ ΠΎΡ Π΅Π½ΡΡΡΠΈΠ°ΡΡΠΈ Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ Π΅Π·ΠΈΡΠΈ ΠΊΠ°ΡΠΎ Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ libmdbx Π΅ Π΄ΡΠ»Π±ΠΎΠΊΠ° ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π‘Π£ΠΠ LMDB ΠΈ ΠΏΡΠ΅Π²ΡΠ·Ρ ΠΎΠΆΠ΄Π° ΡΠ²ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½ΠΈΠΊ ΠΏΠΎ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡ, Π½Π°Π±ΠΎΡ ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ. Π ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ LMDB, Π² libmdbx ΡΠ΅ ΠΎΠ±ΡΡΡΠ° Π³ΠΎΠ»ΡΠΌΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ΄Π°, ΡΡΠ°Π±ΠΈΠ»Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π° API-ΡΠΎ, ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. ΠΠΎΡΡΠ°Π²Ρ ΡΠ΅ ΡΡΠΈΠ»ΠΈΡΠ° Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ΅Π»ΠΎΡΡΡΠ° Π½Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΠ Ρ Π½ΡΠΊΠΎΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅. Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ½ΠΎ libmdbx ΠΏΡΠ΅Π΄Π»Π°Π³Π° ACID, ΡΡΡΠΎΠ³Π° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΎ ΡΠ΅ΡΠ΅Π½Π΅ Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΡΠ΄ΡΠ° Π½Π° Π¦ΠΠ£. ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΠ, ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΠΈΠ·Π±ΠΎΡΠΈΡΠ΅ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ (range query estimation).
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ:
- Π£ΡΠΊΠΎΡΠ΅Π½ΠΎ Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° GC ΠΏΡΠΈ Π²ΡΡΡΠ°Π½Π΅/ΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΡΠΏΠΈΡΡΡΠΈ ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΠΈ Π² ΡΠ»ΠΎΠΆΠ½ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ. ΠΡΠ΅ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ Π΅ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΎ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈΡ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΡΠ° ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°. Π’ΠΎΠ²Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΡΡ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° (Π½Π°ΠΌΠ°Π»ΠΈ Π±ΡΠΎΡ Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈΡΠ΅ ΠΎΠΏΠΈΡΠΈ) ΠΈ ΠΎΡΡΡΡΠ°Π½ΠΈ Π΄Π΅ΡΠ΅ΠΊΡ, Π²ΠΎΠ΄Π΅Ρ Π΄ΠΎ βΠ·Π°ΡΠΈΠΊΠ»ΡΠ½Π΅β ΠΏΡΠΈ ΡΠΈΠΊΡΠ°ΡΠΈΡ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ (Ρ Π²ΡΡΡΠ°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠ° MDBX_PROBLEM) Π² ΡΠ΅Π΄ΠΊΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ.
- Π ΡΠ±ΠΎΡΡΡΠ½ΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ CMake Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΡΠ°Π½Π΄Π°ΡΡ C23.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° T-ΠΌΠ°ΠΊΡΠΎΡΠΈ Π·Π° ΠΏΠ°ΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ char/wchar_t.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ΡΠΎ Π½Π° Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΏΠΈΡΠ΅ΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π² C++ API.
- ΠΠ·Π²ΡΡΡΠ΅Π½ Π΅ ΠΏΡΠ΅Ρ ΠΎΠ΄ ΠΊΡΠΌ Π²ΡΠΎΡΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π·Π° ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ½ΠΎ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ (βSemantic Versioning 2β) ΠΈ Π΅ ΠΎΡΠΈΠ³ΡΡΠ΅Π½ Π΅ΠΊΡΠΏΠΎΡΡ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²Π΅ΡΡΠΈΡΡΠ° Π² VERSION.json.
- ΠΠ° Π²ΡΠ·ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ Π½Π° ΡΠ±ΠΎΡΠΊΠΈΡΠ΅ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° SOURCE_DATE_EPOCH. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° MDBX_BUILD_TIMESTAMP Π΅ Π·Π°ΠΏΠ°Π·Π΅Π½Π° ΠΈ ΡΠ°Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΠΈΠΌΠ° ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ±ΠΎΡΠΊΠ°ΡΠ° libmdbx ΡΡΠ΅Π· ΠΎΠΏΡΠΈΡ MDBX_BUILD_METADATA. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π·Π°Π΄Π°Π΄Π΅Π½Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ Π²Π³ΡΠ°ΠΆΠ΄Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΊΠ°ΡΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡ mdbx_build.metadata, Π° Π² Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ ΠΏΡΠΈ ΡΠΎΡΠΌΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈ Π΄Ρ.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, Π²ΡΡΡΠ°Π½ΠΈ ΠΎΡ API. Π‘Π΅Π³Π° Π·Π° ΡΠΎΠ²Π° Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ Π½ΠΈΠ²ΠΎ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ MDBX_LOG_DEBUG (Π·Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° MDBX_NOTFOUND) ΠΈΠ»ΠΈ MDBX_LOG_TRACE (Π·Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π³ΡΠ΅ΡΠΊΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ MDBX_RESULT_TRUE).
- ΠΡΠΎΠΌΡΠ½Π° Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ:
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΌΠ΅ΡΠΎΠ΄ mdbx::cursor::get_multiple_samelength() ΠΈ Π΅ ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ mdbx::txn::put_multiple_samelength().
- ΠΠ° Π΅Π΄Π½ΠΎΡΠΎΠ΄Π½ΠΎΡΡ Π½Π° C++ API ΠΏΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ MDBX_GET_MULTIPLE ΡΠ΅Π³Π° ΡΡΡΠΎ ΡΠ΅ Π²ΡΡΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ°ΠΌΠΈΡ ΠΊΠ»ΡΡ.
- ΠΠ° ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ mdbx::env::geometry Π±Π°Π·ΠΎΠ²ΠΈΡΡ ΡΠΈΠΏ Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ ΠΎΡ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ² size_t Π½Π° Π·Π½Π°ΠΊΠΎΠ² intptr_t.
- ΠΠ·Π±ΠΎΡΡΡ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ntdll Π²ΠΌΠ΅ΡΡΠΎ CRT ΡΠ΅Π³Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΡΠ²Π½ΠΎ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° C++ API.
- ΠΡΠΈΠ³ΡΡΠ΅Π½ΠΎ Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° ΠΎΡΠΌΠ΅Π½Π΅Π½ΠΈ/ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΈ ΡΠ΅ΡΡΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½ΠΈ Π² mdbx_txn_commit(). Π‘ΠΏΠΎΡΠ°Π·ΡΠΌΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° API ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΠ°ΠΊΠΈΠ²Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Ρ ΡΡΠ΅Π· mdbx_txn_abort(), ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡΡΠ° mdbx_txn_commit() Π²ΡΡΡΠ° Π³ΡΠ΅ΡΠΊΠ° Π² ΡΠ΅Π·ΠΈ ΡΠ»ΡΡΠ°ΠΈ, Π±Π΅Π· Π΄Π° ΡΠ½ΠΈΡΠΎΠΆΠ°Π²Π° ΡΠ°ΠΌΠΈΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. Π’ΠΎΠ²Π° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΈΠ·ΡΠΈΡΠ°Π½ΠΈΡ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΏΠΎΡΠ°Π΄ΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°, ΠΊΠΎΠ΅ΡΠΎ Π½Π°Π»ΠΎΠΆΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ°ΠΊΡΠΎΡΠ° __deprecated_enum, Π°ΠΊΠΎ Π΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½.
- ΠΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΡΡΠ΅Π· CMake, ΠΈΠ·Π±ΠΎΡΡΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡ Π½Π° Π΅Π·ΠΈΠΊΠ° C Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Ρ ΠΎΠ³Π»Π΅Π΄ Π½Π° CMAKE_C_STANDARD.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
