Version 0.9.1 der Bibliothek (MDBX) mit der Implementierung einer leistungsstarken, kompakten Embedded-Datenbank der Schlüssel-Wert-Klasse. Der Code von libmdbx wird unter der Lizenz .
Die aktuelle Version ist ein Kompromiss zwischen dem Ziel, eine langfristig stabile Version 1.0 mit vollumfänglicher C++-Unterstützung zu veröffentlichen und dem Wunsch, Veröffentlichungen nicht aufgrund der Unvorbereitetheit einer neuen C++-API zu verzögern. Die vorgestellte Version ist das Ergebnis von 9 Monaten Arbeit zur Stabilisierung der Bibliothek und Verbesserung ihrer Benutzerfreundlichkeit und enthält auch eine Vorabversion der .
Die Bibliothek libmdbx ist nicht einfach ein "Fork", sondern ein grundlegend überarbeiteter Nachfolger — einer transaktionalen Embedded-Datenbank der Schlüssel-Wert-Klasse basierend auf ohne , die es mehreren Prozessen ermöglicht, konkurrierend und effizient mit lokal geteilten (nicht netzwerkbasierten) Datenbanken ohne einen dedizierten Serverprozess zu arbeiten. Libmdbx ist grundsätzlich Die Möglichkeiten seines Vorgängers werden verbessert, während gleichzeitig die Nachteile beseitigt oder gemildert werden. Die Entwickler sind überzeugt, dass libmdbx etwas schneller und wesentlich zuverlässiger als LMDB ist.
libmdbx bietet , strenge Serialisierung von Änderungen und nicht blockierendes Lesen mit linearer Skalierung auf CPU-Kerne. Die Ergebnisse der Leistungstests (Parallelversendung von Lese-/Suchanfragen in 1-2-4-8 Threads auf einem i7-4600U mit 2 physischen Kernen im 4-Thread HyperThread-Modus):
Die wichtigsten Unterschiede von MDBX im Vergleich zu LMDB:
- Es wird wesentlich mehr Wert auf die Codequalität, die „Stabilität“ der API, das Testen und automatische Überprüfungen gelegt.
- Weitaus mehr Kontrolle während des Betriebs, angefangen bei der Parameterüberprüfung bis hin zur internen Audits der Datenbankstrukturen.
- Automatische Kompaktion und automatisches Management der Datenbankgröße.
- Ein einheitliches Datenbankformat für 32-Bit- und 64-Bit-Versionen.
- Schätzung der Abfragevolumina über Bereiche (Range Query Estimation).
- Unterstützung von Schlüsseln mit doppelt so langer Länge und benutzerdefinierter Seitenlänge der Datenbank.
- Ein Tool zur Überprüfung der Integrität der Datenbankstruktur mit einigen Wiederherstellungsoptionen.
Die wichtigsten Neuerungen und Anpassungen nach mit der Einführung von Version 0.5 im Januar 2020:
- Für schnelle Unterstützung und Fragen wurde eine offene .
- Mehr als ein Dutzend Fehler und Unstimmigkeiten wurden behoben (siehe ).
- Eine Vielzahl von Tippfehlern und Rechtschreibfehlern wurde korrigiert, zahlreiche kosmetische Verbesserungen.
- Die Testfälle wurden erweitert.
- Unterstützung für iOS, Android, , , , und .
- Eine Vorabversion der C++ API wurde in .
- Eingebaute Dokumentation im Doxygen-Format und automatische Generierung .
- Automatische Erstellung von Archiven mit amalgamierten Quelltexten wurde sichergestellt.
- Unterstützung für die Vorbereitung von Transaktionen und Cursors, Benutzerkontexte für Transaktionen und Cursors wurde hinzugefügt.
- Zusätzliche Methoden zur Kontrolle der referenziellen Integrität in MVCC-Snapshots von B+Tree wurden implementiert.
- Unterstützung für die Überprüfung des MVCC-Snapshots der DB, zugänglich über jede Metaseite mit Umschaltmöglichkeit zur Wiederherstellung, wurde hinzugefügt.
- Unterstützung für die Wiedereröffnung der DB aus einem Prozess zu Testzwecken usw. wurde implementiert.
- Die automatische Verarbeitung der Option MDBX_NOSUBDIR beim Öffnen der Datenbank wurde implementiert.
- Funktionen zur Bildung von Ganzzahlenschlüsseln aus Fließkommawerten und 'universellen' JavaScript-Zahlen wurden hinzugefügt.
- Insgesamt wurden 430 Änderungen an 93 Dateien vorgenommen, über 25.000 Zeilen hinzugefügt und mehr als 8.500 Zeilen entfernt.
Die weitere Entwicklung von libmdbx wird sich auf die Bildung einer finalen C++-API, die Stabilisierung des Basiscodes, die Verbesserung der Benutzerfreundlichkeit der Bibliothek sowie die Erstellung von Paketen für beliebte Linux-Distributionen konzentrieren. Zu den geplanten Erweiterungen gehört die Unterstützung von Schlüsseln im Format .
Quelle: opennet.ru
