Другі кандыдат у рэлізы libmdbx v1.0 пасля пяці гадоў распрацоўкі.

Бібліятэка libmdbx з'яўляецца істотна перапрацаваным нашчадкам LMDB - лімітава высокапрадукцыйнай, кампактнай убудаванай базай дадзеных класа ключ-значэнне.
Бягучая версія v0.5 з'яўляецца тэхнічным рэлізам, адзначае завяршэнне якіх-небудзь дапрацовак і пераход да фазы публічнага фінальнага тэсціравання і стабілізацыі, з наступным фармаваннем першага паўнавартаснага рэлізу бібліятэкі.

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

Апісанне адрозненняў і ўдасканаленняў libmdbx адносна LMDB заслугоўвае асобнага артыкула (плануецца публікацыі на "Хабры" і "Medium"). Тутака ж дарэчы згадаць найважнейшыя і прыкметныя:

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

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

  • Рэалізаваная падтрымка Mac OS і платформаў "другога эшалона": 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 Foundation).
  • Падзел дазваляе пазбегнуць патэнцыйную блытаніну, унесці больш дакладнасці і забяспечыць незалежнасць шляху развіцця праектаў.

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

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

Крыніца: linux.org.ru

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