Zweiter Kandidat für die Releases von libmdbx v1.0 nach fünf Jahren Entwicklung.

Die Bibliothek libmdbx ist ein erheblich überarbeiteter Nachfolger von LMDB – einer extrem leistungsfähigen, kompakten eingebetteten Key-Value-Datenbank.
Die aktuelle Version v0.5 ist eine technische Veröffentlichung, die den Abschluss aller Verbesserungen markiert und den Übergang zur Phase des öffentlichen finalen Tests und der Stabilisierung signalisiert, gefolgt von der Erstellung der ersten vollständigen Version der Bibliothek.

LMDB ist eine recht bekannte transaktionale eingebettete DBMS der Klasse „Key-Value“ basierend auf B+-Bäumen ohne vorausschauender Protokollierung, die es einer Vielzahl von Multithread-Prozessen ermöglicht, konkurrenzfähig und höchst effizient mit einer lokal geteilten (nicht netzwerkbasierten) Datenbank zu arbeiten. Im Gegenzug ist MDBX schneller und zuverlässiger als LMDB, während libmdbx alle Schlüsselmerkmale seines Vorfahren beibehält, wie ACID und nicht-blockierendes Lesen mit linearer Skalierung über die CPU-Kerne, und fügt zusätzlich einige Neuerungen hinzu.

Die Beschreibung der Unterschiede und Verbesserungen von libmdbx im Vergleich zu LMDB verdient einen eigenen Artikel (Veröffentlichungen sind auf „Habr“ und „Medium“ geplant). Hier sei jedoch erwähnt, was am wichtigsten und auffälligsten ist:

  • 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.
  • Bewertung der Stichprobenmenge basierend auf Bereichsabfragen.
  • Unterstützung von Schlüsseln mit doppelter Breite und vom Benutzer ausgewählter Größe der Datenbankseite.

Die veröffentlichte Release-Kandidatin libmdbx ist das Ergebnis der Entscheidung (siehe unten) zur Trennung der Projekte MDBX und MithrilDB im August 2019. Dabei wurde beschlossen, (den rationalen) technischen Schuldenmaximalbetrag zu beseitigen und die Bibliothek zu stabilisieren. Tatsächlich wurde in der angegebenen Richtung 2-3 Mal mehr erreicht, als ursprünglich geschätzt und geplant.

  • Unterstützung für Mac OS 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 mit Hilfe von Undefined Behavior Sanitizer und Address Sanitizer saniert, alle Warnungen beim Bauen mit -Wpedantic wurden beseitigt, ebenso wie alle Warnungen des Coverity Static Analyzer usw.
  • Aktualisierung der API-Beschreibung.
  • Amalgamation 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).
  • Durchgehende Zählung von aktualisierten/alten Seiten und erweiterte Informationen zu Transaktionen.
  • Option MDBX_ACCEDE zum Zugriff auf eine bereits geöffnete Datenbank im kompatiblen Modus.
  • Nutzung OFD-Sperren bei deren Verfügbarkeit.
  • Hot-Backup über Pipe.
  • Spezialisierter optimierter Algorithmus für die interne Sortierung (bis zu 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 von nicht-lokalen Dateisystemen (NFS, Samba usw.), um Datenbankbeschädigungen bei unsachgemäßer Verwendung zu verhindern.
  • Erweitertes Testset.

Die Entwicklung der 'nächsten' Version von libmdbx wird als separates Projekt fortgesetzt. MithrilDB, 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. OSI Lizenz Apache 2.0, und nicht OpenLDAP Foundation).
  • Die Trennung vermeidet potenzielle Verwirrung, trägt zu mehr Klarheit bei und gewährleistet die Unabhängigkeit des Entwicklungswegs der Projekte.

MithrilDB basiert wie MDBX ebenfalls auf B+-Bäumen 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 DB 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 des Merkle-Baums zur Überprüfung der Integrität der Datenbank.
  • Optionale Verwendung von WAL und erheblich höhere Leistung in Szenarien mit intensiven Schreibvorgängen und Garantien für die Datenintegrität.
  • Träge nachholende Datenspeicherung auf Festplatten.

Quelle: linux.org.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster