ΠžΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ DBMS libmdbx 0.11.3 со високи пСрформанси

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

Π˜ΡΡ‚ΠΎΡ€ΠΈΡΠΊΠΈ Π³Π»Π΅Π΄Π°Π½ΠΎ, libmdbx Π΅ Π΄Π»Π°Π±ΠΎΠΊΠ° ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° LMDB DBMS ΠΈ Π΅ супСриорСн Π²ΠΎ однос Π½Π° Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΎΠΊ ΠΏΠΎ довСрливост, сСт Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ пСрформанси. Π’ΠΎ спорСдба со 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€