Бібліятэка 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