Knihovna libmdbx je výrazně přepracovaným potomkem LMDB — vysoce výkonné, kompaktní embedded databáze typu klíč-hodnota.
Aktuální verze v0.5 je technickým vydáním, které označuje dokončení jakýchkoli úprav 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 plnohodnotného vydání knihovny.
LMDB je dostatečně známou transakční embedded DBMS typu „klíč-hodnota“ založenou na B+ stromu bez v předstihu zapisující žurnální systém, která umožňuje stovkám vícerozměrných procesů konkurenčně a vysoce efektivně pracovat s lokálně sdílenou (ne síťovou) DB. Samotný MDBX je rychlejší a spolehlivější než LMDB, přičemž libmdbx zachovává všechny klíčové možnosti svého předchůdce, jako jsou ACID a neblokující čtení s lineárním škálováním podle jader CPU, a také přidává několik nových.
Popis rozdílů a vylepšení libmdbx vůči LMDB si zaslouží samostatný článek (plánované publikace na „Habré“ a „Medium“). Zde je vhodné zmínit ty nejdůležitější a nejvýraznější:
- Výrazně více pozornosti je věnováno kvalitě kódu, testování a automatickému ověřování.
- Podstatně více kontroly během práce, počínaje kontrolou parametrů, konče interním auditem struktur databáze.
- Automatická kompakce a automatické řízení velikosti databáze.
- Jednotný formát databáze pro 32-bitové a 64-bitové verze.
- Odhad objemu výběrů podle rozsahu (range query estimation).
- Podpora klíčů dvojnásobně větších a uživatelsky volitelné velikosti stránky DB.
Vydaný release candidate libmdbx je výsledkem rozhodnutí (viz dále) o rozdělení projektů MDBX a MithrilDB v srpnu 2019. Přitom bylo rozhodnuto odstranit (racionální) maximum technického dluhu a stabilizovat knihovnu. V praxi bylo v tomto směru uděláno 2-3krát více, než bylo původně odhadováno a plánováno:
- Byla implementována podpora pro Mac OS a platformy „druhého sledu“: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Podpora AIX a HP-UX může být přidána podle potřeby.
- Byla provedena sanace kódu pomocí Undefined Behavior Sanitizer a Address Sanitizer, odstraněna všechna varování při sestavení s -Wpedantic, všechna varování Coverity Static Analyzer atd.
- Aktualizace popisu API.
- Amalgamační zdrojový kód pro snadné vložení.
- Podpora CMake.
- Podpora vnořených transakcí.
- Použití bootid pro určení skutečnosti restartu OS (špinavého zastavení DB).
- Celkový přehled 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 zámky v případě jejich dostupnosti.
- Horké zálohování pomocí pipe.
- Specializovaný optimalizovaný algoritmus vnitřního třídění (až 2-3x rychlejší než qsort() a až o 30 % rychlejší než std::sort()).
- Zvýšena maximální délka klíče.
- Automatické řízení načítání (strategie ukládání do vyrovnávací paměti databázového souboru v paměti).
- Agresivnější a rychlejší automatická kompakce.
- Optimálnější strategie sloučení stránek B+ stromu.
- Kontrola ne-lokálních souborových systémů (NFS, Samba atd.) pro prevenci poškození databáze při nesprávném používání.
- Rozšířená sada testů.
Vývoj 'další' verze libmdbx bude pokračovat v rámci samostatného projektu MithrilDB, zatímco vývoj 'aktuální' verze MDBX je zaměřen na zafixování sady funkcí a stabilizaci. Toto rozhodnutí bylo přijato ze tří důvodů:
- Úplná nekompatibilita: pro realizaci všech plánovaných funkcí v MithrilDB je vyžadován jiný (nekompatibilní) formát databázových souborů a jiné (nekompatibilní) API.
- Nový zdrojový kód: pro zdrojový kód MithrilDB je zajištěna licenční nezávislost na LMDB a samotný projekt bude plánován k publikaci pod jinou licencí (schválenou OSI licencí Apache 2.0, a ne OpenLDAP Foundation).
- Rozdělení umožňuje vyhnout se potenciálním záměnám, poskytnout více jasnosti a zajistit nezávislost vývoje projektů.
MithrilDB, stejně jako MDBX, se také zakládá na B+ stromu a také se bude vyznačovat maximální výkonem, přičemž odstraní řadu zásadních nevýhod MDBX a LMDB. Zejména bude odstraněn problém 'dlouhých čtení', který se projevuje jako 'nafouknutí' databáze v důsledku toho, že zpracování odpadu je blokováno dlouhými čtecími transakcemi. Mezi nové možnosti MithrilDB patří:
- podpora umístění databáze na několika různorodých médiích: HDD, SSD a energie-nezávislé paměti.
- optimální strategie pro 'cenné' a 'méně cenné', pro 'horká', 'teplá' a 'studená' data.
- použití Merkle tree pro kontrolu integrity databáze.
- volitelné použití WAL a výrazně vyšší výkon v scénářích s intenzivním zápisem a zárukami integrity dat.
- lenivé dojezdové zaznamenávání dat na discích.
Zdroj: linux.org.ru
