Veröffentlichung der eingebetteten DBMS libmdbx 0.13.2

Die Bibliothek libmdbx 0.13.2 (MDBX) wurde veröffentlicht, die eine leistungsstarke und kompakte eingebettete Schlüssel-Wert-Datenbank implementiert. Der Code von libmdbx wird unter der Apache 2.0-Lizenz veröffentlicht. Alle aktuellen Betriebssysteme und Architekturen werden unterstützt, einschließlich des russischen Elbrus 2000. Für libmdbx steht eine umfangreiche API für C++ zur Verfügung, sowie von Enthusiasten unterstützte Bindungen für die Programmiersprachen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno und Scala.

Historisch gesehen ist libmdbx eine umfassende Überarbeitung der Datenbank LMDB und übertrifft ihren Vorgänger in Bezug auf Zuverlässigkeit, Funktionsumfang und Leistung. Im Vergleich zu LMDB wird in libmdbx erheblicher Wert auf die Codequalität, die stabile API-Arbeit, das Testen und automatische Prüfungen gelegt. Ein Dienstprogramm zur Überprüfung der Integrität der Datenbankstruktur mit einigen Wiederherstellungsfunktionen wird bereitgestellt. Technologisch bietet libmdbx ACID, strenge Serialisierung von Änderungen und nicht blockierendes Lesen mit linearer Skalierung über mehrere CPU-Kerne. Die automatische Kompaktifizierung, automatische Verwaltung der Datenbankgröße und Schätzung des Umfangs von Abfragen nach Bereichen (range query estimation) werden unterstützt.

Hauptänderungen:

  • Die Aktualisierung des GC beim Zurückgeben/Einfügen von Seitenlisten in komplexen Szenarien wurde beschleunigt. Der zuvor deaktivierte experimentelle Feedback-Modus wurde überarbeitet und aktiviert. Dies hat die Konvergenz grundlegend verbessert (die Anzahl der Wiederholungsversuche verringert) und einen Fehler behoben, der in seltenen spezifischen Bedingungen zu einer 'Schleife' beim Festschreiben von Transaktionen (mit Rückgabe des Fehlers MDBX_PROBLEM) führte.
  • Der Standard C23 wurde in die CMake-Bau-Skripte aufgenommen.
  • T-Makros für Paarfunktionen char/wchar_t wurden hinzugefügt.
  • Die Unterstützung für verschachtelte schreibende Transaktionen wurde zur C++ API hinzugefügt.
  • Der Übergang zur zweiten Ausgabe der Spezifikation für semantische Versionierung ('Semantic Versioning 2') wurde vollzogen und Informationen zur Version werden in VERSION.json exportiert.
  • Zur Reproduzierbarkeit der Builds wurde die Unterstützung für die Umgebungsvariable SOURCE_DATE_EPOCH hinzugefügt. Die Unterstützung für MDBX_BUILD_TIMESTAMP bleibt erhalten und hat Priorität.
  • Die Möglichkeit, zusätzliche Informationen zum libmdbx-Build über die Option MDBX_BUILD_METADATA anzugeben, wurde hinzugefügt. Die angegebenen Informationen werden jetzt einfach innerhalb der Bibliothek als Wert von mdbx_build.metadata integriert und werden zukünftig auch bei der Paketbildung usw. verwendet.
  • Ein Logging von Fehlern, die aus der API zurückgegeben werden, wurde hinzugefügt. Dazu genügt es, den Logging-Level MDBX_LOG_DEBUG (für Logging von Fehlern, abzüglich MDBX_NOTFOUND) oder MDBX_LOG_TRACE (für Logging aller Fehler, einschließlich MDBX_RESULT_TRUE) festzulegen.
  • Änderung des Verhaltens:
    • Die Methode mdbx::cursor::get_multiple_samelength() wurde hinzugefügt und mdbx::txn::put_multiple_samelength() umbenannt.
    • Zur Vereinheitlichung der C++ API wird bei der Ausführung der Operation MDBX_GET_MULTIPLE jetzt auch der Wert des Schlüssels zurückgegeben.
    • Für die Größenkonstanten mdbx::env::geometry wurde der Basistyp von unverändertem size_t auf signiertes intptr_t geändert.
    • Die Entscheidung, ntdll anstelle von CRT zu verwenden, wird nun nur bei expliziter Deaktivierung der C++ API getroffen.
    • Die Freigabe des Speichers für abgebrochene/unterbrochene Lese-Transaktionen, die an mdbx_txn_commit() übergeben werden, ist gewährleistet. Die API-Vereinbarung verlangt, dass solche Transaktionen über mdbx_txn_abort() freigegeben werden, weshalb die Funktion mdbx_txn_commit() in solchen Fällen einen Fehler zurückgegebene hat, ohne die Transaktionen selbst zu zerstören. Dies führte zu Speicherverlusten aufgrund von Fehlern in Anwendungen, was eine Verhaltensänderung erforderte.
    • Verwendung des Makros __deprecated_enum, sofern es definiert ist.
    • Beim Bauen mit CMake wird die Standardsprache C jetzt gemäß CMAKE_C_STANDARD ausgewählt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4