Zweite Release-Kandidatin libmdbx v1.0 nach fĂŒnf Jahren Entwicklung.

Bibliothek libmdbx ist ein wesentlich ĂŒberarbeiteter Nachfolger von LMDB — einer extrem leistungsfĂ€higen, kompakten eingebetteten SchlĂŒssel-Wert-Datenbank.
Die aktuelle Version v0.5 ist eine technische Veröffentlichung, die den Abschluss von Entwicklungsarbeiten markiert und den Übergang zur Phase der öffentlichen finalen Tests und Stabilisierung einleitet, gefolgt von der Bildung der ersten vollstĂ€ndigen Version der Bibliothek.

LMDB ist eine recht bekannte transaktionale eingebettete Datenbank-Management-System der Klasse 'SchlĂŒssel-Wert' basierend auf B+-BĂ€umen ohne Vorsorgeprotokollierung, die es einer Vielzahl von Multithread-Prozessen ermöglicht, nebenlĂ€ufig und Ă€ußerst effizient mit einer lokal geteilten (nicht netzwerkbasierten) Datenbank zu arbeiten. Im Vergleich dazu ist MDBX schneller und zuverlĂ€ssiger als LMDB; dabei bewahrt libmdbx alle wesentlichen Funktionen seines Vorfahren, wie ACID und nicht-blockierendes Lesen mit linearer Skalierung ĂŒber CPU-Kerne sowie einige neue Funktionen hinzuzufĂŒgen.

Die Beschreibung der Unterschiede und Verbesserungen von libmdbx im Vergleich zu LMDB ist einen eigenen Artikel wert (geplante Veröffentlichung auf 'Habr' und 'Medium'). Hier sei jedoch auf die wichtigsten und auffÀlligsten Punkte verwiesen:

  • 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.
  • SchĂ€tzung des Umfangs 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.

Die veröffentlichte Release-Kandidatin von libmdbx ist das Ergebnis der Entscheidung (siehe unten) zur Trennung der Projekte MDBX und MithrilDB im August 2019. Dabei wurde in libmdbx beschlossen, den (rationalen) Maximum an technischem Schulden zu beseitigen und die Bibliothek zu stabilisieren. TatsĂ€chlich wurde in diesem Bereich 2-3 Mal mehr erreicht, als ursprĂŒnglich geschĂ€tzt und geplant:

  • UnterstĂŒtzung fĂŒr Mac OS und Plattformen der 'zweiten Schicht': 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 sanitisiert, alle Warnungen bei der Compilation mit -Wpedantic, alle Warnungen von Coverity Static Analyzer usw. wurden beseitigt.
  • Aktualisierung der API-Beschreibung.
  • Amalgamierung 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).
  • DurchgĂ€ngige 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 DatenbankbeschĂ€digungen bei unsachgemĂ€ĂŸer Nutzung zu vermeiden.
  • 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, nicht OpenLDAP Foundation).
  • Die Trennung hilft, 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 der Platzierung von Datenbanken auf mehreren heterogenen TrĂ€gern: 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 IntegritĂ€tskontrolle von Datenbanken.
  • Optionale Verwendung von WAL und deutlich höhere Leistung in Szenarien mit intensiven SchreibvorgĂ€ngen und IntegritĂ€tsgarantien.
  • Faul nacheilende Datenspeicherung auf Festplatten.

Quelle: linux.org.ru

60GB SSD 8Gb DDR4