LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > IPFS如何存储文件

IPFS如何存储文件

2020-04-17 FIL社区 来源:区块链网络

我之前分享过关于IPFS是如何存储文件的,近日,我在网上看到一篇文章更加详细和形象化讲解了IPFS存储文件的过程。

接下来我就和大家分享下这篇文章的内容。

在现有的互联网中,用户的数据都是存储在中心化服务器上的。

这些中心化服务器对用户数据有着绝对的控制权,这种控制权导致了绝对了特权,而这种特权往往会导致用户数据不经用户同意或授权就被滥用。

除此以外,中心化服务器还会导致可靠性方面的问题,比如数据只存储在一个服务器上时,如果这个服务器出现问题,那数据可能就会永久丢失无法恢复。

比如我们在网站abc.com上有一个猫的照片cat.png,如果我们要打开这个文件则要在网页浏览器中输入地址:abc.com/cat.png。

如果由于某些原因,这张照片从abc.com这个网站的服务器上被移走了,我们就无法通过这个方式再打开这个文件了。

或许在互联网上的某个其它地方还存在这张照片的副本,但我们却无法获取这个副本。

另外还有可能互联网上还有很多文件有同样的名字但图片内容却不同。

IPFS是利用基于内容而不是基于地址的寻址方式存储和寻找文件的。它是一种点对点的协议。

这意味着如果我们要寻找一个文件,我们不需要知道它在哪里(如上例中abc.com/cat.png),只需要知道它包含的是什么内容(QmSNssW5a9S3KVRCYMemjsTByrNNrtXFnxNYLfmDr9Vaan)。

括号中那一长串字符串是个哈希值。它是IPFS中哈希函数给每个存储文件生成的一个唯一标记。

因此如果我们要索取一个文件,我们只需要问IPFS系统“谁有这个文件(QmSNssW5a9S3KV...)”,然后IPFS系统中存储了这份文件的人给我们文件就行了。

当我们拿到文件后,如果想验证拿到的文件是不是我们需要的,文件有没损坏,只需要把我们所获得的文件的哈希值和我们向IPFS请求的哈希值进行比较就能方便地判断了。

如果哈希值一样,那我们拿到的就是我们所要的。

哈希值也能防止重复存储。如果同样的内容的文件已经在IPFS中存在了,则文件的哈希值就是同样的,IPFS就不会重复存储文件的,这优化了存储也提高了网络性能。

存储在IPFS中的文件包含两部分:

1?数据:由一个个最多256KB的数据块组成

2?联结:联结这些数据块的数组

如果存储的文件大于256KB,它就会被切分为256KB大小的一个个数据块,这些数据块被数组联结起来。

这个过程如下图所示:

在IPFS中,文件一旦被存储是不能在系统中修改的,因为修改文件会改变文件的哈希值。

那我们如何更新文件呢?IPFS用了版本控制的方法,也就是流行的Git。

IPFS会记录一个文件所有的版本,每当我们向IPFS存储一个文件,一个提交记录就会生成。

这个过程如下图所示:

我们存储在IPFS中的文件会永久存在吗?

实际上,只有重要的文件才会长期存在,而不重要的文件则会被垃圾清理器清理。

在这里所谓的“重要”是指用户是否“pin”这份文件,如果用户“pin”它,则它就被认为是重要的文件。

IPFS也存在一些问题。

最大的问题就是IPFS承诺永久存储文件,但不承诺持续存储文件。

这就是说如果一个文件存储在IPFS的节点A上,当A还联网在IPFS系统中时,我们可以拿到这个文件;当A暂时不联网了,如果它没有被垃圾清理器清理,我们还是可以拿到它。

换句话说如果我们“pin”这个文件,即便这个节点永久损坏,我们也仍然能拿到这个文件。但“Pin”也是有代价的。

此外IPFS中文件的共享并不是系统默认的功能,也就是说用户想与他人分享一个文件,就必须把文件的哈希值通过邮件,即时通信软件等方式发给其他用户。

虽然IPFS处于发展之中,但它在迈向去中心化存储的路上迈出了非常重要的一步,未来等到它的激励层Filecoin上线后,我们相信它将会有更好的表现。

参考链接:https://medium.com/block360-labs/ipfs-a-distributed-file-store-533cda4c6047

我是IPFS/Filecoin社区发起人晓熙(加入社区,联系v号: liandaoxixi),IPFS/Filecoin是全球共识最大的去中心化存储项目,我会定期在社区分享专业的资讯,为IPFS/Filecoin爱好者建设一个共赢的学习社区。

—-

编译者/作者:FIL社区

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...