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