Die Veröffentlichung von libmdbx 0.11.7. Der Transfer der Entwicklung zu GitFlic nach der Sperrung auf GitHub.

Die Bibliothek libmdbx 0.11.7 (MDBX) wurde veröffentlicht, die eine leistungsstarke, kompakte eingebettete Schlüssel-Wert-Datenbank implementiert. Der Code von libmdbx wird unter der OpenLDAP Public License veröffentlicht. Alle gängigen Betriebssysteme und Architekturen werden unterstützt, einschließlich des russischen Elbrus 2000.

Diese Veröffentlichung ist besonders bemerkenswert wegen der Migration des Projekts zu GitFlic, nachdem die Verwaltung von GitHub am 15. April 2022 ohne Vorwarnung und ohne Angabe von Gründen libmdbx zusammen mit vielen anderen Projekten entfernt und den Zugang für zahlreiche Entwickler gesperrt hat, die mit Unternehmen verbunden sind, die unter US-Sanktionen stehen. Aus Sicht der Benutzer verwandelten sich alle Seiten, das Repository und die Forks des Projekts plötzlich in eine „404“-Seite, ohne Möglichkeit zur Kommunikation oder Klärung der Gründe.

Leider sind fast alle Issues verloren gegangen, in denen es viele Fragen mit detaillierten Antworten gab sowie zahlreiche Diskussionen. Der Verlust dieser Informationen stellt den einzigen objektiven Schaden dar, den die GitHub-Administration dem Projekt zugefügt hat. Teilweise bleiben Kopien der Diskussionen im Archiv von archive.org verfügbar.

Der Verlust der aufgebauten CI-Szenarien und Infrastruktur (die für OpenSource-Projekte kostenlos zugänglich war) hat dazu geführt, dass eine Überprüfung, Vereinheitlichung und Beseitigung kleiner technischer Schulden erforderlich wurde. Derzeit ist CI fast wieder im ursprünglichen Umfang hergestellt, mit Ausnahme der Builds und Testdurchläufe für alle BSD- und Solaris-Varianten. Bemerkenswert ist, dass nach den Maßnahmen von GitHub keine Erklärungen oder Benachrichtigungen eingegangen sind, abgesehen von einer Erinnerung an die Notwendigkeit der Zahlung und Versuchen, Geld abzubuchen.

Seit der letzten Nachricht über die Veröffentlichung von libmdbx v0.11.3, neben der Wiederherstellung nach den Maßnahmen von GitHub, sind die folgenden Verbesserungen und Korrekturen zu vermerken:

  • Ein Workaround für den festgestellten Incoherency-Effekt im gemeinsamen Seiten- und Puffer-Cache im Linux-Kernel wurde hinzugefügt. In Systemen, in denen der Seiten- und Puffer-Cache tatsächlich zusammengeführt wird, hat der Kernel keinen Sinn, Speicher für zwei Datenkopien bei der Schreibvorgang in eine bereits im Speicher angezeigte Datei zu verschwenden. Daher werden die beschriebenen Daten durch das Mapping im Speicher sichtbar, bevor der Systemaufruf write() abgeschlossen ist, selbst wenn die Daten noch nicht auf die Festplatte geschrieben wurden.

    Insgesamt ist ein anderes Verhalten nicht effizient, da bei einer verzögerten Zusammenführung dennoch Sperren für die Seitenlisten ergriffen, Daten kopiert oder PTE angepasst werden müssen. Daher galt die stillschweigende Regel der Kohärenz seit 1989, als im SRV4 der unified buffer cache eingeführt wurde. Die Entdeckung seltsamer Störungen in stark belasteten Nutzungsszenarien von libmdbx erforderte viel Arbeit. Zuerst um das Problem zu reproduzieren, dann um Hypothesen zu verifizieren und die Änderungen zu überprüfen.

    Jetzt kann man mit Zuversicht sagen, dass das Problem eindeutig identifiziert, lokalisiert und zuverlässig behoben wurde, trotz der ganzen Komplexität und Spezifität des Reproduktionsszenarios. Zusätzlich wurde die Funktion des Umgehungsmechanismus von einem der Entwickler von Erigon (Ethereum) bestätigt, bei dem der Schutz in einer Debug-Version durch eine überflüssige Assert-Prüfung als Regression manifestierte.

    Es sollte angemerkt werden, dass im Kontext der breiten Anwendung von libmdbx in Arbeitsprojekten eine zuverlässige Funktionalität wichtiger ist als die Klärung, ob es sich um einen "Fehler oder ein Merkmal" handelt und inwiefern man sich auf eine solche Kohärenz verlassen kann, ganz zu schweigen von der Suche nach den Gründen für die Inkohärenz innerhalb des Linux-Kerns. Daher handelt es sich hier um die Behebung eines Problems, das die Benutzer betreffen könnte.

  • Der Rückschritt bei der Entstehung des Fehlers EXDEV (Cross-device link) wurde behoben, wenn eine Datenbank ohne Kompaktierung auf ein anderes Dateisystem kopiert wird, sowohl über die API als auch mit dem Tool mdbx_copy.
  • Kris Zyp hat die Unterstützung von libmdbx in Deno implementiert. Kai Wetlesen hat das Packaging von RPM für Fedora realisiert. David Bouyssié hat Bindings für Scala erstellt.
  • Die Verarbeitung des Wertes, der durch die Option MDBX_opt_rp_augment_limit bei der Verarbeitung großer Transaktionen in umfangreichen Datenbanken festgelegt wird, wurde korrigiert. Zuvor konnten aufgrund eines Fehlers zusätzliche Aktionen durchgeführt werden, was manchmal die Leistung in Implementierungen von Ethereum (Erigon/Akula/Silkworm) und Projekten der Binance Chain beeinträchtigte.
  • Eine Vielzahl von Fehlern, einschließlich im C++-API, wurde behoben. Viele Probleme beim Kompilieren in seltenen und exotischen Konfigurationen wurden beseitigt. Eine vollständige Liste aller bedeutenden Verbesserungen finden Sie im ChangeLog.
  • Insgesamt wurden 185 Änderungen in 89 Dateien vorgenommen, etwa 3300 Linien hinzugefügt und etwa 4100 entfernt. Mehr wurde entfernt, hauptsächlich aufgrund der Bereinigung bereits nutzloser technischer Dateien im Zusammenhang mit GitHub und abhängigen Diensten.

Historisch gesehen ist libmdbx eine umfassende Überarbeitung der Datenbank LMDB und übertrifft ihren Vorfahren in Bezug auf Zuverlässigkeit, Funktionsumfang und Leistung. Im Vergleich zu LMDB wird libmdbx ein großes Augenmerk auf die Codequalität, die stabile API-Arbeit, Tests und automatische Prüfungen gelegt. Ein Dienstprogramm zur Überprüfung der Integrität der Datenbankstruktur wird mit einigen Wiederherstellungsfunktionen bereitgestellt.

Technologisch bietet libmdbx ACID, strikte Serialisierung von Änderungen und nicht blockierendes Lesen mit linearer Skalierung über CPU-Kerne. Automatische Kompaktheit, automatische Datenbankgrößenverwaltung und Schätzung der Abfragevolumina über Bereiche (Range Query Estimation) werden unterstützt. Seit 2016 wird das Projekt von Positive Technologies finanziert und ist seit 2017 Teil ihrer Produkte.

Für libmdbx steht eine umfangreiche C++-API zur Verfügung, sowie von Enthusiasten unterstützte Bindungen an die Sprachen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno und Scala.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster