ИздадСн Π΅ високопроизводитСлСн Π²Π³Ρ€Π°ΠΆΠ΄Π°Π½ систСмСн ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ 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, строга сСриализация Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅ с Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ ΠΏΠΎ ядра Π½Π° CPU. ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° сС Π°Π²Ρ‚ΠΎ-компактификация, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π‘Π”, ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° заявкитС ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ (range query estimation). ΠžΡ‚ 2016 Π³. ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ сС финансира ΠΎΡ‚ компанията Positive Technologies ΠΈ ΠΎΡ‚ 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.
  • ΠžΡ‚ΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈ са всички прСдупрСТдСния ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ с всички ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ C++ 11/14/17/20. ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½Π° Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с остарСли ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ: clang ΠΎΡ‚ вСрсия 3.9, gcc ΠΎΡ‚ вСрсия 4.8, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Ρ‡Ρ€Π΅Π· sdevtoolset-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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster