Migration von Berkeley DB zu LevelDB

Im Jahr 2013 wurde ein neuer Bitcoin-Kern veröffentlicht und eine der angeblichen Verbesserungen war die Migration von Berkeley DB zu LevelDB. Laut den Versionshinweisen auf bitcoin.org :

LevelDB, eine schnelle, nicht relationale Open-Source-Datenbank von Google, wird jetzt zum Speichern von Transaktions- und Blockindizes verwendet. LevelDB funktioniert viel besser auf Maschinen mit langsamer I/O und ist im Allgemeinen schneller .

Ähnliche Aussagen wurden von Bitcoin-Core-Entwicklern gemacht :

LevelDB – eine Open-Source-Umschreibung des eigenen Datenbanksystems von Google – wurde für Effizienz und Konsistenz auf handelsüblicher Hardware entwickelt und übertrifft BDB in einigen Umgebungen um eine Größenordnung . Vorläufige Tests mit LevelDB zeigen sehr gute Ergebnisse .

Heutzutage gibt es jedoch mehrere Kommentare im Internet, die LevelDB kritisieren. Laut LevelDB-Seite bei Wikipedia :

LevelDB ist weithin als unzuverlässig bekannt und die von ihm verwalteten Datenbanken sind anfällig für Beschädigungen. Akademische Studien zu früheren Versionen von LevelDB haben ergeben, dass die in diesen Versionen von LevelDB gespeicherten Daten unter einigen Dateisystemen nach einem Systemabsturz oder Stromausfall inkonsistent werden können. Die Beschädigung von LevelDB ist so alltäglich, dass eine Beschädigungserkennung in Anwendungen integriert werden muss, die sie verwenden.

Zusammenfassend sind die Beschwerden über LevelDB :

  • unzuverlässig und Datenbanken sind anfällig für Beschädigungen
  • mehrere Fehler aufgrund grundlegender Mängel
  • schlechte Codequalität
  • nicht mehr aktiv gepflegt (d. h. totes Projekt)

Frage 1
Sind diese Beschwerden über LevelDB richtig?

Frage 2
Wie sieht die endgültige Bilanz der Migration von Bitcoin Core von Berkeley DB zu LevelDB aus? Funktioniert LevelDB wie erwartet? Diese Migration war die richtige Wahl?

IIRC, Bitcoin verwendet BerkleyDB 4.8 für Wallet-Dateien und LevelDB für Blockchain-Indizes. Informell kann ich Ihnen sagen, dass die Beschädigung von Blockchain-Indizes bei Abstürzen sehr häufig ist, und ich fordere betroffene Benutzer normalerweise auf, die Blockchain erneut herunterzuladen.
@NickODell Weißt du, ob solche Abstürze, die du erwähnt hast, auch vor der Migration zu LevelDB aufgetreten sind?
Entschuldigung, ich weiß es nicht.
@NickODell, sollte ich mein Bitcoin Core-Datenverzeichnis (z. B. chainstate/ und blocks/) sichern, damit ich die Blockchain im Falle einer LevelDB-Beschädigung nicht erneut von Block 0 herunterladen muss?

Antworten (1)

Als jemand, der damals an dieser Migration beteiligt war, glaube ich, dass es die richtige Entscheidung war. LevelDB ist alles andere als perfekt, aber ich wüsste nicht, was ich sonst verwenden sollte.

Im Speziellen:

  • BDB ist für unsere Verwendung viel langsamer (große atomare Batch-Schreibvorgänge, kleine zufällige Lesevorgänge).
  • Es gab auch Berichte über Datenbankbeschädigungen bei BDB, zu einer Zeit, als es weit weniger intensiv genutzt wurde als LevelDB jetzt.
  • BDB ist sehr schmerzhaft zu aktualisieren. Mein Eindruck ist, dass es für Setups konzipiert wurde, bei denen ein Datenbank-Upgrade nur unter professioneller Aufsicht erfolgte. Insbesondere die für die Dauerhaftigkeit erstellten Write-Log-Dateien waren teilweise von späteren Versionen nicht lesbar. Dies ist der Grund, warum Bitcoin Core-Releases seit Jahren bei BDB 4.8 für die Brieftasche bleiben.
  • BDB hat viele Ressourcenbeschränkungen, die konfiguriert werden müssen, wobei unangemessen gewählte Werte zu netzwerkweiten Ausfällen führen können (lesen Sie insbesondere über den Vorfall vom März 2013 nach ). Die offizielle Dokumentation dazu besagt Reviewing the Lock subsystem statistics is the best way to determine this value., dass dies meines Erachtens für unseren Anwendungsfall nicht akzeptabel ist.

Während Datenbankbeschädigungen heutzutage relativ häufig gemeldet werden, bin ich der Meinung, dass es sich hauptsächlich um Hardwarefehler oder Treiberprobleme handelt. Bitcoin Core neigt dazu, Festplatten, Speicher und CPUs weitaus stärker zu belasten als die meisten Softwareprogramme, wodurch ansonsten unsichtbare Probleme auftauchen.

> "[...] Datenbankbeschädigungen werden heutzutage relativ häufig gemeldet [...]" Gibt es eine aktive LevelDB-Community, die Feedback/Unterstützung zu einem solchen Problem geben kann?
Ich persönlich sehe keine Beschädigungen, aber ich laufe auf relativ neuer Hardware und verwende Linux. Aber ich resynchronisiere die Kette wahrscheinlich im Durchschnitt einmal pro Woche für Entwicklungszwecke. Das heißt nicht, dass ich nicht glaube, dass solche Berichte echt sind, aber zumindest in einigen Fällen stellt sich heraus, dass sie auf fehlerhafte Hardware oder Speichersysteme zurückzuführen sind – in diesem Fall ist es schwer, der Datenbanksoftware die Schuld zu geben.