Пасля пяці гадоў распрацоўкі апублікаваны другі кандыдат у рэлізы libmdbx 1.0

даступны для тэсціравання другі кандыдат у рэлізы бібліятэкі libmdbx з рэалізацыяй высокапрадукцыйнай, кампактнай убудаванай базай дадзеных класа ключ-значэнне. Бягучая версія (0.5) з'яўляецца тэхнічным рэлізам, адзначае завяршэнне якіх-небудзь дапрацовак і пераход да фазы публічнага фінальнага тэсціравання і стабілізацыі, з наступным фарміраваннем першага паўнацэннага рэлізу бібліятэкі. Код libmdbx распаўсюджваецца пад ліцэнзіяй OpenLDAP Public License.

Бібліятэка MDBX з'яўляецца істотна перапрацаваным адгалінаваннем ад LMDB - транзакцыйнай ўбудаванай СКБД класа «ключ-значэнне» на аснове дрэва B+ без папераджальнай часопісізацыі, якая дазваляе шматструменным працэсам канкурэнтна і эфектыўна працаваць з лакальна-падзяляльнай (не сеткавай) БД. У сваю чаргу MDBX хутчэй і надзейней LMDB, і пры гэтым захоўвае ўсе ключавыя магчымасці свайго прабацькі, такія як ACID і неблакавальнае чытанне з лінейным маштабаваннем па ядрах CPU.

Найважнейшыя адрозненні MDBX, адносна LMDB:

  • Прынцыпова больш увагі надаецца якасці кода, тэсціраванню і аўтаматычным праверкам.
  • Істотна больш кантролю падчас працы, пачынальна ад праверкі параметраў, да ўнутранага аўдыту структур базы дадзеных.
  • Аўта-кампактыфікацыя і аўтаматычнае кіраванне памерам БД.
  • Адзіны фармат БД для 32-бітных і 64-бітных зборак.
  • Ацэнка аб'ёму выбарак па дыяпазонах (range query estimation).
  • Падтрымка ключоў удвая большай бліны і выбіраемы карыстачом памер старонкі БД.

Выпушчаны кандыдат у рэлізы libmdbx з'яўляецца вынікам прынятага ў жніўні 2019 года рашэння аб падзеле праектаў MDBX і MithrilDB. Пры гэтым у libmdbx было вырашана ўхіліць (рацыянальны) максімум тэхнічнага абавязку і стабілізаваць бібліятэку. Па факце ў абазначаным напрамку зроблена ў 2-3 разы больш, чым ацэньвалася і планавалася зыходна:

  • Рэалізаваная падтрымка macOS і платформаў "другога эшалона": FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Падтрымка AIX і HP-UX можа быць дададзена пры неабходнасці.
  • Праведзена санацыя кода пры дапамозе Undefined Behavior Sanitizer і Address Sanitizer, ухілены ўсе папярэджанні пры зборцы з "-Wpedantic", усе папярэджанні Coverity Static Analyzer і г.д.
  • Актуалізацыя апісанні API.
  • Зліццё (амальгамацыя) зыходнага кода для зручнасці ўбудавання.
  • Падтрымка CMake.
  • Падтрымка ўкладзеных транзакцый.
  • Выкарыстанне bootid для вызначэння факту перазагрузкі АС (бруднага прыпынку БД).
  • Скразны падлік абноўленых/старых старонак і пашыраная інфармацыя аб транзакцыях.
  • Опцыя MDBX_ACCEDE для падлучэння да ўжо адчыненай БД у сумяшчальным рэжыме.
  • Выкарыстанне OFD-блакіровак пры іх даступнасці.
  • Гарачае рэзервовае капіраванне ў pipe.
  • Спецыялізаваны аптымізаваны алгарытм унутранага сартавання (да 2-3 раз хутчэй "qsort()" і да 30% хутчэй "std::sort()").
  • Павялічана максімальная даўжыня ключа.
  • Аўтаматычнае кіраванне read ahead (стратэгіяй кэшавання файла БД у памяці).
  • Больш агрэсіўная і хуткая аўта-кампактыфікацыя.
  • Больш аптымальная стратэгія зліцця старонак B+ дрэва.
  • Кантроль нелакальных файлавых сістэм (NFS, Samba і да т.п.) для прадухілення пашкоджанні БД пры няправільным выкарыстанні.
  • Пашыраны набор тэстаў.

Распрацоўка "наступнай" версіі libmdbx будзе працягнута ў рамках асобнага праекта MithrilDB, у той час як вектар распрацоўкі "бягучай" версіі MDBX накіраваны на замарозку набору магчымасцяў і стабілізацыю. Такое рашэнне прынятае па трох прычынах:

  • Поўная несумяшчальнасць: для рэалізацыі ўсіх запланаваных магчымасцяў у MithrilDB патрабуецца іншы (несумяшчальны) фармат файлаў БД і іншае (несумяшчальнае) API.
  • Новы зыходны код: для зыходнага кода MithrilDB забяспечана ліцэнзійная незалежнасць ад LMDB, а сам праект плануецца апублікаваць пад іншай ліцэнзіяй (ухваленай АБО ЯКСА ліцэнзіяй Apache 2.0, а не OpenLDAP Public License).
  • Падзел дазваляе пазбегнуць патэнцыйную блытаніну, унесці больш вызначанасці і забяспечыць незалежнасць шляху развіцця праектаў.

MithrilDB як і MDBX, таксама засноўваецца на дрэве B+ і таксама будзе адрозняцца лімітава высокай прадукцыйнасцю, пры гэтым ухіляючы шэраг прынцыповых недахопаў MDBX і LMDB. У прыватнасці, будзе ліквідаваная праблема "доўгіх чытанняў", якая праяўляецца як "распуханне" БД з-за таго, што перапрацоўка смецця блакуецца доўгім чытаюць транзакцыямі. Сярод новых магчымасцяў MithrilDB варта адзначыць:

  • Падтрымка размяшчэння БД на некалькіх разнастайных носьбітах: HDD, SSD і энерганезалежнай памяці.
  • Аптымальныя стратэгіі для "каштоўных" і "малацэнных", для "гарачых", "цёплых" і "халодных" дадзеных.
  • Выкарыстанне Merkle tree для кантролю цэласнасці БД.
  • Апцыянальнае выкарыстанне WAL і істотна больш высокая прадукцыйна ў сцэнарах з інтэнсіўным запісам і гарантыямі на цэласнасць дадзеных.
  • Гультаяватая даганяючая фіксацыя дадзеных на дысках.

Крыніца: opennet.ru

Дадаць каментар