ipfs pin 簡(jiǎn)介
pin 在英文中是大頭針拉宗、釘住的意思逞度。在 ipfs 中, pin 表示將文件長(zhǎng)期保存在本地污筷,不被垃圾回收证薇。
ipfs pin 原理
每個(gè)文件塊都有自己的 pin 狀態(tài),由 pin 管理器 Pinner 進(jìn)行管理效拭。
ipfs 在做 GC 等操作時(shí)暂吉,會(huì)根據(jù)每個(gè)文件塊在 pin 狀態(tài)胖秒,對(duì)其做出相應(yīng)的處理。
文件塊 的 5 種 Pin 狀態(tài)
Recursive 狀態(tài)
文件塊樹(shù)
被遞歸添加到 pin 中慕的,根文件塊的狀態(tài)是 Recursive扒怖,非根文件塊的狀態(tài)是 Indirect
Direct 狀態(tài)
只有目標(biāo)文件塊添加到 pin 中, 子孫塊不做處理,目標(biāo)文件塊的狀態(tài)就是 Direct
Indirect 狀態(tài)
文件塊樹(shù)
被遞歸添加到 pin 中业稼,根文件塊的狀態(tài)是 Recursive盗痒,非根文件塊的狀態(tài)是 Indirect
Internal 狀態(tài)
ipfs 使用文件塊來(lái)保存 pinner 狀態(tài),這些文件塊的狀態(tài)就是 Internal
NotPinned 狀態(tài)
文件塊沒(méi)有被 pin低散,在 GC 時(shí)會(huì)被刪除
存儲(chǔ)文件塊 pin 狀態(tài)的數(shù)據(jù)結(jié)構(gòu)
查詢(xún)文件塊的 pin 狀態(tài)
文件塊的 pin 狀態(tài)持久化
根據(jù) cid 列表長(zhǎng)度的不同俯邓,會(huì)有兩種情況。
- 情況1熔号,如果 cid 列表的長(zhǎng)度小等于 8192稽鞭,僅會(huì)生成一個(gè)
internal ipld node
,該 node 的 links 記錄 cid 列表的所有 cid引镊。 - 情況2朦蕴,如果 cid 列表的長(zhǎng)度大于 8192,會(huì)對(duì)每個(gè) cid 做 hash 后取模弟头,放到 256 個(gè)桶中吩抓。遍歷每個(gè)桶,如果桶不為空赴恨,則生成一個(gè)
internal ipld node
疹娶,并且該 node 的 links 記錄桶內(nèi)所有 cid。然后伦连,會(huì)生成一個(gè)internal ipld node
, 該 node 的 links 記錄所有非空桶對(duì)應(yīng)的internal ipld node
雨饺。
在圖中,direct cid 列表
屬于情況1惑淳,recurse cid 列表
屬于情況2额港。internal ipld node A
的 links 包含所有狀態(tài)為 direct
的 cid,internal ipld node B
的 links 包含的都是狀態(tài)為 internal
的 cid歧焦,這些internal ipld node
包含所有狀態(tài)為recurse
的cid移斩。root internal ipld node
的 links 包含internal ipld node A
和internal ipld node B
。
root internal ipld node
的 cid 會(huì)被存儲(chǔ)到 leveldb 中倚舀。
ipfs pin 使用
展示
列出所有被 pin 的塊
ipfs pin ls
列出 pin 為指定狀態(tài)的塊
ipfs pin ls -t direct
ipfs pin ls -t indirect
ipfs pin ls -t recursive
增加
遞歸 pin
ipfs pin add QmZ98HahPRKRcfoYoJchZNKzFxSHFWw6WxvQc1hpFEoFca
直接 pin(只 pin 指定 hash 的文件塊)
ipfs pin add --recursive=false QmZ98HahPRKRcfoYoJchZNKzFxSHFWw6WxvQc1hpFEoFca
移除
遞歸從 pin 中移除
ipfs pin rm QmZ98HahPRKRcfoYoJchZNKzFxSHFWw6WxvQc1hpFEoFca
直接從 pin 中移除
ipfs pin rm --recursive=false QmZ98HahPRKRcfoYoJchZNKzFxSHFWw6WxvQc1hpFEoFca
參考版本
ipfs 在快速演進(jìn)叹哭,所有使用方式和原理有可能會(huì)發(fā)生改變忍宋,在此標(biāo)注該文章對(duì)應(yīng)的 ipfs 版本號(hào)痕貌。
ipfs version 0.4.18-dev