Die Bibliothek libmdbx 0.11.3 (MDBX) wurde veröffentlicht, die eine leistungsstarke, kompakte eingebettete Schlüssel-Wert-Datenbankimplementierung bietet. Der Code von libmdbx wird unter der OpenLDAP Public License verbreitet. Alle aktuellen Betriebssysteme und Architekturen werden unterstützt, einschließlich des russischen Elbrus 2000. Ende 2021 wird libmdbx als Backend-Speicher in zwei der schnellsten Ethereum-Clients — Erigon und dem neuen „Hai“, der nach verfügbaren Informationen der leistungsstärkste Ethereum-Client ist — verwendet.
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 ein großes Augenmerk auf die Codequalität, die stabile API-Arbeit, Tests und automatische Prüfungen gelegt. Es wird ein Tool zur Überprüfung der Integrität der Datenbankstruktur mit einigen Wiederherstellungsmöglichkeiten bereitgestellt.
Technologisch bietet libmdbx ACID, strikte Serialisierung von Änderungen und nicht blockierendes Lesen mit linearer Skalierung über CPU-Kerne. Die automatische Kompaktierung, die automatische Verwaltung der Datenbankgröße und die Schätzung des Abfragerange (range query estimation) werden unterstützt. Seit 2016 wird das Projekt von der Firma Positive Technologies finanziert und wird seit 2017 in ihren Produkten verwendet.
Für libmdbx wird ein C++ API angeboten, sowie von Enthusiasten unterstützte Bindungen an die Programmiersprachen Rust, Haskell, Python, NodeJS, Ruby, Go und Nim.
Die wichtigsten Neuerungen, Ergänzungen und Korrekturen, die nach der vorherigen Mitteilung vom 11. Oktober hinzugefügt wurden:
- Das C++ API gilt als einsatzbereit.
- Die Aktualisierung von GC-Daten wurde erheblich beschleunigt, insbesondere bei der Festschreibung großer Transaktionen, was besonders relevant ist, wenn libmdbx im Ethereum-Ökosystem verwendet wird.
- Die interne Signatur des Datenbankformats wurde geändert, um automatische Updates zu unterstützen, die für die Benutzer völlig transparent sind. Dies ermöglicht es, falsch-positive Meldungen über Datenbankbeschädigungen zu vermeiden, wenn veraltete Versionen der Bibliothek verwendet werden, um Transaktionen zu lesen, die mit den aktuellen Versionen festgeschrieben wurden.
- Die Funktionen mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() und mdbx_env_get_syncbytes() wurden hinzugefügt. Unterstützung für den Betrieb MDBX_SET_UPPERBOUND wurde hinzugefügt.
- Alle Warnungen beim Kompilieren mit allen unterstützten Compilern in den Modi C++ 11/14/17/20 wurden beseitigt. Die Kompatibilität mit veralteten Compilern wurde sichergestellt: clang ab Version 3.9, gcc ab Version 4.8, einschließlich des Builds mit sdevtoolset-9 für CentOS/RHEL 7.
- Die Möglichkeit eines Konflikts von Metaseiten nach manuellem Wechsel zu einer bestimmten Metaseite über das Tool mdbx_chk wurde beseitigt.
- Die unerwartete Rückgabe eines Fehlers MDBX_PROBLEM bei der Überschreibung veralteter Metaseiten wurde behoben.
- Die Rückgabe von MDBX_NOTFOUND wurde bei ungenauen Übereinstimmungen bei der Verarbeitung der Anfrage MDBX_GET_BOTH korrigiert.
- Ein Kompilierungsfehler unter Linux wurde behoben, wenn Header-Dateien mit den Beschreibungen der Schnittstellen zum Kernel fehlen.
- Ein Konflikt zwischen dem internen Flag MDBX_SHRINK_ALLOWED und der Option MDBX_ACCEDE wurde behoben.
- Mehrere überflüssige Assert-Prüfungen wurden entfernt.
- Die unerwartete Rückgabe von MDBX_RESULT_TRUE aus der Funktion mdbx_env_set_option() wurde korrigiert.
- Insgesamt wurden mehr als 90 Änderungen in 25 Dateien vorgenommen, etwa 1300 Zeilen hinzugefügt und etwa 600 entfernt.
Quelle: opennet.ru
