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

Die Veröffentlichung der Bibliotheken libmdbx 0.10.4 (MDBX) mit der Umsetzung einer hochleistungsfähigen kompakten eingebetteten Schlüssel-Wert-Datenbank sowie der zugehörigen Bibliothek libfpta 0.3.9 (FPTA), die eine tabellarische Datenpräsentation mit sekundären und zusammengesetzten Indizes über MDBX realisiert, fand statt. Beide Bibliotheken werden unter OSI-akkreditierten Lizenzen vertrieben. Sie unterstützen alle gängigen Betriebssysteme und Architekturen sowie den russischen Elbrus 2000.

Historisch gesehen ist libmdbx eine umfassende Überarbeitung der Datenbank LMDB und übertrifft ihren Vorgänger in Bezug auf Zuverlässigkeit, Funktionalität und Leistung. Im Vergleich zu LMDB wird in libmdbx großer Wert auf Codequalität, stabile API-Arbeit, Tests und automatische Prüfungen gelegt. Ein Tool zur Überprüfung der Integrität der Datenbankstruktur mit einigen Wiederherstellungsfunktionen wird mitgeliefert.

Technologisch bietet libmdbx ACID, strikte Serialisierung von Änderungen und nicht-blockierendes Lesen mit linearer Skalierung über CPU-Kerne. Die Autocompactierung, die automatische Verwaltung der Datenbankgröße und die Schätzung des Volumens von Abfragen über Bereiche (Range Query Estimation) werden unterstützt. Seit 2016 wird das Projekt von der Firma Positive Technologies finanziert und wird seit 2017 in deren Produkten verwendet.

Für libmdbx wird ein C++ API angeboten, ebenso wie von Enthusiasten unterstützte Bindings an die Sprachen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. Für libfpta ist nur die Beschreibung des API in Form einer C/C++ Header-Datei öffentlich zugänglich.

Die wichtigsten Neuerungen, Überarbeitungen und Fehlerbehebungen, die nach der vorherigen Mitteilung vom 9. Mai hinzugefügt wurden:

  • Es wurde die Möglichkeit von reproduzierbaren Builds sichergestellt.
  • Ein Fehler wurde behoben, aufgrund dessen in sehr seltenen Ausnahmefällen während der Fixierung einer Transaktion eine Endlosschleife/blockierung auftreten konnte. Das Problem wurde von den Spezialisten von Positive Technologies während interner Tests eigener Produkte identifiziert.
  • Die Tests wurden überarbeitet und die Testszenarien zur Überprüfung aller erreichbaren nicht-isomorphen Zustände des Seitenbaums und des GC-Inhalts innerhalb der Datenbank erweitert.
  • Im C++ API wurde das überflüssige 'noexcept' behoben, zusätzliche Überladungen für die Methode 'cursor::erase()' hinzugefügt und die Implementierung von Buffern wurde von der Verwendung von 'std::string' befreit, um das Alignment (relevant für CLANG libstdc++) zu gewährleisten.
  • Der Rückschritt im Algorithmus zum Spillen von schmutzigen Seiten (selektives Ersetzen geänderter DB-Seiten) wurde behoben, welcher sich durch den seltenen, unerwarteten Fehler MDBX_PROBLEM beim Ändern von Daten in riesigen Transaktionen äußerte.
  • Eine Überprüfung durch Phasing wurde durchgeführt, mit der Hinzufügung mehrerer Prüfungen zur Gewährleistung der Stabilität bei absichtlicher Beschädigung der DB.
  • Weniger bedeutende Warnungen von UndefinedBehaviorSanitizer und Coverity Scan-Problemen wurden behoben.
  • Die Überprüfung des veralteten und bereits nicht mehr verwendeten internen Flags „P_DIRTY“ in verschachtelten Seiten innerhalb von DB-Images, die von älteren Versionen der Bibliothek erstellt wurden, wurde korrigiert.
  • In den CMake-Skripten wurde die Suche nach den für LTO (Linkzeitoptimierung) benötigten Compilerkomponenten verbessert.
  • Die maximale Anzahl gleichzeitiger Leser wurde auf 32767 erhöht.
  • Die Leistung bei Verwendung von Valgrind und AddressSanitizer wurde verbessert.
  • Unter Windows wurde die rekursive Verwendung von SRW-Lock im MDBX_NOTLS-Modus (ohne Verwendung von Thread-Local Storage) beseitigt, die Generierung der Boot-ID bei Änderungen der Systemzeit wurde behoben, die Erkennung von WSL1 und WSL2 wurde verbessert, und es wurde die Möglichkeit hinzugefügt, die DB auf Plan 9, die über DrvFS bereitgestellt wird, zu öffnen.
  • Insgesamt wurden mehr als 160 Änderungen in 57 Dateien vorgenommen, ~5000 Zeilen hinzugefügt und ~2500 Zeilen entfernt.

Ein besonderer Dank gilt dem Team von Erigon (Ethereum-Ökosystem) für die Unterstützung bei Tests unter extremen Nutzungsszenarien. Auffällig ist, dass in den fünf Monaten seit der Veröffentlichung von libmdbx v0.10.0, bei einem DB-Volumen von 1-2 TB in jeder Erigon-Installation (verwendet auf 7% der Ethereum-Knoten), nur drei Meldungen über DB-Beschädigungen eingegangen sind, alle aufgrund äußerer Ursachen und nicht aufgrund von Softwarefehlern: In zwei Fällen waren Speicherfehler die Ursache, im dritten Fall ein Fehler beim Zurücksetzen von Daten in einer speziellen Konfiguration des Speichersystems unter Verwendung von BTRFS.

Quelle: opennet.ru

60GB SSD 8Gb DDR4