Veröffentlichung des leistungsstarken eingebetteten DBMS libmdbx 0.10.4 und libfpta 0.3.9

Die Bibliothek libmdbx 0.10.4 (MDBX) wurde mit der Implementierung einer leistungsstarken, kompakten eingebetteten Schlüsselwertdatenbank und der zugehörigen Bibliothek libfpta 0.3.9 (FPTA) veröffentlicht, die eine tabellarische Darstellung von Daten mit sekundären und zusammengesetzten Indizes implementiert oben auf MDBX. Beide Bibliotheken werden unter OSI-genehmigten Lizenzen vertrieben. Alle aktuellen Betriebssysteme und Architekturen werden unterstützt, ebenso das russische Elbrus 2000.

Historisch gesehen ist libmdbx eine tiefgreifende Überarbeitung des LMDB-DBMS und ist seinem Vorgänger in Bezug auf Zuverlässigkeit, Funktionsumfang und Leistung überlegen. Im Vergleich zu LMDB legt libmdbx großen Wert auf Codequalität, API-Stabilität, Tests und automatisierte Prüfungen. Ein Dienstprogramm zur Überprüfung der Integrität der Datenbankstruktur mit einigen Wiederherstellungsfunktionen wird mitgeliefert.

Technisch gesehen bietet libmdbx ACID, starke Änderungsserialisierung und nicht blockierende Lesevorgänge mit linearer Skalierung über CPU-Kerne hinweg. Automatische Komprimierung, automatische Datenbankgrößenverwaltung und Bereichsabfrageschätzung werden unterstützt. Seit 2016 werden Projekte von Positive Technologies gefördert und seit 2017 in deren Produkten eingesetzt.

libmdbx bietet eine C++-API sowie von Enthusiasten unterstützte Sprachbindungen für Rust, Haskell, Python, NodeJS, Ruby, Go und Nim. Für libfpta ist nur die API-Beschreibung in Form einer C/C++-Header-Datei öffentlich verfügbar.

Wichtige Neuerungen, Verbesserungen und Korrekturen seit der letzten Meldung vom 9. Mai:

  • Ermöglicht reproduzierbare Builds.
  • Es wurde ein Fehler behoben, der in sehr seltenen Fällen zu einer Schleife/einem Einfrieren während eines Transaktions-Commits führen konnte. Das Problem wurde von den Spezialisten von Positive Tecnologies bei internen Tests ihrer eigenen Produkte festgestellt.
  • Tests wurden verbessert und Testszenarien erweitert, um alle erreichbaren nicht isomorphen Zustände des Seitenbaums und der GC-Inhalte innerhalb der Datenbank zu überprüfen.
  • In der C++-API wurde ein zusätzliches „noexclusive“ behoben, zusätzliche Überladungen wurden für die Methode „cursor::erase()“ hinzugefügt, die Implementierung von Puffern wurde von der Verwendung von „std::string“ verschont, um die Ausrichtung sicherzustellen (relevant für CLANG libstdc++).
  • Eine Regression im Dirty-Page-Spilling-Algorithmus (selektives Auswerfen geänderter Datenbankseiten), die sich durch einen seltenen unerwarteten Fehler MDBX_PROBLEM manifestierte, wenn Daten in großen Transaktionen geändert wurden, wurde beseitigt.
  • Um die Stabilität im Falle einer vorsätzlichen Beschädigung der Datenbank sicherzustellen, wurde ein Phasentest mit zusätzlichen Prüfungen durchgeführt.
  • Kleinere Warnungen zu Problemen mit UndefinedBehaviorSanitizer und Coverity Scan wurden behoben.
  • Die Überprüfung des veralteten und nicht mehr verwendeten internen Flags „P_DIRTY“ in verschachtelten Seiten in Datenbankbildern, die von älteren Versionen der Bibliothek erstellt wurden, wurde korrigiert.
  • In CMake-Skripten wurde die Suche nach Compiler-Komponenten verbessert, die für LTO (Link-Time-Optimierung) erforderlich sind.
  • Die maximale Anzahl gleichzeitiger Leser wurde auf 32767 erhöht.
  • Verbesserte Leistung bei Verwendung von Valgrind und AddressSanitizer.
  • Unter Windows wurde die rekursive Verwendung der SRW-Sperre beim Arbeiten im MDBX_NOTLS-Modus (ohne Verwendung des lokalen Thread-Speichers) eliminiert, die Bootid-Generierung wurde behoben, wenn sich die Systemzeit geändert hat, die WSL1- und WSL2-Erkennung wurde verbessert und die Möglichkeit dazu Es wurde hinzugefügt, dass eine über DrvFS bereitgestellte Datenbank auf Plan 9 geöffnet werden kann.
  • Insgesamt wurden mehr als 160 Änderungen an 57 Dateien vorgenommen, etwa 5000 Zeilen hinzugefügt und etwa 2500 gelöscht.

Besonders möchte ich dem Erigon-Projektteam (Ethereum-Ökosystem) für seine Unterstützung beim Testen in extremen Nutzungsszenarien danken. Es ist bezeichnend, dass in fünf Monaten seit der Veröffentlichung von libmdbx v0.10.0 mit einem Datenbankvolumen von 1–2 TB in jeder Erigon-Installation (verwendet auf 7 % der Ethereum-Knoten) nur drei Berichte über Datenbankbeschädigungen eingegangen sind, und zwar allesamt Dies geschah aus externen Gründen und nicht aus Softwarefehlern: In zwei Fällen waren RAM-Ausfälle die Ursache, im dritten Fall ein Fehler beim Zurücksetzen von Daten in einer bestimmten Konfiguration des Speichersubsystems mithilfe von BTRFS.

Source: opennet.ru

Kommentar hinzufügen