Transaction-Verification
檢查交易輸入的記憶體使用量是多少?
每當節點接收到交易時,節點都會驗證其有效性。為此,它會檢查每個交易輸入是否是 UTXO 集的一部分。據我了解,UTXO 集儲存在鏈狀態數據庫中,該數據庫保存在一個
LevelDB
結構中。我以前認為他的 UTXO 集保留在記憶體中,但由於我了解到它目前的大小約為 1.2GiB,這似乎不太可能。
因此,我假設 chainstate-db 儲存在磁碟上,但每秒訪問多次以檢查事務輸入。這會在節點上引起多少記憶體使用量?
沒錯,UTXO 集使用 leveldb 儲存在 .bitcoin/chainstate 目錄的磁碟上。它以壓縮狀態儲存,目前大小約為 1.5GB
為了加快訪問速度,bitcoind 使用記憶體記憶體,可以使用 -dbcache 選項進行配置。
因此,我假設 chainstate-db 儲存在磁碟上,但每秒訪問多次以檢查事務輸入。這會在節點上引起多少記憶體使用量?
訪問 leveldb 數據庫本身就像訪問任何其他 nosql 數據庫一樣。您基本上查找作為 utxo 的鍵並獲取一個值作為輸出,您需要將其反序列化並儲存在記憶體變數中