für den Test steht der zweite Kandidat für die Veröffentlichungen der Bibliothek zur Verfügung mit der Implementierung einer hochleistungsfähigen, kompakten eingebetteten Schlüssel-Wert-Datenbank. Die aktuelle Version (0.5) ist eine technische Veröffentlichung, die das Ende aller Anpassungen markiert und den Übergang zur Phase der öffentlichen endgültigen Tests und Stabilisierung einleitet, gefolgt von der Erstellung der ersten vollwertigen Version der Bibliothek. Der Code von libmdbx steht unter der OpenLDAP Public License.
Die MDBX-Bibliothek ist eine wesentlich überarbeitete Abspaltung von — einer transaktionalen Embedded-Datenbank der Schlüssel-Wert-Klasse basierend auf ohne , die es mehreren Prozessen ermöglicht, gleichzeitig und effizient mit einer lokal geteilten (nicht netzwerkbasierten) Datenbank zu arbeiten. Im Gegenzug ist MDBX schneller und zuverlässiger als LMDB und behält dabei alle Schlüsselfunktionen seines Vorläufers bei, wie und nicht blockierendes Lesen mit linearer Skalierung über CPU-Kerne.
Die wichtigsten Unterschiede von MDBX im Vergleich zu LMDB:
- Der Schwerpunkt liegt wesentlich stärker auf der Codequalität, dem Testen und automatisierten Prüfungen.
- 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 doppelter Breite und vom Benutzer ausgewählter Größe der Datenbankseite.
Der veröffentlichte Kandidat für die libmdbx-Releases ist das Ergebnis der im August 2019 getroffenen Entscheidung, die Projekte MDBX und MithrilDB zu trennen. Dabei wurde beschlossen, den (vernünftigen) maximalen technischen Schulden zu bereinigen und die Bibliothek zu stabilisieren. Tatsächlich wurde in dieser Richtung 2-3 Mal mehr erreicht als ursprünglich geschätzt und geplant:
- Unterstützung für macOS und Plattformen der «zweiten Reihe»: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Unterstützung für AIX und HP-UX kann bei Bedarf hinzugefügt werden.
- Der Code wurde mithilfe von Undefined Behavior Sanitizer und Address Sanitizer saniert, alle Warnungen wurden bei der Kompilierung mit «-Wpedantic» behoben, alle Warnungen des Coverity Static Analyzer usw.
- Aktualisierung .
- Mischung (Amalgamierung) des Quellcodes zur Erleichterung der Einbettung.
- Unterstützung von CMake.
- Unterstützung für verschachtelte Transaktionen.
- Verwendung von bootid zur Feststellung von Betriebssystemneustarts (unsachgemäße Datenbankabschaltung).
- Durchgängige Zählung aktualisierter/alter Seiten und erweiterte Informationen zu Transaktionen.
- Option MDBX_ACCEDE zum Zugriff auf eine bereits geöffnete Datenbank im kompatiblen Modus.
- Nutzung bei deren Verfügbarkeit.
- Hot-Backup über Pipe.
- Spezialisierter, optimierter Algorithmus für die interne Sortierung (2-3 Mal schneller als «qsort()» und bis zu 30% schneller als «std::sort()»).
- Maximale Schlüssellänge erhöht.
- Automatische Steuerung des Read Ahead (Strategie zur Datei-Caching im Speicher).
- Aggressivere und schnellere Auto-Komprimierung.
- Optimierte Strategie für das Zusammenführen von Seiten im B+-Baum.
- Überwachung nicht lokaler Dateisysteme (NFS, Samba usw.) zur Verhinderung von Datenbankbeschädigungen bei unsachgemäßer Verwendung.
- Erweitertes Testset.
Die Entwicklung der 'nächsten' Version von libmdbx wird als separates Projekt fortgesetzt. , während der Entwicklungsvektor der 'aktuellen' Version MDBX auf die Stabilisierung des Funktionsumfangs und die Stabilisierung ausgerichtet ist. Diese Entscheidung wurde aus drei Gründen getroffen:
- Vollständige Inkompatibilität: Um alle geplanten Funktionen in MithrilDB zu realisieren, ist ein anderer (inkompatibler) DB-Dateiformat und eine andere (inkompatible) API erforderlich.
- Neuer Quellcode: Der Quellcode von MithrilDB wird lizenzunabhängig von LMDB bereitgestellt, und das Projekt soll unter einer anderen (genehmigten) Lizenz veröffentlicht werden. unter der Apache 2.0 Lizenz, und nicht ).
- Die Trennung ermöglicht es, potenzielle Verwirrung zu vermeiden, mehr Klarheit zu schaffen und die Unabhängigkeit der Entwicklungswege der Projekte sicherzustellen.
MithrilDB basiert wie MDBX ebenfalls auf und zeichnet sich ebenfalls durch eine extrem hohe Leistungsfähigkeit aus, während gleichzeitig eine Reihe grundlegender Nachteile von MDBX und LMDB beseitigt werden. Insbesondere wird das Problem der "langen Lesevorgänge", das sich als "Aufblähen" der DB zeigt, beseitigt, da die Bearbeitung von Müll durch lange Lese-Transaktionen blockiert wird. Zu den neuen Funktionen von MithrilDB gehören:
- Unterstützung für die Platzierung von Datenbanken auf mehreren heterogenen Trägern: HDD, SSD und nicht flüchtigem Speicher.
- Optimale Strategien für «wertvolle» und «weniger wertvolle», für «heiße», «warme» und «kalte» Daten.
- Verwendung von Merkle-Bäumen zur Überprüfung der Integrität der Datenbank.
- Optionale Verwendung von WAL und eine erheblich höhere Leistung in Szenarien mit intensiven Schreibvorgängen und Garantien für die Datenintegrität.
- Faulheitsbedingte nachfolgende Sicherung der Daten auf Festplatten.
Quelle: opennet.ru
