Zweiter Release Candidate für libmdbx v1.0 nach fünf Jahren Entwicklungszeit.

Bibliothek libmdbx ist ein deutlich überarbeiteter Nachkomme von LMDB – einer extrem leistungsstarken, kompakten eingebetteten Schlüsselwertdatenbank.
Die aktuelle Version v0.5 ist eine technische Veröffentlichung, 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 Veröffentlichung der Bibliothek markiert.

LMDB ist ein ziemlich bekanntes transaktionales eingebettetes Schlüsselwert-DBMS, das auf basiert Baum B+ без proaktive Protokollierung, was es einem Schwarm von Multithread-Prozessen ermöglicht, wettbewerbsfähig und äußerst effizient mit einer lokal gemeinsam genutzten Datenbank (nicht im Netzwerk) zu arbeiten. MDBX wiederum ist schneller und zuverlässiger als LMDB, während libmdbx alle wichtigen Funktionen seines Vorfahren beibehält, wie z ACID und nicht blockierende Lesevorgänge mit linearer Skalierung über CPU-Kerne hinweg und fügt außerdem mehrere neue hinzu.

Eine Beschreibung der Unterschiede und Verbesserungen von libmdbx im Vergleich zu LMDB verdient einen separaten Artikel (Veröffentlichung geplant auf Habré und Medium). Hier ist es angebracht, das Wichtigste und Auffälligste zu erwähnen:

  • 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 der Stichprobengröße 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 der Entscheidung (siehe unten), die Projekte MDBX und MithrilDB im August 2019 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 Mac OS 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 Undefined 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 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.
  • Spezialisierter 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 Lizenz Apache 2.0Und nicht OpenLDAP Foundation).
  • Die Trennung vermeidet potenzielle Verwirrung, sorgt für mehr Sicherheit und stellt sicher, dass Projekte einen unabhängigen Weg nach vorne haben.

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 höhere Leistung in schreibintensiven Szenarien und Garantien der Datenintegrität.
  • Lazy Catch-up-Fixierung von Daten auf Festplatten.

Source: linux.org.ru

Kommentar hinzufügen