Database
Bitcrust 使用的新數據庫設計如何工作?
我最近了解了 Rust 中的一個新的比特幣節點實現,稱為 Bitcrust。他們表示,他們發現了一種將比特幣區塊鏈儲存為“支出樹”而不是跟踪 UTXO 集的新方法,並聲稱通過這種方式顯著提高了數據庫互動的性能。
有人可以解釋一下Bitcrust-db是如何實現的嗎?
快速查看程式碼後,我的理解是,他們僅對最近 3 個區塊(https://github.com/tomasvdw/bitcrust/blob/556375ccfaa81ca241b25f7b5b7f00fb97d5bd6b/src/store/spend_tree/記錄.rs#L296 )
如果順序掃描沒有找到匹配項(如果輸入來自較舊的塊),他們使用這個巨大的 2^58 位點陣圖,稀疏映射到稀疏文件(如果文件系統不支持稀疏文件,他們將使用每個包含至少一個位集的“範圍”有 16GB 的儲存空間)
使用 58 位索引的程式碼: https ://github.com/tomasvdw/bitcrust/blob/556375ccfaa81ca241b25f7b5b7f00fb97d5bd6b/src/store/spend_index.rs#L67 (更準確地說,是 U64 值映射的 52 位索引)
那裡的“雜湊”變數不包含真正的雜湊,它只是內部儲存索引到 58 位值的映射:https ://github.com/tomasvdw/bitcrust/blob/556375ccfaa81ca241b25f7b5b7f00fb97d5bd6b/src/store/spend_tree /record.rs#L168