Die Version 0.13.6 der Bibliothek libmdbx (MDBX) wurde veröffentlicht, die eine leistungsstarke, kompakte, eingebettete Schlüssel-Wert-Datenbank implementiert. Der Code von libmdbx wird unter der Apache 2.0-Lizenz veröffentlicht. Alle gängigen Betriebssysteme und Architekturen werden unterstützt, einschließlich des russischen Elbrus 2000. Für libmdbx steht eine umfangreiche API für C++ zur Verfügung, sowie von Enthusiasten unterstützte Bindungen an die Sprachen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno und Scala. Zu den Projekten, die libmdbx verwenden, gehören Isar, Erigon und Reth sowie Entwicklungen von StarkWare und Positive Technologies.
Historisch gesehen ist libmdbx eine tiefgreifende Überarbeitung der Datenbank LMDB und übertrifft ihren Vorgänger hinsichtlich Zuverlässigkeit, Funktionsumfang und Leistung. Im Vergleich zu LMDB wird bei libmdbx großer Wert auf die Codequalität, die stabile API-Arbeit, das Testing und automatisierte Überprüfungen gelegt. Es wird ein Tool zur Überprüfung der Integrität der Datenbankstruktur mit einigen Wiederherstellungsfunktionen bereitgestellt. Technologisch bietet libmdbx ACID, strikte Serialisierung von Änderungen und nicht-blockierendes Lesen mit linearer Skalierung über CPU-Kerne hinweg. Auto-Compaction, automatische Verwaltung der Datenbankgröße und die Schätzung von Abfragevolumina über Bereiche (Range Query Estimation) werden unterstützt.
Hauptänderungen:
- Verhaltensänderung: Wenn der Cursor nicht von seiner aktuellen Transaktion getrennt werden kann, gibt die Funktion mdbx_cursor_bind() nun MDBX_EINVAL anstelle von MDBX_BAD_TXN zurück.
- Um potenzielle Probleme zu vermeiden, wurde die Verwendung von copy_file_range() auf Linux-Kernen 5.3 – 5.18 deaktiviert.
- Der Wurf std::invalid_argument erfolgt nun mit der klaren Meldung MDBX_EINVAL.
- Regression bei der Verwendung von Cursorn für DBI=0 (auch bekannt als GC/FreeDB) in lesenden Transaktionen behoben.
- Regression in Form eines EAGAIN-Fehlers beim Kopieren der Datenbank auf NFS und CIFS/SMB behoben.
- Bei der Überarbeitung und Erweiterung der API wurde beim Kopieren eine Dateisperre sowohl mit fcntl() als auch mit flock() eingeführt. Abhängig von der Version des lokalen Kernels, der Version des entfernten Server NFS und von den Mount-Optionen könnte dies zur Rückgabe des POSIX-Fehlers EAGAIN (11 auf den meisten Plattformen, einschließlich Linux) geführt haben.
- Ein Fehler bei merge/rebase innerhalb von mdbx_txn_release_all_cursors_ex() wurde behoben, der zu unerwarteten Fehlern MDBX_EBADSIGN und Speicherlecks führen konnte.
- Die Assert-Prüfung im Abschlussweg von verschachtelten Transaktionen wurde korrigiert.
- Die Möglichkeit, einen unerwarteten Fehler MDBX_BUSY aus mdbx_txn_lock(dont_wait=false) zurückzugeben, wurde beseitigt.
- Um die Kompatibilität mit GCC 15.x im C23-Modus zu gewährleisten, wurde die Reihenfolge der Attributangaben für Funktionen geändert.
Quelle: opennet.ru
