Выпуск Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ встраиваСмой Π‘Π£Π‘Π” libmdbx 0.11.3

Бостоялся выпуск Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ libmdbx 0.11.3 (MDBX) с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠΉ встраиваСмой Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… класса ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Код libmdbx распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ OpenLDAP Public License. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ всС Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ российский Π­Π»ΡŒΠ±Ρ€ΡƒΡ 2000. На ΠΊΠΎΠ½Π΅Ρ† уходящСго 2021 Π³ΠΎΠ΄Π° libmdbx ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ бэкСнд хранСния Π² Π΄Π²ΡƒΡ… самых быстрых ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ… Ethereum — Erigon ΠΈ Π½ΠΎΠ²ΠΎΠΉ «ΠΠΊΡƒΠ»Π΅», которая ΠΏΠΎ доступной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ являСтся самым Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Ethereum.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ libmdbx являСтся Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π‘Π£Π‘Π” LMDB ΠΈ прСвосходит своСго прародитСля ΠΏΠΎ надёТности, Π½Π°Π±ΠΎΡ€Ρƒ возмоТностСй ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ сравнСнии с LMDB, Π² libmdbx большоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ удСляСтся качСству ΠΊΠΎΠ΄Π°, ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ API, Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ автоматичСским ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌ. ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности структуры Π‘Π” с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ возмоТностями восстановлСния.

ВСхнологичСски 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().
  • Π‘ΡƒΠΌΠΌΠ°Ρ€Π½ΠΎ внСсСно Π±ΠΎΠ»Π΅Π΅ 90 ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² 25 Ρ„Π°ΠΉΠ»ΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ~1300 строк, ΡƒΠ΄Π°Π»Π΅Π½ΠΎ ~600.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ