Nach fünf Jahren Entwicklung wurde der zweite Kandidat für die Veröffentlichung von libmdbx 1.0 veröffentlicht.

Verfügbar zur Testung des zweiten Kandidaten für die Bibliothek libmdbx mit der Implementierung einer leistungsstarken, kompakten eingebetteten Schlüssel-Wert-Datenbank. Die aktuelle Version (0.5) ist eine technische Veröffentlichung, die das Ende von Verbesserungen markiert und den Übergang zur Phase der öffentlichen Endtests und Stabilisierung darstellt, gefolgt von der Bildung der ersten vollwertigen Veröffentlichungen der Bibliothek. Der Code von libmdbx wird verbreitet unterliegt der OpenLDAP Public License.

Die MDBX-Bibliothek ist eine wesentlich überarbeitete Abzweigung von LMDB – einem transaktionsbasierten eingebetteten DBMS der Klasse „Schlüssel-Wert“, das auf B+-Bäumen ohne Vorsorgeprotokollierung, die es mehreren Prozessen ermöglicht, konkurrierend und effizient mit lokal gemeinsamen (nicht netzwerkbasierten) Datenbanken zu arbeiten. Darüber hinaus ist MDBX schneller und zuverlässiger als LMDB und behält gleichzeitig alle Schlüsselmerkmale seines Vorläufers bei, wie ACID und nicht blockierendes Lesen mit linearer Skalierung über CPU-Kerne.

Die wichtigsten Unterschiede von MDBX im Vergleich zu LMDB:

  • Es wird grundsätzlich mehr Wert auf Codequalität, Tests und automatische Überprüfungen gelegt.
  • Es gibt erheblich mehr Kontrolle während des Betriebs, von der Überprüfung der Parameter bis hin zu internen Audits der Datenbankstrukturen.
  • Automatische Kompaktifizierung und automatisches Management der Datenbankgröße.
  • Ein einheitliches Datenbankformat für 32-Bit- und 64-Bit-Bauten.
  • Bewertung des Volumens von Abfragen nach Bereichen (range query estimation).
  • Unterstützung für Schlüssel mit doppelt so großen Blöcken und benutzerdefinierte Seitengrößen der Datenbank.

Der veröffentlichte Kandidat für die Veröffentlichung von libmdbx ist das Ergebnis der im August 2019 getroffenen Entscheidung, die Projekte MDBX und MithrilDB zu trennen. Dabei wurde beschlossen, den (rationalen) maximalen technischen Schuldenstand zu beseitigen und die Bibliothek zu stabilisieren. Tatsächlich wurde in diesem Bereich 2- bis 3-mal mehr geleistet, als ursprünglich geschätzt und geplant:

  • Die Unterstützung für macOS und „zweite Ebene“-Plattformen wurde implementiert: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Unterstützung für AIX und HP-UX kann bei Bedarf hinzugefügt werden.
  • Der Code wurde mit Hilfe von Undefined Behavior Sanitizer und Address Sanitizer saniert, alle Warnungen bei der Kompilierung mit „-Wpedantic“, alle Warnungen des Coverity Static Analyzer usw. wurden beseitigt.
  • Aktualisierung der API-Beschreibung.
  • Fusion (Amalgamation) des Quellcodes zur Erleichterung der Integration.
  • CMake-Unterstützung.
  • Unterstützung für verschachtelte Transaktionen.
  • Verwendung von bootid zur Feststellung des Neustarts des Betriebssystems (unsauberer Stopp der Datenbank).
  • Durchschnittliche Zählung aktualisierter/alter Seiten und erweiterte Informationen zu Transaktionen.
  • Option MDBX_ACCEDE zum Anschluss an eine bereits geöffnete Datenbank im kompatiblen Modus.
  • Verwendung OFD-Sperren bei deren Verfügbarkeit.
  • Hotbackups über Pipe.
  • Spezialisierter optimierter Algorithmus zur internen Sortierung (bis zu 2-3 Mal schneller als „qsort()“ und bis zu 30 % schneller als „std::sort()“).
  • Erhöhte maximale Schlüsselgröße.
  • Automatische Steuerung von Read Ahead (Caching-Strategie für die Datenbankdatei im Speicher).
  • Aggressivere und schnellere Auto-Komprimierung.
  • Optimalere Strategie zur Zusammenführung von Seiten im B+-Baum.
  • Überwachung nicht-lokaler Dateisysteme (NFS, Samba usw.), um Schäden an der Datenbank bei falscher Nutzung zu verhindern.
  • Erweiterter Testkatalog.

Die Entwicklung der "nächsten" Version von libmdbx wird im Rahmen eines separaten Projekts fortgesetzt. MithrilDB, während die Entwicklungsrichtung der "aktuellen" Version von MDBX darauf abzielt, die Funktionalitäten zu stabilisieren und einzufrieren. Diese Entscheidung wurde aus drei Gründen getroffen:

  • Vollständige Inkompatibilität: Um alle geplanten Funktionen in MithrilDB zu realisieren, ist ein anderes (inkompatibles) Datenbankdateiformat und eine andere (inkompatible) API erforderlich.
  • Neuer Quellcode: Für den Quellcode von MithrilDB wurde die Lizenzunabhängigkeit von LMDB sichergestellt, und das Projekt soll unter einer anderen (genehmigten) OSI Lizenz, Apache 2.0, und nicht der OpenLDAP Public License).
  • 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 einem B+-Baum und wird dabei äußerst hohe Leistung bieten, während es gleichzeitig eine Reihe grundsätzlicher Nachteile von MDBX und LMDB beseitigt. Insbesondere wird das Problem der "langen Lesevorgänge" behoben, das sich als "Aufblähen" der Datenbank zeigt, da die Müllbereinigung durch lange lesende Transaktionen blockiert wird. Zu den neuen Funktionen von MithrilDB gehören:

  • Unterstützung für die Ablage der Datenbank auf mehreren heterogenen Speichermedien: HDD, SSD und nichtflüchtigem Speicher.
  • Optimale Strategien für "wertvolle" und "weniger wertvolle", für "heiße", "warme" und "kalte" Daten.
  • Verwendung von Merkle-Bäumen zur Überwachung der Integrität der Datenbank.
  • Optionale Nutzung von WAL und deutlich höhere Leistung in Szenarien mit intensiven Schreibvorgängen und Integritätsgarantien.
  • Fauler nachlaufender Datenfix auf Festplatten.

Quelle: opennet.ru

60GB SSD 8Gb DDR4