IPFS的檔案儲存模式
IPFS是如何進行檔案儲存的
- IPFS採用的索引結構是DHT(分散式雜湊表),資料結構是MerkleDAG(Merkle有向無環圖)
DHT(分散式雜湊表)
MerkleDAG(Merkle有向無環圖)
MerkleDAG功能
- 內容定址:使用多重雜湊來唯一識別一個資料塊的內容
- 防篡改:可以方便的檢查雜湊值來確認資料是否被篡改,如果資料被篡改或損壞,IPFS會檢測到
- 去重:由於內容相同的資料塊雜湊是相同的,可以很容去掉重複的資料,節省儲存空間
IPFS的單檔案儲存
步驟
- 1、把單個檔案拆分成若干個256KB大小的塊(block);
- 2、逐塊(block)計算blockhash,hashn=hash(blockn);
- 3、把所有的blockhash拼湊成一個陣列,再計算一次hash,便得到了檔案最終的hash,hash(file)=hash(hash1……n),並將這個hash(file)和blockhash陣列“捆綁”起來,組成一個物件,把這個物件當做一個索引結構;
- 4、把block,索引結構全部上傳給IPFS節點,檔案便同步到了IPFS網路了;
注意
- 小檔案(小於1KB)的檔案,IPFS會把資料內容直接和Hash(索引)放在一起上傳給IPFS節點,不會再額外的佔用一個block的大小
- 如果對於大的檔案進行資料的追加操作,僅僅是新增1KB的資料,也需要重新上傳嗎?事實並非如此,IPFS在儲存資料的時候,同一份資料只儲存一次,檔案是分塊(block)儲存的,hash相同的block,只會儲存一次,也就說,前面1G的內容沒有發生改變,其實IPFS並不會為這些資料分配新的空間,只會為最後1K的資料分配一個新的block,再重新上傳hash,實際佔用的空間是:1G+1K;
- 即使是不同檔案的相同部分也僅僅會儲存一份,比如電影資源的影音部分相同,但是隻有字幕部分不一樣,那麼不同的字幕會和音影資源拼接,形成新的檔案資源。這樣一來就可能會有很多檔案的索引指向同一個block,就構成了前面提到的一個資料結構——MerkleDAG。
參考連結
相關文章
- 塊儲存 檔案儲存 物件儲存物件
- 檔案儲存
- 資料儲存--檔案儲存
- Android 檔案儲存Android
- CSV檔案儲存
- 儲存json檔案JSON
- Android中的資料儲存之檔案儲存Android
- Flutter持久化儲存之檔案儲存Flutter持久化
- python 儲存檔案jsonPythonJSON
- hive檔案儲存格式Hive
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- 如何將MAC的檔案儲存至NAS網路儲存?Mac
- 用IPFS和以太坊儲存資料
- 以太坊和IPFS如何儲存資料
- python儲存檔案的幾種方法Python
- laradock 檔案儲存遇見的坑
- 設定儲存檔案的目錄
- Android 檔案儲存淺析Android
- 修改並儲存hosts檔案
- 企業檔案安全儲存
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- rac歸檔模式/非歸檔模式下檔案建至本地儲存修復方法-ORA-01157模式
- Mac儲存檔案找不到要儲存的位置怎麼設定Mac
- CEPH分散式儲存搭建(物件、塊、檔案三大儲存)分散式物件
- 使用 Docker 搭建 minio 檔案儲存Docker
- python如何分散式儲存檔案?Python分散式
- win10沒儲存的檔案怎麼恢復_win10檔案未儲存的恢復方法Win10
- 【Python3網路爬蟲開發實戰】5-資料儲存-1 檔案儲存-2 JSON檔案儲存Python爬蟲JSON
- 從資料儲存發展史看IPFS/Filecoin
- #用openfiledialog檔案和savefileDialog開啟和儲存檔案
- cad自動儲存的檔案在哪裡 cad檔案一般儲存在哪裡
- 如何獲取HDFS上檔案的儲存位置
- GitLab 之 Git LFS 大檔案儲存的配置Gitlab
- 怎麼看jupyter的檔案儲存路徑
- 資料儲存(歸檔解檔,沙河儲存)
- word怎麼恢復儲存前的檔案,word檔案恢復
- 快速理解Android檔案儲存路徑Android
- 04 磁碟儲存和檔案系統