Veröffentlichung von DBMS libmdbx 0.11.7. Verschieben Sie die Entwicklung nach der Sperrung von GitHub auf GitFlic

Die Bibliothek libmdbx 0.11.7 (MDBX) wurde mit der Implementierung einer leistungsstarken, kompakten eingebetteten Schlüsselwertdatenbank veröffentlicht. Der libmdbx-Code wird unter der OpenLDAP Public License vertrieben. Alle aktuellen Betriebssysteme und Architekturen werden unterstützt, ebenso das russische Elbrus 2000.

Die Veröffentlichung zeichnet sich durch die Migration des Projekts zum GitFlic-Dienst aus, nachdem die GitHub-Administration libmdbx zusammen mit einer Vielzahl anderer Projekte am 15. April 2022 ohne Vorwarnung oder Erklärung entfernt hatte und gleichzeitig den Zugriff für viele Entwickler blockierte, die mit Unternehmen verbunden waren, die gefallen sind unter US-Sanktionen. Aus Sicht des Benutzers verwandelten sich alle Seiten, Repositorys und Forks des Projekts plötzlich in eine „404“-Seite, ohne dass die Möglichkeit einer Kommunikation und der Aufklärung der Gründe bestand.

Leider sind fast alle Ausgaben verloren gegangen, in denen es viele Fragen mit ausführlichen Antworten, sowie viele Diskussionen gab. Der Verlust dieser Informationen ist der einzige objektive Schaden, den die GitHub-Administration dem Projekt zufügen konnte. Teilexemplare der Diskussionen bleiben im Archiv von archive.org verfügbar.

Der Verlust integrierter CI-Skripte und Infrastruktur (die für OpenSource-Projekte kostenlos verfügbar sind) zwang uns zu einer Überarbeitung, Vereinheitlichung und Beseitigung einer kleinen technischen Schuld. Mittlerweile wurde CI fast im gleichen Umfang wiederhergestellt, mit Ausnahme von Builds und Testläufen für alle BSD- und Solaris-Varianten. Bezeichnenderweise gingen nach den Maßnahmen von GitHub keine Klarstellungen oder Benachrichtigungen ein, abgesehen von einer Erinnerung an die Notwendigkeit der Zahlung und Versuchen, Geld abzuschreiben.

Seit den letzten Nachrichten zur Veröffentlichung von libmdbx v0.11.3 sind neben der Wiederherstellung nach GitHub-Aktionen die folgenden Verbesserungen und Korrekturen erwähnenswert:

  • Es wurde eine Problemumgehung für einen erkannten Inkohärenzeffekt/Defekt im kombinierten Seiten- und Puffercache im Linux-Kernel hinzugefügt. Auf Systemen, auf denen die Seiten- und Puffer-Caches wirklich vereinheitlicht sind, macht es für den Kernel keinen Sinn, beim Schreiben in eine bereits speicherzugeordnete Datei Speicher für zwei Datenkopien zu verschwenden. Daher werden die geschriebenen Daten über die Speicherzuordnung sichtbar, bevor der Systemaufruf write() abgeschlossen ist, auch wenn die Daten noch nicht auf die Festplatte geschrieben wurden.

    Im Allgemeinen ist anderes Verhalten nicht rational, da Sie bei einer verzögerten Zusammenführung immer noch Sperren für Seitenlisten erfassen, Daten kopieren oder PTE anpassen müssen. Daher gilt die unausgesprochene Kohärenzregel seit 1989, als der einheitliche Puffercache in SRV4 erschien. Daher erforderte das Auffinden seltsamer Fehler in ausgelasteten libmdbx-Produktionsszenarien viel Arbeit. Zuerst durch die Reproduktion des Problems, dann durch die Überprüfung von Hypothesen und die Prüfung von Verbesserungen.

    Jetzt können wir mit Sicherheit sagen, dass das Problem trotz der Komplexität und Spezifität des Wiedergabeszenarios zuverlässig identifiziert, lokalisiert und zuverlässig behoben wurde. Darüber hinaus wurde die Funktion des Bypass-Mechanismus von einem der Entwickler von Erigon (Ethereum) bestätigt. In seinem Fall wurde beim Debug-Build der Schutz aufgrund einer zusätzlichen Assert-Prüfung als Regression ausgelöst.

    Es ist zu beachten, dass es im Kontext der weit verbreiteten Verwendung von libmdbx in Arbeitsprojekten grundsätzlich wichtiger ist, einen zuverlässigen Betrieb sicherzustellen, und nicht herauszufinden, „ist es ein Fehler oder ein Feature“ und ob auf diese Kohärenz Verlass ist , insbesondere nicht nach den Ursachen für Inkohärenzen innerhalb des Linux-Kernels suchen. Daher geht es hier um die Behebung eines Problems, das Benutzer betreffen könnte.

  • Eine Regression des EXDEV-Fehlers (Cross-Device Link) beim Hot-Kopieren einer Datenbank ohne Komprimierung in ein anderes Dateisystem wurde behoben, sowohl über die API als auch mit dem Dienstprogramm mdbx_copy.
  • Kris Zyp hat die Unterstützung für libmdbx in Deno implementiert. Kai Wetlesen hat RPMs für Fedora gepackt. David Bouyssié implementierte Bindungen für Scala.
  • Die Behandlung des durch die Option MDBX_opt_rp_augment_limit festgelegten Werts bei der Verarbeitung großer Transaktionen in großen Datenbanken wurde korrigiert. Zuvor konnten aufgrund eines Fehlers unnötige Aktionen ausgeführt werden, was manchmal die Leistung in Ethereum-Implementierungen (Erigon/Akula/Silkworm) und Binance-Chain-Projekten beeinträchtigte.
  • Viele Fehler wurden behoben, auch in der C++-API. Viele Build-Probleme in seltenen und exotischen Konfigurationen wurden behoben. Eine vollständige Liste aller wesentlichen Verbesserungen finden Sie im ChangeLog.
  • Insgesamt wurden 185 Änderungen an 89 Dateien vorgenommen, ≈3300 Zeilen hinzugefügt, ≈4100 gelöscht. Weitere Entfernungen wurden hauptsächlich aufgrund der Bereinigung bereits nutzloser technischer Dateien im Zusammenhang mit GitHub und abhängigen Diensten vorgenommen.

Historisch gesehen ist libmdbx eine tiefgreifende Neugestaltung des LMDB-DBMS und übertrifft seinen Vorgänger in Bezug auf Zuverlässigkeit, Funktionsumfang und Leistung. Im Vergleich zu LMDB legt libmdbx großen Wert auf Codequalität, API-Stabilität, Tests und automatisierte Prüfungen. Im Lieferumfang einiger Wiederherstellungsoptionen ist ein Dienstprogramm zur Überprüfung der Integrität der Datenbankstruktur enthalten.

Technologisch bietet libmdbx ACID, strikte Änderungsserialisierung und nicht blockierende Lesevorgänge mit linearer Skalierung über CPU-Kerne hinweg. Autokompaktifizierung, automatische Datenbankgrößenverwaltung und Bereichsabfrageschätzung werden unterstützt. Seit 2016 wird das Projekt von Positive Technologies gefördert und kommt seit 2017 in seinen Produkten zum Einsatz.

libmdbx bietet eine entwickelte C++-API sowie von Enthusiasten unterstützte Bindungen an Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Source: opennet.ru

Kommentar hinzufügen