Die Veröffentlichung der eingebetteten Datenbank libmdbx 0.13.7 ist verfügbar.

Die Version 0.13.7 der Bibliothek libmdbx (MDBX) wurde veröffentlicht, die eine leistungsstarke kompakte embedded Schlüssel-Wert-Datenbank implementiert. Der Code von libmdbx wird unter der Apache 2.0-Lizenz veröffentlicht. Alle aktuellen 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 für die Sprachen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno und Scala. Projekte, die libmdbx verwenden, sind unter anderem 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:

  • Ein kritischer Fehler in der Funktionalität von mdbx_env_resurrect_after_fork() beim Einsatz von SysV-Semaphoren wurde behoben. Der Fehler trat nur nach der Erzeugung eines Kindprozesses mittels fork() während einer laufenden schreibenden Transaktion auf, was zu einer fehlerhaften Funktion der Semaphoren und anschließend zu verschiedenen Fehlern, einschließlich einer Beschädigung der Datenbank, führte. Das Problem bestand seit der Einführung von mdbx_env_resurrect_after_fork() und betraf macOS sowie POSIX-Plattformen, die mit der Option MDBX_LOCKING=5 kompiliert wurden.
  • Ein Problem in der API für das Kopieren von Datenbanken wurde behoben, das auf anderen als Linux-basierten POSIX-Systemen (hauptsächlich auf macOS) und in bestimmten Fällen auftrat, wenn die Zieldatei in einem nicht lokalen Dateisystem gespeichert war. Das Problem führte zur Rückgabe des Fehlers EWOULDBLOCK/EAGAIN, was durch eine Unzulänglichkeit/Konflikt der Sperren fcntl(F_SETLK) und flock() im Betriebssystemkern bedingt war. Die Fehlerbehandlung beim Erfassen von Dateisperren in der Kopier-API auf POSIX-Systemen wurde überarbeitet.
  • Ein Fehler, der zu einer unerwarteten Rückgabe von MDBX_BAD_DBI führte, wurde behoben, wenn mehrere Transaktionen innerhalb eines Prozesses gleichzeitig nach dem Öffnen der Datenbank gestartet wurden.
  • Ein Fehler, der zu einer unerwarteten Rückgabe von MDBX_DBS_FULL führte, wurde behoben, wenn bereits geöffnete Tabellen erneut geöffnet wurden und das Limit der geöffneten DBI-Deskriptoren erreicht war.
  • Ein Build-Fehler für die Android-Plattform wurde behoben, der bei einer expliziten Definition von _FILE_OFFSET_BITS auftrat.
  • Ein Fehler wurde behoben, der ENOMEM anstelle von MDBX_ENOMEM verwendete. Dies könnte zu Problemen beim Bauen auf nicht-POSIX/Windows-Plattformen führen, abhängig von der Konfiguration und/oder Version des SDK.
  • Mehrere fehlerhafte Assert-Prüfungen wurden entweder korrigiert oder entfernt, die zu Abstürzen von Debug-Builds in bestimmten Situationen führten. Dies betrifft insbesondere den Code der Funktionen txn_end(), txn_lock() und txn_unlock() sowohl unter Windows als auch auf POSIX.
  • Unwesentliche MSVC-Warnungen wurden behoben. Die Warnungen C5286 und C5287 wurden deaktiviert.
  • Die Logik zum Verzicht auf OFD-Sperren auf POSIX-Plattformen wurde überarbeitet. Jetzt werden neben EINVAL auch zusätzliche Fehlercodes (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP) berücksichtigt, wodurch die kompilierte Bibliothek in einigen Fällen funktioniert, wenn der aktuelle Kernel/Container/Rätsel die erforderlichen Systemaufrufe nicht unterstützt.
  • Der Testframework hat Unterstützung für die Option „—numa “ zur Bindung des stochastischen Tests an den NUMA-Knoten hinzugefügt. Im battery/tmux-Skript wurde eine explizite Verteilung auf NUMA-Knoten eingeführt, was die Effizienz beim Testen auf NUMA-Maschinen erheblich verbessert hat.
  • Im stochastischen Skript wurde die zufällige Reihenfolge zum Start einzelner Tests implementiert.

Quelle: opennet.ru

60GB SSD 8Gb DDR4