Vydání vysoce výkonné vestavěné databáze libmdbx 0.10

Po třech měsících vývoje byla vydána knihovna libmdbx 0.10.0 (MDBX) s implementací vysoce výkonné, kompaktní vestavěné databáze typu klíč-hodnota. Kód libmdbx je distribuován pod licencí OpenLDAP Public License. libmdbx je hlubokou přepracovanou verzí databázového systému LMDB a podle tvrzení vývojářů překonává svého předchůdce v oblasti spolehlivosti, funkčnosti a výkonu. Tvrdí se, že libmdbx je až o 20 % rychlejší než LMDB v scénářích CRUD a až o 30 % rychlejší, pokud je při sestavení libmdbx vypnuta interní kontrola na úroveň srovnatelnou s LMDB.

Libmdbx nabízí ACID, přísnou serializaci změn a neblokující čtení s lineárním škálováním na jádra CPU. V libmdbx je velká pozornost věnována kvalitě kódu, stabilnímu fungování API, testování a automatickým kontrolám. Je podporována automatická kompaktifikace, automatické řízení velikosti databáze, jednotný formát databáze pro 32bitové a 64bitové sestavení, a odhad objemu výběrů podle rozsahů (range query estimation). Dodává se nástroj 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 od roku 2017 je používán v jejích produktech, přičemž sankce uložené vládou USA proti společnosti Positive Technologies nemají žádný výrazný vliv.

Hlavní novinky, úpravy a opravy přidané po posledním vydání:

  • Jsou k dispozici vazby pro Ruby od Mahlona E. Smitha a zkušební verze vazeb pro Python od Noela Kuntze. Byly aktualizovány vazby pro GoLang od Alexeje Šarova.
  • Pro režim „MDBX_WRITEMAP“, kdy jsou data databáze měněna přímo v RAM, byla implementována „průhledná prokluz“ na disk upravených stránek databáze. Nyní, po dokončení každé operace, jsou tyto stránky ihned plně připraveny k zápisu na disk a jádro OS může samostatně zápis upravených stránek na disk provádět, přičemž potvrzení transakce již nebude vyžadovat jejich modifikaci. V důsledku toho, při zatížených scénářích se nedostatkem RAM, může objem diskových operací klesnout až o 2x.
  • Bylo realizováno odstranění dlouho nepoužívaných stínových kopií změněných stránek, s preferencí pro odstranění stránek s dlouhými hodnotami, které se ve velké většině scénářů mění pouze jednou za transakci. To vede k menšímu objemu výměny s diskem a zvyšuje výkon ve scénářích s velmi velkými transakcemi.
  • Byl zaveden „inteligentní“ režim dělení stránek při vkládání klíčů. Nyní je při vkládání uspořádaných sekvencí automaticky zajištěno úplné vyplnění stránek, a v ostatních případech je zajištěna optimálnější vyváženost stromu. V důsledku toho jsou strany databáze průměrně lépe vyplněny a B-strom je vyváženější, což pozitivně ovlivňuje výkon.
  • Byla přidána statistika operací se stránkami, což umožňuje přesně posoudit náklady na modifikační operace s databází.
  • Bylo odstraněno více než deset nedostatků a chyb, včetně: vyřešeny problémy se sestavením pomocí MinGW, použití `std::filesystem::path` na iOS <= 13.0, sestavení s cílením na starší verze Windows atd.
  • Celkově bylo provedeno více než 200 změn ve 66 souborech, přidáno přibližně 6500 řádků, odstraněno přibližně 4500.

Zvláštní pozornost si zaslouží volba projektu Turbo-Geth (turbo-fork Go-Ethereum) libmdbx jako nového backendu pro úložiště a také poděkování týmu projektu (zejména Alexeji Šarovovi, Arťomovi Vorotnikovovi a Alexeji Akhunovovi) za významnou pomoc při testování v extrémních scénářích použití. Zejména byl takto objeven a odstraněn defect v řízení předběžného čtení/kastování, který vedl k degradaci výkonu v obtížně reprodukovatelných scénářích s velkými databázemi.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster