Vydání vysoce výkonného embedded DBMS libmdbx 0.10.4 a libfpta 0.3.9

Knihovna libmdbx 0.10.4 (MDBX) byla vydána s implementací vysoce výkonné kompaktní vestavěné databáze klíč-hodnota a související knihovny libfpta 0.3.9 (FPTA), která implementuje tabulkovou reprezentaci dat se sekundárními a složenými indexy. nad MDBX. Obě knihovny jsou distribuovány pod licencemi schválenými OSI. Podporovány jsou všechny současné operační systémy a architektury, stejně jako ruský Elbrus 2000.

Historicky je libmdbx hlubokým přepracováním LMDB DBMS a je lepší než jeho předchůdce ve spolehlivosti, sadě funkcí a výkonu. Ve srovnání s LMDB klade libmdbx velký důraz na kvalitu kódu, stabilitu API, testování a automatické kontroly. Je dodáván obslužný program pro kontrolu integrity struktury databáze s některými možnostmi obnovy.

Z technologického hlediska nabízí libmdbx ACID, silnou 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 jsou projekty financovány společností Positive Technologies a od roku 2017 jsou využívány v jejích produktech.

libmdbx nabízí C++ API a také nadšence podporované jazykové vazby pro Rust, Haskell, Python, NodeJS, Ruby, Go a Nim. Pro libfpta je veřejně dostupný pouze popis API ve formě hlavičkového souboru C/C++.

Hlavní novinky, vylepšení a opravy přidané od předchozí zprávy z 9. května:

  • Umožňuje reprodukovatelné sestavení.
  • Opravena chyba, kvůli které mohlo ve velmi vzácných případech dojít k zacyklení/zamrznutí během potvrzování transakce. Problém odhalili specialisté Positive Tecnologies při interním testování vlastních produktů.
  • Testy byly vylepšeny a testovací scénáře byly rozšířeny o kontrolu všech dosažitelných neizomorfních stavů stromu stránek a obsahu GC v databázi.
  • V C++ API bylo opraveno další „noexcept“, byla přidána další přetížení pro metodu „cursor::erase()“, implementace vyrovnávacích pamětí byla ušetřena použití „std::string“ pro zajištění zarovnání (relevantní pro CLANG libstdc++).
  • Byla odstraněna regrese v algoritmu přelévání nečistých stránek (selektivní vyhazování změněných databázových stránek), která se projevovala vzácnou neočekávanou chybou MDBX_PROBLEM při změně dat v rozsáhlých transakcích.
  • Byl proveden fázový test s přidáním řady kontrol pro zajištění stability v případě úmyslného poškození databáze.
  • Opravena drobná varování UndefinedBehaviorSanitizer a problémy s Coverity Scan.
  • Opravena kontrola zastaralého a již nepoužívaného interního příznaku „P_DIRTY“ ve vnořených stránkách uvnitř databázových obrazů vytvořených staršími verzemi knihovny.
  • Ve skriptech CMake bylo vylepšeno vyhledávání komponent kompilátoru potřebných pro LTO (link-time optimalizace).
  • Maximální počet simultánních čtenářů byl zvýšen na 32767.
  • Vylepšený výkon při použití Valgrind a AddressSanitizer.
  • V systému Windows bylo eliminováno rekurzivní použití SRW-lock při práci v režimu MDBX_NOTLS (bez použití místního úložiště vláken), generování bootidů bylo opraveno, pokud se změnil systémový čas, byla vylepšena detekce WSL1 a WSL2 a schopnost byla přidána otevřít databázi na plánu 9 připojená přes DrvFS.
  • Celkem bylo provedeno více než 160 změn v 57 souborech, bylo přidáno ~5000 řádků, ~2500 bylo odstraněno.

Zvláště bych chtěl poděkovat projektovému týmu Erigon (ekosystém Ethereum) za pomoc při testování v extrémních scénářích použití. Je významné, že za pět měsíců od vydání libmdbx v0.10.0 s objemem databáze 1–2 TB v každé instalaci Erigon (použito na 7 % uzlů Ethereum) byly obdrženy pouze tři zprávy o poškození databáze, všechny ke kterému došlo z vnějších důvodů, a nikoli z chyb softwaru: ve dvou případech byly příčinou selhání RAM, ve třetím chyba při resetování dat v konkrétní konfiguraci úložného subsystému pomocí BTRFS.

Zdroj: opennet.ru

Přidat komentář