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
