Vydanie vysoko výkonného vstavaného DBMS libmdbx 0.10

Po troch mesiacoch vývoja bola vydaná libmdbx 0.10.0 (MDBX), ktorá implementovala vysokovýkonnú kompaktnú databázu kľúč-hodnota. Kód libmdbx je licencovaný v rámci verejnej licencie OpenLDAP. libmdbx je hlbokým prepracovaním LMDB DBMS a podľa vývojárov je lepší ako jeho predok v spoľahlivosti, rozsahu schopností a výkonu. Uvádza sa, že libmdbx je až o 20 % rýchlejší ako LMDB v scenároch CRUD a až o 30 % rýchlejší, ak sú interné kontroly deaktivované pri zostavovaní libmdbx na úroveň porovnateľnú s LMDB.

Libmdbx ponúka ACID, silnú serializáciu zmien a neblokované čítanie, ktoré sa lineárne škáluje naprieč jadrami CPU. V libmdbx sa veľká pozornosť venuje kvalite kódu, stabilnej prevádzke API, testovaniu a automatickým kontrolám. Podporuje automatickú kompaktifikáciu, automatickú správu veľkosti databázy, formát jednej databázy pre 32-bitové a 64-bitové zostavy a odhad dotazu na rozsah. Dodáva sa pomocný program na kontrolu integrity databázovej štruktúry s niektorými schopnosťami obnovy. Od roku 2016 je projekt financovaný spoločnosťou Positive Technologies a vo svojich produktoch sa používa od roku 2017 a sankcie uvalené vládou USA voči spoločnosti Positive Technologies nemajú žiadny badateľný vplyv.

Hlavné inovácie, vylepšenia a opravy pridané od posledného vydania:

  • K dispozícii je väzba Ruby od Mahlona E. Smitha a skúšobná verzia viazania Python od Noela Kuntzeho a boli aktualizované väzby GoLang od Alexeyho Sharova.
  • Pre režim „MDBX_WRITEMAP“, keď sa údaje databázy menia priamo v RAM, je implementované „transparentné prelievanie“ zmenených databázových stránok na disk. Teraz, po dokončení každej operácie, sú takéto stránky okamžite úplne pripravené na zápis na disk a jadro OS môže nezávisle vyprázdniť zmenené stránky na disk a vykonanie transakcie nebude vyžadovať ich úpravu. Výsledkom je, že v rušných scenároch s nedostatočnou pamäťou RAM sa môže objem operácií na disku znížiť až 2-krát.
  • Implementované vyhadzovanie dlho nepoužívaných tieňových kópií upravených stránok s preferenciou vyhadzovania stránok s veľkými/dlhými hodnotami, ktoré sa v drvivej väčšine scenárov upravujú len raz za transakciu. Výsledkom je znížená disková prevádzka a zlepšený výkon v scenároch s veľmi veľkými transakciami.
  • Implementovaný „inteligentný“ režim na rozdelenie strán pri vkladaní kľúčov. Teraz pri vkladaní zoradených sekvencií sa strany automaticky úplne vyplnia a v ostatných prípadoch je strom optimálnejšie vyvážený. Výsledkom je, že v priemere sa stránky databázy plnia optimálnejšie a B-strom je vyváženejší, čo má pozitívny vplyv na výkon.
  • Pribudla štatistika operácií so stránkami, ktorá umožňuje presne odhadnúť náklady na úpravu operácií s databázou.
  • Bolo opravených viac ako tucet chýb a chýb, vrátane: problémov s vytváraním pomocou MinGW, používaním `std::filesystem::path` v iOS <= 13.0, vytváraním zameraným na staršie verzie Windowsu atď.
  • Celkovo bolo vykonaných viac ako 200 zmien v 66 súboroch, bolo pridaných ~6500 riadkov, ~4500 bolo odstránených.

Samostatne by som chcel poznamenať výber projektu Turbo-Geth (turbo vidlica Go-Ethereum) libmdbx ako nového úložného backendu a tiež poďakovať projektovému tímu (najmä Alexey Sharov, Artyom Vorotnikov a Alexey Akhunov) za ich skvelá pomoc pri testovaní v extrémnych scenároch použitia. Predovšetkým bola objavená a odstránená chyba v ovládaní čítania/ukladania do vyrovnávacej pamäte, čo viedlo k zníženiu výkonu v ťažko reprodukovateľných scenároch s veľkými databázami.

Zdroj: opennet.ru

Pridať komentár