Die Version 0.13.3 der Bibliothek libmdbx (MDBX) wurde veröffentlicht, die eine leistungsstarke, kompakte, embedded Key-Value-Datenbank implementiert. Der Code von libmdbx wird unter der Apache 2.0-Lizenz verbreitet. Es werden alle aktuellen Betriebssysteme und Architekturen 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 Sprachen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, 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:
- Der Branch 0.13.x hat den Status stabil erreicht. Die Entwicklung des Branches 0.14.x hat begonnen.
- In der C API wurde die Funktion mdbx_cursor_count_ex() hinzugefügt, die sowohl die Anzahl der Multi-Werte für den aktuellen Schlüssel als auch Informationen über den eingebetteten Baum, der diese Werte speichert, zurückgibt.
- In der C++ API wurde die Methode mdbx::txn::make_broken() hinzugefügt, die der Funktion mdbx_txn_break() entspricht.
- In den Dienstprogrammen mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat wurde ein Logging für Fehler, Warnungen und wichtige Nachrichten von libmdbx implementiert.
- Änderung des Verhaltens:
- Beim Aktivieren der Profilierung des Garbage Collectors (Kompilierung mit der Option MDBX_ENABLE_PROFGC=ON) werden nun die CPU-Zeitkosten für das Zusammenführen von Seitenlisten gezählt, d.h. für die Arbeit der Funktion pnl_merge().
- Im Testwerkzeug wurde der Datenmodus von data.dups in data.multi umbenannt.
- Die Schlüssel-Längenprüfung innerhalb von cursor_seek() wurde verbessert.
- Wenn der Benutzer über mdbx_env_set_option(MDBX_opt_txn_dp_limit) keinen eigenen Wert festlegt, wird das dirty-pages-limit beim Start jeder nicht geschachtelten Schreibtransaktion anhand des verfügbaren RAMs und der Größe der Datenbank angepasst.
- Im MDBX_NOSTICKYTHREADS-Modus ist das Commit/Abort geschachtelter Transaktionen aus jedem Thread erlaubt.
- Beim Versuch, geschachtelte Transaktionen im MDBX_WRITEMAP-Modus zu starten, wird eine Protokollierung durchgeführt und der Fehler MDBX_INCOMPATIBLE zurückgegeben.
- Im C++ API werden in den Konstruktoren/Initialisierern und Methoden, die mit der Geometrie der Datenbank verbunden sind, standardmäßig nur die Default-Werte verwendet.
- Innerhalb von mdbx_env_set_geometry() wurden die Heuristiken zur Bestimmung der vom Benutzer angeforderten Standard-Geometrieparameter verbessert.
- Fehlerbehebungen:
- Ein Rückschritt bei der Entsperrung des Mutex bei erneutem Schließen des dbi-Deskriptor wurde behoben, einschließlich des Versuchs, den Deskriptor nach dem Löschen der zugehörigen Tabelle explizit zu schließen.
- Ein Rückschritt im Zustand des geschachtelten/dupsort-Cursors nach dem Einfügen von Daten im MDBX_APPEND-Modus wurde behoben.
- Unterstützung für die Erfassung von boot_id bei der Arbeit innerhalb eines LXC-Containers.
- Ein Fehler wurde behoben, der die fehlerhafte Verarbeitung von Versuchen zum Start einer geschachtelten Lesetransaktion betraf. In solchen Fällen wird jetzt der Fehler MDBX_EINVAL zurückgegeben, da die Verschachtelung nur für Lese-/Schreibtransaktionen unterstützt wird.
- Regression des SIGSEGV-Zugriffs auf eine Nulladresse im Nur-Lese-Modus ohne Nutzung der LCK-Datei, beispielsweise beim Hosting der Datenbank auf einem nur schreibgeschützten Medium, wurde behoben.
Quelle: opennet.ru
