Freigegeben wurde die leistungsstarke eingebettete Datenbank libmdbx 0.10.

Nach drei Monaten Entwicklung wurde die Bibliothek libmdbx 0.10.0 (MDBX) mit der Implementierung einer hochleistungsfähigen, kompakten eingebetteten Key-Value-Datenbank veröffentlicht. Der Code von libmdbx wird unter der OpenLDAP Public License vertrieben. libmdbx ist eine umfassende Überarbeitung der LMDB-Datenbank und die Entwickler behaupten, dass sie in Bezug auf Zuverlässigkeit, Funktionsumfang und Leistung ihren Vorläufer übertrifft. Es wird angegeben, dass libmdbx in CRUD-Szenarien bis zu 20 % schneller ist als LMDB und bis zu 30 % schneller, wenn bei der Kompilierung von libmdbx die interne Kontrolle auf ein mit LMDB vergleichbares Niveau deaktiviert wird.

Libmdbx bietet ACID, strikte Serialisierung von Änderungen und nicht-blockierendes Lesen mit linearer Skalierung über CPU-Kerne. In libmdbx wird großer Wert auf die Codequalität, die Stabilität der API, Tests und automatische Überprüfungen gelegt. Unterstützt werden Auto-Komprimierung, automatisches Größenmanagement der Datenbank, ein einheitliches Datenbankformat für 32-Bit- und 64-Bit-Bauten sowie die Schätzung von Abfragevolumina für Bereiche (range query estimation). Es wird ein Tool zur Überprüfung der Integrität der Datenbankstruktur mit einigen Wiederherstellungsmöglichkeiten mitgeliefert. Seit 2016 wird das Projekt von der Firma Positive Technologies finanziert und wird seit 2017 in ihren Produkten verwendet; die von der US-Regierung gegen Positive Technologies verhängten Sanktionen haben keinen merklichen Einfluss.

Wesentliche Neuerungen, Ergänzungen und Fehlerbehebungen, die seit der letzten Ausgabe hinzugefügt wurden:

  • Verfügbar sind die Bindungen für Ruby von Mahlon E. Smith und eine Testversion der Bindungen für Python von Noel Kuntze, außerdem wurden die Bindungen für GoLang von Alexey Sharov aktualisiert.
  • Für den Modus „MDBX_WRITEMAP“, bei dem die Daten der Datenbank direkt im RAM geändert werden, wurde ein „transparenter Spillover“ für die auf die Festplatte übertragenen geänderten Seiten der Datenbank implementiert. Nun sind diese Seiten nach Abschluss jeder Operation sofort vollständig bereit für die Festplatte, und der OS-Kernel kann die geänderten Seiten selbstständig auf die Disk schreiben, ohne dass die Fixierung der Transaktion deren Modifikation erfordert. In der Folge kann in stark belasteten Szenarien mit unzureichendem RAM das Volumen der Festplattenoperationen um bis zu 2 Mal reduziert werden.
  • Die Eliminierung seit langem ungenutzter Schattenkopien geänderter Seiten wurde implementiert, wobei die Seiten mit großen/längeren Werten bevorzugt werden, die in den überwiegenden meisten Szenarien nur einmal pro Transaktion geändert werden. Dadurch wird der Datenaustausch mit der Festplatte verringert und die Leistung in Szenarien mit sehr großen Transaktionen erhöht.
  • Ein „intelligenter“ Modus zum Aufteilen von Seiten beim Einfügen von Schlüsseln wurde implementiert. Jetzt wird beim Einfügen sortierter Sequenzen automatisch eine vollständige Befüllung der Seiten gewährleistet, während in anderen Fällen eine optimale Baum-Balancierung erfolgt. Infolgedessen werden im Durchschnitt die Datenbankseiten optimierter gefüllt, und der B-Baum wird ausgeglichener, was sich positiv auf die Leistung auswirkt.
  • Statistiken zu Seitenoperationen wurden hinzugefügt, die eine präzise Bewertung der Kosten von Modifikationsoperationen an der Datenbank ermöglichen.
  • Mehr als ein Dutzend Mängel und Fehler wurden behoben, darunter: Probleme beim Erstellen mit MinGW, die Verwendung von `std::filesystem::path` in iOS <= 13.0, Erstellung mit Zielversionen für ältere Windows-Versionen usw.
  • Insgesamt wurden mehr als 200 Änderungen in 66 Dateien vorgenommen, etwa 6500 Zeilen hinzugefügt und etwa 4500 entfernt.

Besonders erwähnenswert ist die Wahl des Projekts Turbo-Geth (Turbo-Fork von Go-Ethereum), libmdbx als neues Backend für die Speicherung zu verwenden, sowie das Team des Projekts (insbesondere Alexey Sharov, Artem Vorotnikov und Alexey Akhunov) für ihre große Unterstützung bei Tests unter extremen Nutzungsszenarien zu danken. Insbesondere wurde so ein Defekt im Management des vorzeitigen Lesens/Cachens entdeckt und behoben, der in schwer reproduzierbaren Szenarien mit großen Datenbanken zu einer Verschlechterung der Leistung führte.

Quelle: opennet.ru

60GB SSD 8Gb DDR4