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。
參考連結
相關文章
- 塊儲存 檔案儲存 物件儲存物件
- 檔案儲存
- CIFS檔案的儲存————SMB
- Flutter持久化儲存之檔案儲存Flutter持久化
- 用IPFS和以太坊儲存資料
- 以太坊和IPFS如何儲存資料
- Android中的資料儲存之檔案儲存Android
- Android 檔案儲存Android
- hive檔案儲存格式Hive
- 儲存檔案到本地
- InnoDB儲存引擎檔案儲存引擎
- 06、hdfs檔案儲存
- android: 檔案儲存Android
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- RAC歸檔配置方案:使用NFS共享儲存儲存歸檔檔案NFS
- 如何將MAC的檔案儲存至NAS網路儲存?Mac
- IOS資料儲存之檔案沙盒儲存iOS
- 企業檔案安全儲存
- 修改並儲存hosts檔案
- 淺談Android的檔案儲存Android
- 從資料儲存發展史看IPFS/Filecoin
- Mac儲存檔案找不到要儲存的位置怎麼設定Mac
- Matlab將.mat檔案儲存為.txt檔案Matlab
- CEPH分散式儲存搭建(物件、塊、檔案三大儲存)分散式物件
- laradock 檔案儲存遇見的坑
- python儲存檔案的幾種方法Python
- 簡單檔案的上傳與儲存
- Android 檔案儲存淺析Android
- python 儲存檔案jsonPythonJSON
- Python -讀取,儲存檔案Python
- App檔案儲存 getFilesDir()--getExternalFilesDir()APP
- SAPI訓練檔案儲存位置API
- store下載檔案儲存位置
- 載入和儲存properties檔案
- 將圖片檔案儲存到Oracle的儲存過程Oracle儲存過程
- 通過IPFS技術解決NFT的永久儲存問題
- 杉巖物件儲存當底座,IPFS:這下穩了物件
- win10沒儲存的檔案怎麼恢復_win10檔案未儲存的恢復方法Win10