IPFS的数据存储和Filecoin有些许不同,主要方面是数据硬盘存储的位置。
IPFS的数据存储是谁的的数据谁自己硬盘存储,也就是本地硬盘存储。存储后,会在IPFS网络广播,“我存储哈希为Qm...的数据了”,因为哈希的唯一性,如果数据的分割方法一定,那么同样的数据在网络存储中只会有一份,也就是只在本地节点存储。当有用户检索该数据时,检索数据的hash值就是key,节点会首先在DHT表(key/value存储)中查询有无该key,如果没有,到与key异或距离最近的K桶里查找,如果该K桶中的某个节点有key对应的value则返回,否则返回它认为存有value值的最可能节点,以此递归,最终找到key对应的value。然后请求节点与value(也就是节点ID)建立连接,并请求数据,同时将该key/value键值对存储到自己的DHT表中。请求节点将接收到的数据存储到ipfs缓存中,数据检索成功。该请求节点在缓存数据有效期内,同样可以为ipfs网络,提供该数据,作为原始数据的备份。
下图展示了数据存储,及检索的简单过程:
Filecoin数据存储与IPFS存储有些许不同,主要是硬盘存储不同,因为Filecoin在IPFS协议上加了激励层,以此保证存储节点正常工作,如果存储节点掉线或作恶将会受到惩罚。加了激励层的Filecoin将会保证数据更加安全。
Filecoin的存储不能存储在本地节点上,需要在存储市场上寻找合适的存储矿工,并将分割后的数据发送给存储矿工存储。
当某个节点检索该数据时,会在检索市场寻找合适的检索矿工,让其寻找数据。检索矿工根据数据的hash值,也就是key值,最终找到存储这些块数据的存储矿工,建立连接后,检索矿工会将这些块数据按序存储到本地缓存池,同时将这些数据返回给请求客户。客户得到数据后也缓存到其缓存池,通过ipfs cat命令得到数据的全部展示。
下图展示了Filecoin存储,及检索的简单过程:
注:以上的讲述内容只是简单的概述,块数据存储和检索很多细节没有描述,之后的章节中会展开分析。