Nach fünfjähriger Entwicklungszeit wurde der zweite Release Candidate für libmdbx 1.0 veröffentlicht

Verfügbar zum Testen des zweiten Kandidaten für Bibliotheksveröffentlichungen libmdbx mit der Implementierung einer leistungsstarken, kompakten eingebetteten Schlüsselwertdatenbank. Die aktuelle Version (0.5) ist eine technische Version, die den Abschluss aller Verbesserungen und den Übergang zur Phase der öffentlichen Endprüfung und Stabilisierung mit der anschließenden Bildung der ersten vollständigen Version der Bibliothek markiert. libmdbx-Code vertrieben von lizenziert unter der OpenLDAP Public License.

Die MDBX-Bibliothek ist ein deutlich überarbeiteter Fork von LMDB — transaktionales eingebettetes DBMS der „Schlüsselwert“-Klasse basierend auf Baum B+ без proaktive Protokollierung, wodurch Multithread-Prozesse wettbewerbsfähig und effizient mit einer lokal gemeinsam genutzten Datenbank (nicht im Netzwerk) arbeiten können. MDBX wiederum ist schneller und zuverlässiger als LMDB und behält gleichzeitig alle wichtigen Funktionen seines Vorfahren bei, wie z ACID und nicht blockierende Lesevorgänge mit linearer Skalierung über CPU-Kerne hinweg.

Die wichtigsten Unterschiede zwischen MDBX und LMDB:

  • Grundsätzlich wird mehr Wert auf Codequalität, Tests und automatische Prüfungen gelegt.
  • Deutlich mehr Kontrolle im laufenden Betrieb, von der Parameterprüfung bis zum internen Audit der Datenbankstrukturen.
  • Automatische Komprimierung und automatische Verwaltung der Datenbankgröße.
  • Ein einzelnes Datenbankformat für 32-Bit- und 64-Bit-Assemblys.
  • Schätzung von Probenvolumina nach Bereichen (Bereichsabfrageschätzung).
  • Unterstützung für Schlüssel, die doppelt so groß sind wie Pfannkuchen, und vom Benutzer wählbare Datenbankseitengröße.

Der Release Candidate von libmdbx ist das Ergebnis einer im August 2019 getroffenen Entscheidung, die Projekte MDBX und MithrilDB zu trennen. Gleichzeitig beschloss libmdbx, die (rationale) maximale technische Verschuldung zu beseitigen und die Bibliothek zu stabilisieren. Tatsächlich wurde in der vorgesehenen Richtung zwei- bis dreimal mehr getan als ursprünglich geschätzt und geplant:

  • Unterstützung für macOS und Second-Tier-Plattformen wurde implementiert: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. AIX- und HP-UX-Unterstützung kann bei Bedarf hinzugefügt werden.
  • Der Code wurde mit Undefiniertem Behavior Sanitizer und Address Sanitizer bereinigt, alle Warnungen beim Erstellen mit „-Wpedantic“, alle Coverity Static Analyzer-Warnungen usw. wurden entfernt.
  • Aktualisieren API-Beschreibungen.
  • Zusammenführung (Zusammenführung) des Quellcodes zur einfacheren Einbettung.
  • CMake-Unterstützung.
  • Unterstützung für verschachtelte Transaktionen.
  • Verwenden von bootid, um festzustellen, ob das Betriebssystem neu gestartet wurde (Dirty Database Stop).
  • End-to-End-Zählung aktualisierter/alter Seiten und erweiterter Transaktionsinformationen.
  • Option MDBX_ACCEDE zum Herstellen einer Verbindung zu einer bereits geöffneten Datenbank im kompatiblen Modus.
  • Verwenden OFD-Blockierung wenn verfügbar.
  • Hot-Backup im Rohr.
  • Spezieller, optimierter interner Sortieralgorithmus (bis zu 2–3 Mal schneller als „qsort()“ und bis zu 30 % schneller als „std::sort()“).
  • Die maximale Schlüssellänge wurde erhöht.
  • Automatische Steuerung des Vorauslesens (Strategie zum Zwischenspeichern von Datenbankdateien im Speicher).
  • Aggressivere und schnellere Selbstverdichtung.
  • Eine optimalere Strategie zum Zusammenführen von B+-Baumseiten.
  • Kontrolle nicht-lokaler Dateisysteme (NFS, Samba usw.), um Datenbankschäden bei falscher Verwendung zu verhindern.
  • Die Testreihe wurde erweitert.

Die Entwicklung der „nächsten“ Version von libmdbx wird als separates Projekt fortgesetzt MithrilDB, während der Entwicklungsvektor der „aktuellen“ Version von MDBX darauf abzielt, den Funktionsumfang einzufrieren und zu stabilisieren. Diese Entscheidung wurde aus drei Gründen getroffen:

  • Völlig inkompatibel: MithrilDB erfordert ein anderes (inkompatibles) Datenbankdateiformat und eine andere (inkompatible) API, um alle geplanten Funktionen zu implementieren.
  • Neuer Quellcode: Der MithrilDB-Quellcode wurde unabhängig von LMDB lizenziert und das Projekt selbst soll unter einer anderen Lizenz veröffentlicht werden (genehmigt von). OSI Apache 2.0-Lizenz, nicht Öffentliche OpenLDAP-Lizenz).
  • Die Trennung vermeidet potenzielle Verwirrung, schafft mehr Sicherheit und gewährleistet einen unabhängigen Weg für Projekte.

MithrilDB basiert ebenso wie MDBX auf Baum B+ und wird zudem eine extrem hohe Leistung aufweisen und gleichzeitig eine Reihe grundlegender Nachteile von MDBX und LMDB beseitigen. Insbesondere wird das Problem der „Long Reads“ beseitigt, das sich in einem „Anschwellen“ der Datenbank äußert, weil die Garbage-Verarbeitung durch Long-Reading-Transaktionen blockiert wird. Zu den neuen MithrilDB-Funktionen gehören:

  • Unterstützung für die Platzierung der Datenbank auf mehreren heterogenen Medien: Festplatte, SSD und nichtflüchtiger Speicher.
  • Optimale Strategien für „wertvolle“ und „geringwertige“, für „heiße“, „warme“ und „kalte“ Daten.
  • Verwendung des Merkle-Baums zur Überwachung der Datenbankintegrität.
  • Optionaler Einsatz von WAL und deutlich verbesserte Leistung in schreibintensiven Szenarien mit Datenintegritätsgarantien.
  • Lazy Catch-up-Übertragung von Daten auf Festplatten.

Source: opennet.ru

Kommentar hinzufügen