← 回到 DEVCON 8

Reth 導入二維過濾映射索引,減少日誌查詢的區塊掃描

2D-Filtermaps in Reth

場次摘要

Ayush 介紹在 Reth 實作二維過濾映射索引的專案。他指出,區塊繁忙時,布隆過濾器(Bloom filter)容易飽和,誤判使查詢讀取不必要的交易收據。過濾映射可直接找出候選區塊,減少掃描區塊標頭。他參照 Geth 的實作移植索引規則,並逐層比對測試資料。 專案以背景服務索引已最終確認的區塊,存入獨立的 RocksDB 資料庫。日誌查詢介面 eth_getLogs 依索引涵蓋範圍選擇查詢路徑,最後仍須讀取收據。他的測試中,低頻地址與錢包轉帳查詢較快,但涵蓋一千個交易池的去中心化交易所查詢較慢。目前鏈頭附近約一百個區塊仍使用布隆過濾器;若要索引至最新區塊,還須實作鏈重組處理。

值得記下的 5 件事

  1. [0:40]
    減少誤判造成的不必要收據讀取 Ayush 指出,繁忙區塊讓布隆過濾器飽和,增加誤判

    過濾映射可不經逐一掃描區塊標頭就找出候選區塊;他表示這種方法誤判較少且不會漏掉符合條件的項目,但仍須讀取候選區塊的交易收據,確認實際結果。

  2. [3:20]
    用全域位置找回候選區塊 索引將地址與日誌資料依序編入全域位置,再以地址或日誌主題的雜湊值計算列,以全域位置計算欄

    資料庫只儲存非空列;查詢時讀取對應欄,推回可能的全域位置及所屬區塊,再讀取收據。

  3. [4:20]
    獨立 RocksDB 減少寫入互相等待 Ayush 最初使用 Reth 採用的 MDBX 資料庫,但其單一寫入者限制讓區塊與索引寫入互相等待

    他將索引移至獨立的 RocksDB,並表示可用三次範圍刪除清理資料,不必透過資料庫游標逐筆刪除。

  4. [9:00]
    測試效益取決於能否減少收據讀取 他在同一台機器、使用相同執行檔比較啟用與停用索引的結果,並模擬每次查詢兩千個區塊

    低頻地址測試由逾四百秒降至不到一秒;涵蓋一千個交易池的查詢卻慢約百分之八,因兩條路徑讀取同量收據,索引還增加計算與讀取成本。這些數字僅代表他展示的測試。

  5. [6:20]
    尚未索引的範圍仍使用布隆過濾器 背景服務目前只索引已最終確認的區塊

    查詢落在索引範圍內時使用過濾映射,否則使用布隆過濾器。Ayush 表示鏈頭附近約一百個區塊尚未索引;若要延伸到最新區塊,仍須實作鏈重組處理,檢查點與反向回補索引也列為後續工作。

下載摘要 下載 Word 摘要(.docx)

更多來自 DEVCON 8

訂閱