Выпуск встраиваСмой Π‘Π£Π‘Π” libmdbx 0.13.2

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ выпуск Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ 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