Vydání SGBD libmdbx 0.11.7. Přesun vývoje na GitFlic po blokaci na GitHubu

Došlo k vydání knihovny libmdbx 0.11.7 (MDBX) s realizací vysoce výkonné kompaktní vestavěné databáze typu klíč-hodnota. Kód libmdbx se šíří pod licencí OpenLDAP Public License. Podporovány jsou všechny aktuální operační systémy a architektury, stejně jako ruský Elbrus 2000.

Tento release je významný migrací projektu na službu GitFlic poté, co 15. dubna 2022 administrace GitHubu bez jakýchkoliv oznámení a vysvětlení důvodů odstranila libmdbx spolu s množstvím dalších projektů, zároveň zablokovala přístup mnoha vývojářům spojeným se společnostmi, které se dostaly pod sankce USA. Z pohledu uživatelů se všechny stránky, repozitář a forky projektu náhle proměnily na stránku '404', bez možnosti jakékoli komunikace a objasnění důvodů.

Bohužel byly ztraceny téměř všechny issues, ve kterých bylo mnoho otázek s podrobnými odpověďmi, a také nemalé množství diskusí. Ztráta těchto informací je jedinou objektivní škodou, kterou byla administrací GitHubu projektu způsobena. Částečně kopie diskusí zůstávají dostupné v archivu archive.org.

Ztráta vybudovaných CI scénářů a infrastruktury (dostupné zdarma pro OpenSource projekty) přinutila k revizi, unifikaci a odstranění menšího technického dluhu. V současnosti je CI obnoven téměř v původním rozsahu, s výjimkou sestavení a testů pro všechny varianty BSD a Solaris. Co je charakteristické, po akcích ze strany GitHubu nedošlo k žádným vysvětlením nebo oznámením, kromě připomenutí o nutnosti platby a pokusů o stržení peněz.

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

  • Byl přidán obcházení zjištěného efektu/defektu nekoherečnosti ve sloučené cache stránek a bufferů v jádře Linux. V systémech, kde je cache stránek a bufferů skutečně sloučena, nemá jádro smysl vyhazovat paměť na dvě kopie dat při zápisu do již mapovaného souboru v paměti. Proto se zapisovaná data stávají viditelnými prostřednictvím mapování v paměti až do dokončení systémového volání write(), i když data ještě nebyla zapsána na disk.

    Celkově je jiné chování neracionální, protože při odloženém sloučení stejně bude nutné získávat zámky pro seznamy stránek, kopírovat data nebo upravovat PTE. Proto neoficiální pravidlo koherence platilo od roku 1989, kdy se v SRV4 objevil unified buffer cache. Z tohoto důvodu vyžadovalo odhalení podivných chyb v zatížených scénářích provozu libmdbx velkou práci. Nejprve na reprodukci problému, poté na ověřování hypotéz a kontrole úprav.

    Nyní lze s jistotou říci, že problém byl věrohodně identifikován, lokalizován a spolehlivě odstraněn, navzdory veškeré složitosti a specifickosti scénáře reprodukce. Dodatkově byla práce mechanismu obchodu potvrzena jedním z vývojářů Erigon (Ethereum), v jeho případě se na ladicí sestavě projevilo spuštění ochrany ve formě regrese kvůli nadbytečnému assertovému ověření.

    Je třeba poznamenat, že v kontextu širokého použití libmdbx v pracovních projektech je zásadně důležitější zajistit spolehlivou práci než zjišťovat, zda je to "chyba nebo zvláštnost" a zda se na takovou koherenci dá spolehnout, obzvláště ne hledat příčiny nekoherečnosti uvnitř jádra Linux. Proto zde jde o odstranění problému, který mohl zasahovat do uživatelů.

  • Byla odstraněna regrese vzniku chyby EXDEV (Cross-device link) při horkém kopírování DB bez kompakce do jiného souborového systému, jak přes API, tak pomocí utility mdbx_copy.
  • Kris Zyp implementoval podporu libmdbx v Deno. Kai Wetlesen zabalil balíček RPM pro Fedora. David Bouyssié vytvořil vazby pro Scalu.
  • Byla opravena manipulace se hodnotou nastavenou volbou MDBX_opt_rp_augment_limit při zpracování obrovských transakcí ve velkých DB. Dříve mohla chyba způsobit zbytečné akce, což občas ovlivnilo výkon v implementacích Ethereum (Erigon/Akula/Silkworm) a projektech Binance Chain.
  • Opravena řada nedostatků, včetně v C++ API. Bylo odstraněno mnoho problémů se sestavením v raritních a exotičtějších konfiguracích. Kompletní seznam všech významných úprav je k dispozici v ChangeLog.
  • Celkově bylo provedeno 185 změn v 89 souborech, přidáno přibližně 3300 řádků, odstraněno přibližně 4100. Většina byla odstraněna zejména kvůli čištění již nepotřebných technologických souborů spojených s GitHubem a závislými službami.

Historicky je libmdbx hlubokým přerozdělením databázového systému LMDB a překonává svého předchůdce v oblasti spolehlivosti, funkcionality a výkonu. Na rozdíl od LMDB věnuje libmdbx velkou pozornost kvalitě kódu, stabilnímu API, testování a automatickým kontrolám. Dodává se nástroj pro kontrolu integrity struktury databáze s některými možnostmi obnovy.

Technologicky libmdbx nabízí ACID, přísnou serializaci změn a nezamykající čtení s lineárním škálováním na CPU jádrech. Podporováno je automatické kompaktní operování, automatické řízení velikosti databáze a odhad objemu výběrů podle intervalů (range query estimation). Od roku 2016 je projekt financován společností Positive Technologies a od roku 2017 je využíván v jejích produktech.

Pro libmdbx je k dispozici rozvinuté C++ API, a také oblíbené vazby na jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

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