原来IPFS是这样存储文件的

2020-08-08 11:01 栏目:经验之谈 来源:网络整理 查看()

总结

IPFS-星际文件系统是一个点对点分布式文件存储系统。IPFS的愿景是在全世界建立分布式网络,以取代传统的集中式服务器模式。所有ipfs节点形成一个分布式网络,每个节点都可以存储文件。用户可以从IPFS建立的网络获得分布式哈希表中的文件,从而实现新一代完全分散的网络,旨在取代现有的万维网。IPFS功能丰富,包括分布式哈希表联网、文件存储、Bitswap文件交换等。本文主要介绍IPFS的文件存储原理。当文件上传到IPFS节点进行存储时,该节点将阻止该文件并存储它。每个文件都是以默克尔有向无环图(Merkle DAG)格式组织的,并且用Merkle DAG的根散列来表示文件。本文将详细介绍IPFS存储,IPFS的版本是v0.6.0.

国际开发委员会

在引入IPFS存储文件的分离之前,引入了一个重要的标识符——CID(内容标识)。CID是用于表示IPFS内容的标识符,可用于表示文件或文件块。如下所示,CID是一个字符串,主要由版本、编解码器和多哈希组成。版本分为v0和v1版本,其中v0版本CID可由v0Builder生成,V0版本CID以Qm字符串开头,v1版本CID可由V1Builder生成。CID的v1版本主要包含三个部分编解码器,MhType和MhLength,其中编解码器是表示内容的编码类型,如DagProtobuf (protobuf格式)、DagCBOR (cbor格式)等。MhType是一种哈希算法,例如SHA2_256(默认哈希算法)、SHA2_512、SHA3_256、SHa3 \u

原来IPFS是这样存储文件的

IPFS组件简介

IPFS使用IpfsNode表示IPFS的节点,相关组件存储如下:

原来IPFS是这样存储文件的

下图显示了这些组件之间的关系。顶层是DAGService,它结合了块服务组件,而块服务结合了GCBlockstore组件,然后gcblockstore包含两个组件,基本块和GCLocker,最后基本块结合了原始的块存储组件。

原来IPFS是这样存储文件的

接下来,分别介绍这些组件的功能:

固定:固定代码的管理器,主要负责固定文件或文件块(也称为块)的代码,固定代码的块不会被垃圾收集器丢弃。上传文件的最后一个文件的CID将被修复以防止垃圾收集。

Blockstore:GCBlockstore类型,它结合了两个组件:Blockstore和GCLocker。

基本块:原始块存储,提供获取/放置/拥有/删除块等操作。

GCLocker:用于锁定块存储并保护块存储免受垃圾收集。

块:提供块的服务,组合块存储组件,并提供诸如获取块/获取块、添加块/添加块、删除块等操作。

达格:IPFS的默克尔达格的服务,它结合了块服务组件,并提供诸如获取/获取许多、添加/添加许多、删除/移除许多等操作。

文件存储过程

上传文件时,将文件添加到IPFS仓库。上传过程如下图所示。默克尔的民主德国的结构产生了。生成的结构有两种布局:平衡和涓流。本文介绍了缺省平衡结构。首先,生成根作为根节点,然后分割文件。默认情况下,根据256千字节的大小读取数据块,生成叶节点,然后是节点1和节点2。根节点将具有指向悬挂在根节点上的叶节点节点1和节点2的链接。根节点下可链接的叶节点数量有限,IPFS的默认设置为174(已定义链接的总大小为8KB,每个链接的大小为34 8 5 [sha256多哈希大小无名称protobuf成帧],默认链接数为8192/47,约为174)。

原来IPFS是这样存储文件的

如下图所示,在超过174个节点后,将创建一个新的根节点并将其链接到旧的根节点,新的块将由新的根节点直接链接为节点3(在此由节点3简化,实际上是第175个节点)。

原来IPFS是这样存储文件的

添加新块时,节点34将作为节点3和节点4的父节点生成,节点34包含分别链接到节点3和节点4的两条链路。

原来IPFS是这样存储文件的

IPFS产生了一个。初始化期间的ipfs目录,如下图所示,其中blocks是存储文件块的目录,而datastore是存储文件系统的根哈希的leveldb数据库,等等。和与相关配置相关联的配置文件。ipfs目录已存储。

原来IPFS是这样存储文件的

经过以上步骤,文件已被切割成碎片,并转换成Merkle DAG结构。接下来,详细描述如何存储每个块的过程。

如下图所示,当存储一个块时,dagService(它实现DAGService接口)首先调用添加来添加它;

在那之后,街区;服务(实现块服务接口)调用添加块来添加块;

调用弧缓存的放入,这是存储块的弧策略缓存;

之后,验证局调用Put进行存储,验证局主要检查CID的合法性,并判断其是否合法;

然后块存储(实现块存储接口)调用Put进行存储,并在Put函数中转换CID,调用dshelp的CidToDsKey方法将CID转换为存储的密钥;

然后调用关键转换的放置。数据存储,当前缀/块被添加到关键字时,前缀将在Put函数中拼写;

然后调用测量的Put函数,这是挂载的封装;

之后,调用mount的Put函数,mount的结构与IPFS配置文件的结构相对应,并根据关键字和相应的度量搜索相应的数据存储;因为前缀是/blocks;

调用度量的看跌函数;

最后,调用flatfs的Put函数,Put函数调用doPut。最后,调用encode函数来指定完整块写入的目录为/home/test/。ipfs/blocks/WD,其中WD来自blocks/ciqfsqatubeifdecktnghokpee 7 wupm5 nnsjcdrom 6 yhektwdy中倒数第二个字符。这样,块被写入目录下的文件。

原来IPFS是这样存储文件的

原来IPFS是这样存储文件的

摘要

IPFS的文件存储格式为默克尔DAG格式,每层的链接大小为174,如果超过将重新调整。在文件存储过程中,有多个数据存储区被组合和封装,每个数据存储区都有一个功能。例如,arccache仅缓存块,而VerifBS仅检查CID。这样做的好处是每个组件都有明确的功能,但缺点是组合太多,调用深度太深。此外,接口是内部使用的,几个组件已经实现了这个接口,不方便阅读。

IPFS的存储模式是为互联网用户设计的。由于其开放性,所有节点都可以随意访问,能够访问IPFS网络的节点可以自由搜索内容,不适合直接作为企业的文件存储服务。然而,由于其分布式存储特性,很容易动态扩展存储容量。通过结合节点认证机制和分布式哈希表搜索内容的剥离,它可以成为企业的分布式存储系统。此外,通过与区块链技术和供应链下的协同技术合作,可以轻松解决供应链上存储容量不足的问题。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发