Veröffentlichung der leistungsstarken eingebetteten DBMS libmdbx 0.10

Nach drei Monaten Entwicklung wurde die Bibliothek libmdbx 0.10.0 (MDBX) veröffentlicht, die eine leistungsstarke, kompakte eingebettete Datenbank der Schlüssel-Wert-Klasse implementiert. Der Code von libmdbx wird unter der OpenLDAP Public License verbreitet. libmdbx ist eine umfassende Überarbeitung des DBMS LMDB und übertrifft laut den Entwicklern seinen Vorgänger in Bezug auf Zuverlässigkeit, Funktionsumfang und Leistung. Es wird behauptet, dass libmdbx in CRUD-Szenarien bis zu 20 % schneller als LMDB ist und bis zu 30 %, wenn bei der Erstellung von libmdbx die interne Überprüfung auf ein mit LMDB vergleichbares Niveau deaktiviert wird.

Libmdbx bietet ACID, strenge Serialisierung von Änderungen und nicht-blockierendes Lesen mit linearer Skalierung über CPU-Kerne. In libmdbx wird große Wert auf Codequalität, stabile API-Funktionalität, Testing und automatische Überprüfungen gelegt. Automatisches Kompaktieren, automatische Datenbankgrößenverwaltung sowie ein einheitliches Datenbankformat für 32-Bit- und 64-Bit-Versionen werden unterstützt, ebenso wie die Schätzung von Abfragevolumina über Bereiche (Range Query Estimation). Es wird ein Werkzeug zur Integritätsprüfung der Datenbankstruktur mit einigen Wiederherstellungsfunktionen bereitgestellt. Seit 2016 wird das Projekt von Positive Technologies finanziert und ist seit 2017 in deren Produkten im Einsatz. Die von der US-Regierung verhängten Sanktionen gegen Positive Technologies haben keine spürbaren Auswirkungen.

Die wichtigsten Neuerungen, Ergänzungen und Fehlerbehebungen, die nach der letzten Veröffentlichung hinzugefügt wurden:

  • Die Bindings für Ruby von Mahlon E. Smith und eine Testversion der Bindings für Python von Noel Kuntze sind verfügbar, die Bindings für GoLang von Alexey Sharov wurden aktualisiert.
  • Für den Modus „MDBX_WRITEMAP“, in dem die Datenbanken direkt im Arbeitsspeicher geändert werden, wurde eine „transparente Ablage“ der geänderten Seiten der Datenbank auf die Festplatte implementiert. Jetzt sind nach Abschluss jeder Operation diese Seiten sofort vollständig bereit für das Schreiben auf die Festplatte, und der Betriebssystemkern kann die geänderten Seiten selbstständig auf die Festplatte übertragen, wobei keine Modifikation zur Bestätigung der Transaktion erforderlich ist. Infolge dessen kann in stark belasteten Szenarien mit unzureichendem Arbeitsspeicher die Anzahl der Festplattentransaktionen um bis zu 50 % reduziert werden.
  • Es wurde eine Auslagerung von seit längerem nicht verwendeten Snapshot-Kopien geänderter Seiten realisiert, wobei Seiten mit großen/langen Werten bevorzugt ausgelagert werden. Diese werden in der überwiegenden Mehrheit der Szenarien nur einmal pro Transaktion geändert. Dadurch wird der Datenaustausch mit der Festplatte reduziert und die Leistung in Szenarien mit sehr großen Transaktionen erhöht.
  • Ein "intelligenter" Seitenpartitionierungsmodus wurde bei der Schlüsselverwendung implementiert. Nun wird beim Einfügen geordneter Sequenzen automatisch eine vollständige Seitenfüllung gewährleistet, während in anderen Fällen eine optimalere Baum-Balance erreicht wird. Dadurch werden die Datenbankseiten im Durchschnitt effizienter gefüllt, und der B-Baum wird ausgewogener, was sich positiv auf die Leistung auswirkt.
  • Es wurde eine Statistik für Seitenoperationen hinzugefügt, die eine präzise Bewertung der Kosten für modifizierende Operationen mit der Datenbank ermöglicht.
  • Über ein Dutzend Mängel und Fehler wurden behoben, darunter: Probleme beim Bauen mit MinGW, die Verwendung von `std::filesystem::path` in iOS <= 13.0, das Bauen für ältere Windows-Versionen usw.
  • Insgesamt wurden über 200 Änderungen an 66 Dateien vorgenommen, etwa 6500 Zeilen hinzugefügt und etwa 4500 entfernt.

Besonders hervorzuheben ist die Entscheidung des Projekts Turbo-Geth (Turbo-Fork von Go-Ethereum), libmdbx als neue Speicher-Backend-Lösung zu wählen. Ein Dank geht an das Team des Projekts, insbesondere an Alexey Sharov, Artem Vorotnikov und Alexey Akhunov, für die umfassende Unterstützung bei den Tests unter extremen Nutzungsszenarien. Dabei wurde ein Defekt im Management des vorsorglichen Lesens/Cachings entdeckt und behoben, der zu einer Leistungseinbuße in schwer reproduzierbaren Szenarien mit großen Datenbanken führte.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster