Druhý kandidát na vydání libmdbx v1.0 po pěti letech vývoje.

knihovna libmdbx je výrazně přepracovaný potomek LMDB - extrémně výkonná, kompaktní embedded databáze klíč-hodnota.
Aktuální verze v0.5 je technické vydání, znamená dokončení jakýchkoli vylepšení a přechod do fáze veřejného finálního testování a stabilizace s následným vytvořením prvního plného vydání knihovny.

LMDB je poměrně dobře známý transakční embedded klíč-hodnota DBMS založený na strom B+ без proaktivní protokolování, který umožňuje hejnu vícevláknových procesů pracovat konkurenceschopně a extrémně efektivně s lokálně sdílenou (nikoli síťovou) databází. MDBX je zase rychlejší a spolehlivější než LMDB, zatímco libmdbx si zachovává všechny klíčové vlastnosti svého předka, jako např. ACID a neblokující čtení s lineárním škálováním napříč jádry CPU a také přidává několik nových.

Popis rozdílů a vylepšení libmdbx ve srovnání s LMDB si zaslouží samostatný článek (plánuje se publikovat na Habré a Medium). Zde je vhodné zmínit to nejdůležitější a nejpozoruhodnější:

  • Větší pozornost je v zásadě věnována kvalitě kódu, testování a automatickým kontrolám.
  • Výrazně větší kontrola během provozu, od kontroly parametrů až po interní audit databázových struktur.
  • Automatická kompaktifikace a automatická správa velikosti databáze.
  • Jediný databázový formát pro 32bitové a 64bitové sestavy.
  • Odhad velikosti vzorku podle rozsahů (odhad dotazu na rozsah).
  • Podpora kláves dvakrát větších než palačinky a uživatelsky volitelná velikost stránky databáze.

Kandidát na vydání libmdbx je výsledkem rozhodnutí (viz níže) oddělit projekty MDBX a MithrilDB v srpnu 2019. Zároveň se libmdbx rozhodl odstranit (racionální) maximální technický dluh a stabilizovat knihovnu. Ve skutečnosti se v určeném směru udělalo 2-3krát více, než se původně odhadovalo a plánovalo:

  • Byla implementována podpora pro Mac OS a platformy druhé úrovně: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Podle potřeby lze přidat podporu AIX a HP-UX.
  • Kód byl dezinfikován pomocí Undefined Behavior Sanitizer a Address Sanitizer, všechna varování při sestavování s -Wpedantic, všechna varování Coverity Static Analyzer atd. byla odstraněna.
  • Aktualizace Popisy API.
  • Sloučení zdrojového kódu pro snadné vkládání.
  • CMake podporu.
  • Podpora pro vnořené transakce.
  • Použití bootid k určení, zda se OS restartoval (špinavé zastavení databáze).
  • Úplné počítání aktualizovaných/starých stránek a rozšířené informace o transakcích.
  • Možnost MDBX_ACCEDE pro připojení k již otevřené databázi v kompatibilním režimu.
  • Použití OFD blokování když bude dostupný.
  • Horká záloha v potrubí.
  • Specializovaný optimalizovaný interní třídicí algoritmus (až 2-3krát rychlejší než qsort() a až 30 % rychlejší než std::sort()).
  • Maximální délka klíče byla zvýšena.
  • Automatické řízení předčítání (strategie ukládání databázových souborů do mezipaměti).
  • Agresivnější a rychlejší automatické zhutňování.
  • Optimálnější strategie pro slučování stránek stromu B+.
  • Kontrola nelokálních souborových systémů (NFS, Samba atd.), aby se zabránilo poškození databáze při nesprávném použití.
  • Sada testů byla rozšířena.

Vývoj "další" verze libmdbx bude pokračovat jako samostatný projekt MithrilDB, zatímco vývojový vektor „aktuální“ verze MDBX je zaměřen na zmrazení sady funkcí a její stabilizaci. Toto rozhodnutí bylo učiněno ze tří důvodů:

  • Zcela nekompatibilní: MithrilDB vyžaduje jiný (nekompatibilní) formát databázového souboru a jiné (nekompatibilní) API pro implementaci všech plánovaných funkcí.
  • Nový zdrojový kód: Zdrojový kód MithrilDB byl licencován nezávisle na LMDB a samotný projekt má být publikován pod jinou licencí (schválenou OSI licence Apache 2.0A ne Nadace OpenLDAP).
  • Oddělení zabraňuje potenciálnímu zmatku, poskytuje větší jistotu a zajišťuje, že projekty budou mít nezávislou cestu vpřed.

MithrilDB, stejně jako MDBX, je také založen na strom B+ a bude se také vyznačovat extrémně vysokým výkonem, přičemž eliminuje řadu zásadních nevýhod MDBX a LMDB. Odpadne zejména problém „dlouhého čtení“, který se projevuje jako „nabobtnání“ databáze v důsledku toho, že zpracování odpadků je blokováno dlouhými transakcemi čtení. Mezi nové funkce MithrilDB patří:

  • podpora umístění databáze na několik heterogenních médií: HDD, SSD a energeticky nezávislá paměť.
  • optimální strategie pro „cenná“ a „nízká hodnota“, pro „horká“, „teplá“ a „studená“ data.
  • pomocí Merkleho stromu ke sledování integrity databáze.
  • volitelné použití WAL a výrazně vyšší výkon ve scénářích náročných na zápis a záruky integrity dat.
  • Lazy catch-up fixace dat na discích.

Zdroj: linux.org.ru

Přidat komentář