Veröffentlichung des leistungsstarken eingebetteten DBMS libmdbx 0.10

Nach dreimonatiger Entwicklungszeit wurde libmdbx 0.10.0 (MDBX) veröffentlicht, das eine leistungsstarke, kompakte eingebettete Schlüsselwertdatenbank implementiert. Der libmdbx-Code ist unter der OpenLDAP Public License lizenziert. libmdbx ist eine tiefgreifende Überarbeitung des LMDB-DBMS und ist laut den Entwicklern seinem Vorgänger in Bezug auf Zuverlässigkeit, Funktionsumfang und Leistung überlegen. Es wird angegeben, dass libmdbx in CRUD-Szenarien bis zu 20 % schneller als LMDB ist und bis zu 30 % schneller, wenn interne Kontrollen deaktiviert werden, wenn libmdbx auf ein mit LMDB vergleichbares Niveau erstellt wird.

Libmdbx bietet ACID, starke Änderungsserialisierung und nicht blockierende Lesevorgänge, die linear über CPU-Kerne hinweg skaliert werden. Bei libmdbx wird viel Wert auf Codequalität, stabilen API-Betrieb, Tests und automatische Prüfungen gelegt. Unterstützt automatische Komprimierung, automatische Datenbankgrößenverwaltung, ein einziges Datenbankformat für 32-Bit- und 64-Bit-Assemblys sowie Bereichsabfrageschätzung. Ein Dienstprogramm zur Überprüfung der Integrität der Datenbankstruktur mit einigen Wiederherstellungsfunktionen wird mitgeliefert. Seit 2016 wird das Projekt von Positive Technologies gefördert und seit 2017 in seinen Produkten eingesetzt, auch die von der US-Regierung gegen Positive Technologies verhängten Sanktionen haben keine spürbaren Auswirkungen.

Wichtige Neuerungen, Verbesserungen und Korrekturen seit der letzten Version:

  • Eine Ruby-Bindung von Mahlon E. Smith und eine Testversion der Python-Bindungen von Noel Kuntze sind verfügbar, und GoLang-Bindungen von Alexey Sharov wurden aktualisiert.
  • Für den Modus „MDBX_WRITEMAP“ wird beim Ändern von Datenbankdaten direkt im RAM ein „transparenter Überlauf“ geänderter Datenbankseiten auf die Festplatte implementiert. Jetzt sind solche Seiten nach Abschluss jedes Vorgangs sofort vollständig zum Schreiben auf die Festplatte bereit und der Betriebssystemkernel kann die geänderten Seiten selbstständig auf die Festplatte schreiben, und für die Durchführung einer Transaktion ist keine Änderung erforderlich. Dadurch kann in Auslastungsszenarien mit unzureichendem RAM das Volumen der Festplattenvorgänge um bis zu das Zweifache reduziert werden.
  • Die Entfernung lange ungenutzter Schattenkopien geänderter Seiten wurde implementiert, wobei die Entfernung von Seiten mit großen/langen Werten bevorzugt wird, die in den allermeisten Szenarien nur einmal pro Transaktion geändert werden. Das Ergebnis ist ein geringerer Festplattenverkehr und eine verbesserte Leistung in Szenarien mit sehr großen Transaktionen.
  • Es wurde ein „intelligenter“ Modus zum Teilen von Seiten beim Einfügen von Schlüsseln implementiert. Beim Einfügen geordneter Sequenzen werden nun die Seiten automatisch vollständig gefüllt und in anderen Fällen ist der Baum optimaler ausbalanciert. Dadurch werden Datenbankseiten im Durchschnitt optimaler gefüllt und der B-Baum ist ausgeglichener, was sich positiv auf die Performance auswirkt.
  • Es wurden Statistiken zu Vorgängen mit Seiten hinzugefügt, die es Ihnen ermöglichen, die Kosten für die Änderung von Vorgängen mit der Datenbank genau abzuschätzen.
  • Mehr als ein Dutzend Fehler und Bugs wurden behoben, darunter: Probleme beim Erstellen mit MinGW, Verwendung von „std::filesystem::path“ in iOS <= 13.0, Erstellen für ältere Windows-Versionen usw.
  • Insgesamt wurden mehr als 200 Änderungen an 66 Dateien vorgenommen, etwa 6500 Zeilen hinzugefügt und etwa 4500 gelöscht.

Unabhängig davon möchte ich die Wahl des Turbo-Geth-Projekts (ein Turbo-Fork von Go-Ethereum) libmdbx als neues Speicher-Backend erwähnen und auch dem Projektteam (insbesondere Alexey Sharov, Artyom Vorotnikov und Alexey Akhunov) dafür danken Große Hilfe beim Testen in extremen Anwendungsszenarien. Insbesondere wurde ein Fehler in der Read-Ahead-/Caching-Steuerung entdeckt und behoben, der in schwer reproduzierbaren Szenarien mit großen Datenbanken zu Leistungseinbußen führte.

Source: opennet.ru

Kommentar hinzufügen