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

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

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния:

  • Π’Π΅Ρ‚ΠΊΠ° 0.13.x ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° статус ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ. ΠΠ°Ρ‡Π°Π»Π°ΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π΅Ρ‚ΠΊΠΈ 0.14.x.
  • Π’ C API Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция mdbx_cursor_count_ex(), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ количСство ΠΌΡƒΠ»ΡŒΡ‚ΠΈ-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ, Ρ‚Π°ΠΊ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅, хранящСм эти значСния.
  • Π’ C++ API Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ mdbx::txn::make_broken() Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ mdbx_txn_break().
  • Π’ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ… mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ошибок, ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈ Π²Π°ΠΆΠ½Ρ‹Ρ… сообщСний ΠΎΡ‚ libmdbx.
  • ИзмСнСниС повСдСния:
    • ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ профилирования сборщика мусора (сборка с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ MDBX_ENABLE_PROFGC=ON) Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ CPU Π½Π° слияниС списков страниц, Ρ‚.Π΅. Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pnl_merge().
    • Π’ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ тСстирования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΎ ΠΈΠ· data.dups Π² data.multi.
    • Π”ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠ»ΡŽΡ‡Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ cursor_seek().
    • Если посрСдством mdbx_env_set_option(MDBX_opt_txn_dp_limit) ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ собствСнно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ выполняСтся подстройка dirty-pages-limit ΠΏΡ€ΠΈ стартС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΠΈΡˆΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, исходя ΠΈΠ· ΠΎΠ±ΡŠΡ‘ΠΌΠ° доступного ΠžΠ—Π£ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π‘Π”.
    • Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ MDBX_NOSTICKYTHREADS допускаСтся commit/abort Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈΠ· любого Ρ‚Ρ€Π΅Π΄Π°/ΠΏΠΎΡ‚ΠΎΠΊΠ°.
    • ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ запуска Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ MDBX_WRITEMAP производится Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ошибки MDBX_INCOMPATIBLE.
    • Π’ C++ API Π² конструкторах/ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, связанных с Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ Π‘Π”, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ default-значСния.
    • Π’Π½ΡƒΡ‚Ρ€ΠΈ mdbx_env_set_geometry() Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ эвристики для ΠΏΠΎΠ΄Π±ΠΎΡ€Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ Π‘Π” Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ «ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ».
  • Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ:
    • Устранён рСгрСсс Π½Π΅Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ закрытия dbi-дСскриптора, Π² Ρ‚ΠΎΠΌ числС ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ явно Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ дСскриптор послС удалСния связанной с Π½ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
    • Устранён рСгрСсс состояния Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ/dupsort курсора послС вставки Π΄Π°Π½Π½Ρ‹Ρ… Π² MDBX_APPEND-Ρ€Π΅ΠΆΠΈΠΌΠ΅.
    • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° получСния boot_id ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ LXC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.
    • Устранёна ошибка Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ запуска Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ‡ΠΈΡ‚Π°ΡŽΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² Ρ‚Π°ΠΊΠΈΡ… ситуациях возвращаСтся ошибка MDBX_EINVAL, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ поддСрТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ чтСния-записи.
    • Устранён SIGSEGV-рСгрСсс обращСния ΠΊ Π½ΡƒΠ»Π΅Π²ΠΎΠΌΡƒ адрСсу ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ-Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π±Π΅Π· использования LCK-Ρ„Π°ΠΉΠ»Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Π‘Π” Π½Π° носитСлС доступном Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru