# Local Snapshots 摘要 現階段主網 DB 的大小都在幾十 GB,當到達一定程度時 IF 會進行 global snapshot 來裁減整個 DB 的容量。而在去年的路線圖就有提到 local snapshot 的實作(當時稱為 auto snapshot),希望讓各自節點能決定自己的大小與何時去進行 snapshot。 ## 對節點的影響 - 啟用節點時不必再透過整個龐大的資料庫檔案來同步,可以用較小的 snapshot file 來同步 - 容量需求大幅降低,甚至是幾百 MB 就可以 - 不會再有 global snapshot,也就是上次的就是最後一次了 ## 實作方式 在了解實作之前,我們得先知道 Tangle 運作的機制和特性: - Tangle 是個資料結構,由尚未確認的 tips 所組成,這些 tips 會隨著時間增加確定性 - 交易往前追朔越深,一個未被確認的交易就越不可能突然達成共識 - 驗證交易是否達成共識,只需要最近的交易紀錄以及目前帳本的餘額狀態 ### 修剪舊筆交易並保存餘額 - 我們先選一個夠老的交易作為 snapshot 的支柱 - 再來就裁減掉此交易前面直接或間接驗證到的交易,並以此清理 DB - 清掉舊交易之前,我們會檢查那些餘額會被影響到,並記錄其最終狀態到 snapshot file 中 ### Solid Entry Points 當然只是這樣事還不夠的,刪剪掉交易的同時,也會讓新加入的節點可能找不到需要的完整交易紀錄。所以 snapshot file 裏不只是包含帳本餘額的最終狀態,還必須再加上以下細節: - 首先新加入正在同步的節點需要只到走到一連串的交易何時能覺得這個 subtangle 是 solid 的。我們要從被刪除的交易中找出並決定這些有被驗證且最終沒被孤立的交易,作為 solid entry point 並將其 hash 寫到 snapshot file 裡 - 當節點走到這些交易就不會再往前找被同意者,並紀錄交易為 solid 這樣節點就可以非常迅速地在幾分鐘內透過 snapshot file 來重啟同步,而不用下載整個 DB。 ### Seen Milestones 略,旨在更迅速地同步 ## 進階閱讀 [IRI with local snapshot (coordinator exists)](https://hackmd.io/s/BJoJSjNV7)