Vydání vysoce výkonného vestavěného DBMS libmdbx 0.10

Po třech měsících vývoje byla vydána libmdbx 0.10.0 (MDBX), která implementuje vysoce výkonnou, kompaktní vestavěnou databázi klíč-hodnota. Kód libmdbx je licencován pod OpenLDAP Public License. libmdbx je hlubokým přepracováním LMDB DBMS a podle vývojářů je lepší než jeho předek ve spolehlivosti, rozsahu schopností a výkonu. Uvádí se, že libmdbx je až o 20 % rychlejší než LMDB ve scénářích CRUD a až o 30 % rychlejší, pokud jsou interní kontroly deaktivovány při sestavování libmdbx na úroveň srovnatelnou s LMDB.

Libmdbx nabízí ACID, silnou serializaci změn a neblokující čtení, která se lineárně škálují napříč jádry CPU. V libmdbx je velká pozornost věnována kvalitě kódu, stabilnímu provozu API, testování a automatickým kontrolám. Podporuje automatickou kompaktizaci, automatickou správu velikosti databáze, formát jedné databáze pro 32bitové a 64bitové sestavy a odhad dotazu na rozsah. Je dodáván obslužný program pro kontrolu integrity struktury databáze s některými možnostmi obnovy. Od roku 2016 je projekt financován společností Positive Technologies a ve svých produktech je používán od roku 2017 a sankce uvalené vládou USA proti společnosti Positive Technologies nemají žádný znatelný dopad.

Hlavní inovace, vylepšení a opravy přidané od posledního vydání:

  • K dispozici je vazba Ruby od Mahlona E. Smithe a zkušební verze vazeb Python od Noela Kuntzeho a byly aktualizovány vazby GoLang od Alexey Sharova.
  • Pro režim „MDBX_WRITEMAP“, kdy se data databáze mění přímo v paměti RAM, je implementováno „transparentní přelití“ změněných databázových stránek na disk. Nyní, po dokončení každé operace, jsou takové stránky okamžitě zcela připraveny k zápisu na disk a jádro OS může změněné stránky nezávisle vyprázdnit na disk a provedení transakce nebude vyžadovat jejich úpravu. Výsledkem je, že v zaneprázdněných scénářích s nedostatečnou pamětí RAM lze objem diskových operací snížit až 2krát.
  • Implementováno vyřazení dlouho nepoužívaných stínových kopií upravených stránek s upřednostněním vyřazení stránek s velkými/dlouhými hodnotami, které jsou v naprosté většině scénářů upraveny pouze jednou za transakci. Výsledkem je snížený provoz na disku a zlepšený výkon ve scénářích s velmi velkými transakcemi.
  • Implementován „chytrý“ režim pro rozdělení stránek při vkládání klíčů. Nyní se při vkládání uspořádaných sekvencí stránky automaticky zcela zaplní a v ostatních případech je strom optimálněji vyvážený. Díky tomu se v průměru optimálněji zaplňují databázové stránky a B-strom je vyváženější, což má pozitivní vliv na výkon.
  • Byla přidána statistika operací se stránkami, která umožňuje přesně odhadnout náklady na úpravu operací s databází.
  • Bylo opraveno více než tucet chyb a chyb, včetně: problémů s vytvářením pomocí MinGW, používáním `std::filesystem::path` v iOS <= 13.0, vytvářením zaměřeným na starší verze Windows atd.
  • Celkem bylo provedeno více než 200 změn v 66 souborech, bylo přidáno ~6500 řádků, ~4500 bylo odstraněno.

Samostatně bych rád poznamenal výběr projektu Turbo-Geth (turbo vidlice Go-Ethereum) libmdbx jako nového backendu úložiště a také bych poděkoval projektovému týmu (zejména Alexey Sharovovi, Artyomovi Vorotnikovovi a Alexey Akhunovovi) za jejich skvělá pomoc při testování v extrémních scénářích použití. Zejména byla objevena a odstraněna závada v řízení předčítání/ukládání do mezipaměti, která vedla ke snížení výkonu v obtížně reprodukovatelných scénářích s velkými databázemi.

Zdroj: opennet.ru

Přidat komentář