Wie hoch ist die Speicherauslastung für die Überprüfung von Transaktionseingaben?

Immer wenn eine Transaktion von einem Knoten empfangen wird, überprüft der Knoten ihre Gültigkeit. Zu diesem Zweck prüft es für jede Transaktionseingabe, ob diese Eingabe Teil des UTXO-Sets ist. Nach meinem Verständnis wird das UTXO-Set in der Chainstate-Datenbank gespeichert, die in einer LevelDBStruktur gespeichert ist.

Ich dachte zuvor, dass das UTXO-Set im Speicher verfügbar gehalten wird, aber da ich erfahren habe, dass es derzeit etwa 1,2 GiB groß ist , erscheint das unwahrscheinlich.

Ich gehe also davon aus, dass die Chainstate-DB auf der Festplatte gespeichert ist, aber mehrmals pro Sekunde darauf zugegriffen wird, um Transaktionseingaben zu überprüfen. Welche Speicherauslastung verursacht dies auf einem Knoten?

Es muss auf der Festplatte gespeichert werden, damit es beim Schließen und erneuten Öffnen der Anwendung erhalten bleibt. Das meiste (oder auf Systemen mit genügend Speicher: alles) davon befindet sich jedoch auch im RAM. Jedes Mal, wenn es das UTXO-Set durchsuchen muss, lädt es die verwendeten Chunks in den Speicher und hält sie dort so lange wie möglich. Ich nehme an, nach ein paar Scans wird das meiste davon im Gedächtnis sein. Wenn es nicht in den Speicher passt, erhöht es schnell die Festplatten-E/A und verlangsamt alles.

Antworten (1)

Sie haben Recht, UTXO-Set wird mit leveldb auf der Festplatte im Verzeichnis .bitcoin/chainstate gespeichert. Es wird in komprimiertem Zustand gespeichert und hat eine aktuelle Größe von etwa 1,5 GB

Um den Zugriff zu beschleunigen, verwendet Bitcoind einen In-Memory-Cache, der mit der Option -dbcache konfiguriert werden kann.

Ich gehe also davon aus, dass die Chainstate-DB auf der Festplatte gespeichert ist, aber mehrmals pro Sekunde darauf zugegriffen wird, um Transaktionseingaben zu überprüfen. Welche Speicherauslastung verursacht dies auf einem Knoten?

Der Zugriff auf die leveldb-Datenbank selbst ist wie der Zugriff auf jede andere nosql-Datenbank. Sie suchen im Grunde nach dem Schlüssel, der der utxo ist, und erhalten einen Wert als Ausgabe, den Sie deserialisieren und in einer Speichervariablen speichern müssen

Im Wesentlichen füllt es also -dbcacheden Speicher langfristig mit einigen Spitzen, wenn ich auf die Datenbank zugreife?
Ja, es wird auch Speicher von Mempool belegt, der von maxmempoolsize gesteuert werden kann. Außerdem gibt es einige kleinere Caches, die von leveldb und anderen Codeteilen verwaltet werden, die mir nicht bekannt sind. Dies sind Speicher-Cache-Optionen, die für die Konfiguration in Bitcoin dokumentiert sind