Veröffentlichung der eingebetteten Datenbank libmdbx 0.13.2

Die Version der Bibliothek libmdbx 0.13.2 (MDBX) wurde veröffentlicht, die eine leistungsstarke, kompakte eingebettete Schlüssel-Wert-Datenbank implementiert. Der Code von libmdbx wird unter der Apache 2.0-Lizenz verteilt. Alle aktuellen Betriebssysteme und Architekturen werden unterstützt, einschließlich des russischen Elbrus 2000. Für libmdbx steht eine umfassende API für C++ zur Verfügung, sowie von Enthusiasten unterstützte Bindings für die Sprachen 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 hinsichtlich Zuverlässigkeit, Funktionsumfang und Leistung. Im Vergleich zu LMDB legt libmdbx großen Wert auf die Codequalität, stabile API-Funktionalität, Testing und automatisierte Überprüfungen. Mitgeliefert wird ein Dienstprogramm zur Überprüfung der Datenbankintegrität mit einigen Wiederherstellungsfunktionen. Technologisch bietet libmdbx ACID, strenge Serialisierung von Änderungen und nicht-blockierendes Lesen mit linearer Skalierung über die CPU-Kerne. Unterstützung für automatische Kompaktierung, automatisches Management der Datenbankgröße sowie Schätzung des Volumens bei Bereichsanfragen (range query estimation) werden ebenfalls bereitgestellt.

Wesentliche Änderungen:

  • Die beschleunigte GC-Aktualisierung beim Zurückgeben/Platzieren von Seitenlisten in komplexen Szenarien wurde optimiert. Der zuvor deaktivierte experimentelle Modus für korrigierendes Feedback wurde überarbeitet und aktiviert. Dadurch wurde die Konvergenz wesentlich verbessert (die Anzahl der Wiederholungsversuche wurde verringert), und ein Fehler, der zu einer „Endlosschleife“ bei der Festschreibung von Transaktionen führte (mit dem Fehlercode MDBX_PROBLEM) unter seltenen spezifischen Bedingungen, wurde behoben.
  • Die CMake-Build-Skripte unterstützen nun den Standard C23.
  • T-Makros für gekoppelte Funktionen 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 der Export von Versionsinformationen nach VERSION.json wurde sichergestellt.
  • 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 bestehen und hat Priorität.
  • Die Möglichkeit, zusätzliche Informationen zur libmdbx-Bauweise ü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 gespeichert und werden künftig auch zur Paketbildung usw. verwendet.
  • Die Protokollierung von Fehlern, die aus der API zurückgegeben werden, wurde hinzugefügt. Jetzt reicht es aus, das Protokollierungsniveau MDBX_LOG_DEBUG (für die Protokollierung von Fehlern mit Ausnahme von MDBX_NOTFOUND) oder MDBX_LOG_TRACE (für die Protokollierung aller Fehler sowie 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 nun auch der Wert des Schlüssels selbst zurückgegeben.
    • Der Basistyp für die dimensionsspezifischen Konstanten mdbx::env::geometry wurde von einem unsigned size_t auf ein signed intptr_t geändert.
    • Die Entscheidung, ntdll anstelle von CRT zu verwenden, wird jetzt nur getroffen, wenn die C++ API ausdrücklich deaktiviert wird.
    • Die Freigabe des Speichers von abgebrochenen oder unterbrochenen Lese-Transaktionen, die in mdbx_txn_commit() übergeben werden, wurde sichergestellt. Die API-Vereinbarung verlangt, dass solche Transaktionen über mdbx_txn_abort() freigegeben werden, was dazu führt, dass die Funktion mdbx_txn_commit() in diesen Fällen einen Fehler zurückgibt, ohne die Transaktionen selbst zu zerstören. Dies führte zu Speicherlecks aufgrund von Anwendungsfehlern und veranlasste eine Änderung des Verhaltens.
    • Verwendung des Makros __deprecated_enum, falls definiert.
    • Bei der Erstellung über CMake erfolgt die Auswahl des C-Sprachstandards jetzt unter Berücksichtigung von CMAKE_C_STANDARD.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster