ipfs-缓存/Pinning(文件持久存储、垃圾收集机制)

Pinning

IPFS-缓存
参考URL: https://www.jianshu.com/p/8d95467bef6c

存储在blocks中的数据,有两种方式,一个是硬盘存储(永久保存),另一个是缓存存储(系统定期清理)。用户使用ipfs add添加的数据都是硬盘存储的,而ipfs get到的数据都是以缓存存储的。

Pinning 在IPFS里是一个很重要的概念,当我们每次请求一个网络上的内容的时候,IPFS总是会把内容先同步的本地提供服务,而为了防止 IPFS 存储空间不停增长,实际上使用cache 机制来处理文件, 如果文件在一段时间内没有被使用,文件会被”回收“。 Pinning 的作用就是把文件”钉“住,确保文件在本地不被”回收“。 如果是重要的文件,就可以使用 Pinning 防止文件被删除。

当我们使用ipfs add 添加文件时,默认会进行Pinning(使用其他命令获取的文件不会进行pinning)

我们可以通过ipfs pin ls查看pin过的数据

ipfs pin ls

查询下某一个hash 是否被pin:

[root@VM_0_14_centos ~]# ipfs pin ls QmVa54cW1WR7jRKDtGc7awUNYGccQixPjesraSguTK2tPX
QmVa54cW1WR7jRKDtGc7awUNYGccQixPjesraSguTK2tPX indirect through QmfUxRD5UYesb4fMWhkZXwZNqfGyfd6mgfpm1MYA1xG3kC

ipfs get获取到的数据,并没有被pin处理过,将属于缓存存储。但如果你对这份数据很感兴趣,想永久保存它,我们可以手动pin处理该数据。

ipfs pin add QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
pinned QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T recursively

如果你对这个数据不感兴趣了,我们可以解除它的pin锁定,命令ipfs pin rm -r 。 操作如下:

ipfs pin rm -r QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
unpinned QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T

这样这个数据就被解除pin了。pin列表中将不会存在这个hash值。

pin rm 的参数 -r 表示递归的删除pin 状态,对于没有pin住的文件, 如果执行GC操作 ipfs repo gc 文件会被删除。

另:ipfs cat的数据都是在blocks中存储的数据,如果blocks中没有该数据,将会从ipfs网络中请求数据。

Pin 是将文件长期保留在本地,不被垃圾回收。执行 ipfs pin ls 可以查看哪些文件在本地是持久化的,通过 add 添加的文件默认就是 pin 过的。

总结:IPFS节点保存本机文件:通过add命令都会pin、永久保存。 但不是所有文件都会永久保存,执行命令 ipfs repo gc 可以回收没有pin住的文件,释放空间。ipfs pin ls 当前节点pin的所有数据。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章