Veröffentlichung der hochleistungsfähigen eingebetteten Datenbankmanagementsysteme libmdbx 0.10.4 und libfpta 0.3.9

Die Version der Bibliotheken libmdbx 0.10.4 (MDBX) wurde veröffentlicht, die eine leistungsstarke, kompakte und eingebettete Key-Value-Datenbank implementiert, sowie die zugehörige Bibliothek libfpta 0.3.9 (FPTA), die über MDBX eine tabellarische Datenpräsentation mit sekundären und zusammengesetzten Indizes realisiert. Beide Bibliotheken werden unter von der OSI genehmigten Lizenzen vertrieben. Es werden alle gängigen Betriebssysteme und Architekturen unterstützt, einschließlich der russischen Elbrus 2000.

Historisch gesehen ist libmdbx eine umfassende Überarbeitung der Datenbank LMDB und übertrifft ihr Ursprungsprojekt in Bezug auf Zuverlässigkeit, Funktionsumfang und Leistung. Im Vergleich zu LMDB wird in libmdbx großer Wert auf Codequalität, stabilen API-Betrieb, Tests und automatische Überprüfungen gelegt. Ein Tool zur Überprüfung der Integrität der Datenbankstruktur wird mit einigen Wiederherstellungsfunktionen bereitgestellt.

Technologisch bietet libmdbx ACID, strikte Serialisierung von Änderungen und nicht blockierendes Lesen mit linearer Skalierung über CPU-Kerne. Automatische Kompaktierung, automatisches Datenbankgrößenmanagement und Schätzung von Abfragen über Bereiche (Range Query Estimation) werden unterstützt. Seit 2016 wird das Projekt von Positive Technologies finanziert und wird seit 2017 in ihren Produkten eingesetzt.

Für libmdbx steht eine C++ API zur Verfügung, sowie von Enthusiasten unterstützte Bindungen an die Sprachen Rust, Haskell, Python, NodeJS, Ruby, Go und Nim. Für libfpta ist nur eine öffentliche API-Beschreibung in Form einer Header-Datei in C/C++ verfügbar.

Die wichtigsten Neuerungen, Verbesserungen und Korrekturen, die nach der letzten Nachricht vom 9. Mai hinzugefügt wurden:

  • Die Möglichkeit reproduzierbarer Builds wurde sichergestellt.
  • Ein Fehler wurde behoben, bei dem es in sehr seltenen Fällen während der Transaktionsfixierung zu einer Endlosschleife kommen konnte. Das Problem wurde von den Spezialisten von Positive Technologies bei internen Tests ihrer Produkte identifiziert.
  • Die Tests wurden überarbeitet und die Testszenarien zur Überprüfung aller erreichbaren nicht-isomorphen Zustände des Seitenbaum- und GC-Inhalts innerhalb der Datenbank erweitert.
  • Im C++ API wurde das überflüssige „noexcept“ entfernt, 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 die Ausrichtung sicherzustellen (wichtig für CLANG libstdc++).
  • Ein Regressionsfehler im Algorithmus für das Spilling von schmutzigen Seiten wurde behoben, der sich durch einen seltenen unerwarteten Fehler MDBX_PROBLEM bei der Modifikation von Daten in großen Transaktionen äußerte.
  • Eine Phasentestüberprüfung wurde durchgeführt, bei der eine Reihe von Tests hinzugefügt wurde, um die Stabilität bei absichtlicher Beschädigung der Datenbank zu gewährleisten.
  • Unbedeutende Warnungen von UndefinedBehaviorSanitizer und Coverity Scan-Problemen wurden behoben.
  • Die Überprüfung des veralteten und nicht mehr verwendeten internen Flags „P_DIRTY“ in verschachtelten Seiten innerhalb von Datenbankabbildern, die von alten Versionen der Bibliothek erstellt wurden, wurde korrigiert.
  • In den CMake-Skripten wurde die Suche nach den für LTO (Link-Time Optimization) erforderlichen Compiler-Komponenten überarbeitet.
  • Die maximale Anzahl gleichzeitiger Leser wurde auf 32.767 erhöht.
  • Die Leistung bei der Nutzung von Valgrind und AddressSanitizer wurde verbessert.
  • Unter Windows wurde die rekursive Verwendung von SRW-Locks im MDBX_NOTLS-Modus (ohne Verwendung von threadlokalem Speicher) behoben, die Generierung der bootid im Falle von Änderungen der Systemzeit wurde verbessert, die Erkennung von WSL1 und WSL2 wurde optimiert, und es wurde die Möglichkeit hinzugefügt, eine Datenbank auf Plan 9 zu öffnen, die über DrvFS gemountet wurde.
  • Insgesamt wurden mehr als 160 Änderungen in 57 Dateien vorgenommen, etwa 5000 Zeilen hinzugefügt und etwa 2500 Zeilen entfernt.

Ein besonderer Dank gilt dem Team des Erigon-Projekts (Ökosystem Ethereum) für die Unterstützung bei Tests unter extremen Nutzungsszenarien. Es ist bemerkenswert, dass seit der Veröffentlichung von libmdbx v0.10.0 vor fünf Monaten, bei einem Datenbankvolumen von 1-2 TB in jeder Erigon-Installation (die auf 7% der Ethereum-Knoten eingesetzt wird), nur drei Meldungen über Datenbeschädigungen eingegangen sind, die alle durch äußere Ursachen und nicht durch Softwarefehler verursacht wurden: In zwei Fällen waren Fehler im RAM die Ursache, im dritten Fall ein Fehler beim Zurücksetzen von Daten in einer spezifischen Konfiguration des Speichersystems mit BTRFS.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster