Reth 導入二維過濾映射索引,減少日誌查詢的區塊掃描
2D-Filtermaps in Reth
場次摘要
Ayush 介紹在 Reth 實作二維過濾映射索引的專案。他指出,區塊繁忙時,布隆過濾器(Bloom filter)容易飽和,誤判使查詢讀取不必要的交易收據。過濾映射可直接找出候選區塊,減少掃描區塊標頭。他參照 Geth 的實作移植索引規則,並逐層比對測試資料。 專案以背景服務索引已最終確認的區塊,存入獨立的 RocksDB 資料庫。日誌查詢介面 eth_getLogs 依索引涵蓋範圍選擇查詢路徑,最後仍須讀取收據。他的測試中,低頻地址與錢包轉帳查詢較快,但涵蓋一千個交易池的去中心化交易所查詢較慢。目前鏈頭附近約一百個區塊仍使用布隆過濾器;若要索引至最新區塊,還須實作鏈重組處理。
值得記下的 5 件事
- [0:40]
減少誤判造成的不必要收據讀取 Ayush 指出,繁忙區塊讓布隆過濾器飽和,增加誤判
過濾映射可不經逐一掃描區塊標頭就找出候選區塊;他表示這種方法誤判較少且不會漏掉符合條件的項目,但仍須讀取候選區塊的交易收據,確認實際結果。
- [3:20]
用全域位置找回候選區塊 索引將地址與日誌資料依序編入全域位置,再以地址或日誌主題的雜湊值計算列,以全域位置計算欄
資料庫只儲存非空列;查詢時讀取對應欄,推回可能的全域位置及所屬區塊,再讀取收據。
- [4:20]
獨立 RocksDB 減少寫入互相等待 Ayush 最初使用 Reth 採用的 MDBX 資料庫,但其單一寫入者限制讓區塊與索引寫入互相等待
他將索引移至獨立的 RocksDB,並表示可用三次範圍刪除清理資料,不必透過資料庫游標逐筆刪除。
- [9:00]
測試效益取決於能否減少收據讀取 他在同一台機器、使用相同執行檔比較啟用與停用索引的結果,並模擬每次查詢兩千個區塊
低頻地址測試由逾四百秒降至不到一秒;涵蓋一千個交易池的查詢卻慢約百分之八,因兩條路徑讀取同量收據,索引還增加計算與讀取成本。這些數字僅代表他展示的測試。
- [6:20]
尚未索引的範圍仍使用布隆過濾器 背景服務目前只索引已最終確認的區塊
查詢落在索引範圍內時使用過濾映射,否則使用布隆過濾器。Ayush 表示鏈頭附近約一百個區塊尚未索引;若要延伸到最新區塊,仍須實作鏈重組處理,檢查點與反向回補索引也列為後續工作。
更多來自 DEVCON 8
Arrow 的硬體 DAO 實驗:AI 協作、在地製造與責任分工
A DAO Shipped an Aircraft: What It Takes to Coordinate Atoms with Tokens
Thomas Garrison
Kohaku:以 SDK 將隱私與安全功能帶入以太坊錢包
Kohaku : privacy for everyone, by default
Nico、Vitalik
私密區塊鏈的取捨:隱私、去中心化與合約協作
Private State, Public Network: The Tradeoffs Behind Privacy
Zachary Williamson