Vydání DBMS libmdbx 0.11.7. Přesunout vývoj na GitFlic po uzamčení na GitHubu

Knihovna libmdbx 0.11.7 (MDBX) byla vydána s implementací vysoce výkonné kompaktní vestavěné databáze klíč-hodnota. Kód libmdbx je distribuován pod veřejnou licencí OpenLDAP. Podporovány jsou všechny současné operační systémy a architektury, stejně jako ruský Elbrus 2000.

Vydání je pozoruhodné migrací projektu na službu GitFlic poté, co administrace GitHubu odstranila libmdbx spolu s řadou dalších projektů 15. dubna 2022 bez jakéhokoli varování nebo vysvětlení, přičemž současně zablokovala přístup mnoha vývojářům spojeným se společnostmi, které upadly. pod sankcemi USA. Z uživatelského pohledu se všechny stránky, úložiště a forky projektu rázem proměnily na stránku „404“, bez možnosti jakékoli komunikace a zjišťování důvodů.

Bohužel se ztratila téměř všechna čísla, ve kterých bylo mnoho otázek s podrobnými odpověďmi a také spousta diskuzí. Ztráta těchto informací je jedinou objektivní škodou, kterou se správě GitHubu podařilo projektu způsobit. Částečné kopie diskusí zůstávají dostupné v archivu archive.org.

Ztráta vestavěných CI skriptů a infrastruktury (k dispozici pro OpenSource projekty zdarma) nás donutila provést revizi, sjednocení a odstranění malého technického dluhu. Nyní bylo CI obnoveno téměř ve stejném rozsahu, s výjimkou sestavení a testovacích běhů pro všechny varianty BSD a Solaris. Je výmluvné, že po akcích GitHubu nepřišla žádná vysvětlení ani upozornění, kromě připomenutí nutnosti platby a pokusů o odepsání peněz.

Od posledních zpráv o vydání libmdbx v0.11.3 stojí za zmínku kromě zotavení z akcí GitHubu následující vylepšení a opravy:

  • Přidáno řešení pro zjištěný efekt/defekt nekoherence v kombinované mezipaměti stránek a vyrovnávací paměti v jádře Linuxu. Na systémech, kde jsou mezipaměti stránek a vyrovnávací paměti skutečně sjednoceny, nemá smysl, aby jádro plýtvalo pamětí na dvě kopie dat při zápisu do již zmapovaného souboru. Proto se zapisovaná data stanou viditelnými pomocí mapování paměti před dokončením systémového volání write(), i když data ještě nebyla zapsána na disk.

    Celkově není jiné chování racionální, protože při odloženém sloučení musíte stále chytat zámky pro seznamy stránek, kopírovat data nebo upravovat PTE. Proto nevyslovené pravidlo koherence platí od roku 1989, kdy se v SRV4 objevila sjednocená mezipaměť. Hledání podivných selhání v rušných produkčních scénářích libmdbx proto vyžadovalo spoustu práce. Nejprve reprodukováním problému, poté ověřováním hypotéz a kontrolou zlepšení.

    Nyní můžeme s jistotou říci, že problém byl spolehlivě identifikován, lokalizován a spolehlivě odstraněn, a to navzdory složitosti a specifičnosti scénáře přehrávání. Fungování obtokového mechanismu bylo navíc potvrzeno jedním z vývojářů Erigonu (Ethereum), v jeho případě se na ladicím sestavení ochrana spustila jako regrese kvůli dodatečné kontrole prosazení.

    Je třeba poznamenat, že v kontextu rozšířeného používání libmdbx v pracovních projektech je zásadně důležitější zajistit spolehlivý provoz, než zjišťovat „je to chyba nebo vlastnost“ a zda se lze na takovou soudržnost spolehnout, zejména nenalezení příčin nekoherence v jádře Linuxu. Proto zde mluvíme o vyřešení problému, který by mohl ovlivnit uživatele.

  • Opravena regrese chyby EXDEV (Cross-device link) při kopírování databáze za provozu bez kompaktizace do jiného systému souborů, a to jak prostřednictvím rozhraní API, tak pomocí nástroje mdbx_copy.
  • Kris Zyp implementoval podporu pro libmdbx v Deno. Kai Wetlesen zabalil RPM pro Fedoru. David Bouyssié implementoval vazby pro Scala.
  • Opraveno zpracování hodnoty nastavené volbou MDBX_opt_rp_augment_limit při zpracování velkých transakcí ve velkých databázích. Dříve se kvůli chybě mohly provádět zbytečné akce, které někdy ovlivnily výkon v implementacích Ethereum (Erigon/Akula/Silkworm) a projektech Binance Chain.
  • Bylo opraveno mnoho chyb, včetně chyb v C++ API. Opraveno mnoho problémů se sestavováním ve vzácných a exotických konfiguracích. Kompletní seznam všech významných vylepšení je k dispozici v ChangeLog.
  • Celkem bylo provedeno 185 změn v 89 souborech, bylo přidáno ≈3300 řádků, ≈4100 bylo odstraněno. Více odstraněno většinou kvůli vyčištění již neužitečných technických souborů spojených s GitHubem a závislými službami.

Historicky je libmdbx hlubokým přepracováním LMDB DBMS a překonává jeho předchůdce, pokud jde o spolehlivost, sadu funkcí a výkon. Ve srovnání s LMDB klade libmdbx velký důraz na kvalitu kódu, stabilitu API, testování a automatické kontroly. S některými možnostmi obnovy je dodáván obslužný program pro kontrolu integrity struktury databáze.

Technologicky nabízí libmdbx ACID, striktní serializaci změn a neblokující čtení s lineárním škálováním napříč jádry CPU. Je podporována automatická kompaktifikace, automatická správa velikosti databáze a odhad dotazů na rozsah. Od roku 2016 je projekt financován společností Positive Technologies a ve svých produktech je používán od roku 2017.

libmdbx nabízí vyvinuté C++ API, stejně jako vazby podporované nadšenci na Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Zdroj: opennet.ru

Přidat komentář