IPFS七层协议栈之文件层

2018-09-14  本文已影响0人  建怀

IPFS七层协议栈之文件层

文件层(Files)

  IPFS定义了一组对象,用于在Merkle DAG之上对版本化文件系统进行建模。这个对象模型类似于著名版本控制软件Git的数据结构:

文件对象:BLOB

  blob对象包含一个可寻址的数据单元,表示一个文件,当文件比较小,不需要切片时,就以Blob对象的形式存储在IPFS网络之中,如下所示:

{
    "data":"some data here", //blobs 无links
}

文件对象:LIST

  list对象由多个连接在一起的Blob组成,通常存储的是一个大文件。从某种意义上说,list的功能更适合数据互相连接的文件系统。由于list可以包含其他list,所以可能形成包括链接列表和平衡树在内的拓扑结构,如下:

{
    "data":["blob","list","blob"],  //lists有一个对象类型的数组作为数据
    "links":[
        {
            "hash":"XLYkgq61DYaq8Nhkcqy7LcnSA7dSHQ78x",
            "size":189458
        },
        {
            "hash":"XLHBNsgoepUDKL8dkd9Hesa5io9sdxi7n",
            "size":19442
        },
        {
            "hash":"XLWVQKJII8v7dggkfdhHSFlkaw9yjs7dj",
            "size":5286
        } // 在links中lists是没有名字的
    ]
}

文件对象:TREE

  在IPFS中,Tree对象与Git的tree类似,代表一个目录,或者一个名字到哈希值的映射表,哈希值表示blob,list,其他的tree,或commit,结构如下:

{
    "data":["blob","list","blob"], // trees有一个对象类型的数组作为数据
    "links":[
        {
            "hash":"XLYkgq61DYaq8Nhkcqy7LcnSA7dSHQ78x",
            "name":"less",
            "size":189458
        },
        {
            "hash":"XLHBNsgoepUDKL8dkd9Hesa5io9sdxi7n",
            "name":"script",
            "size":19442
        },
        {
            "hash":"XLWVQKJII8v7dggkfdhHSFlkaw9yjs7dj",
            "name":"template",
            "size":5286
        } // trees是没有名字的
    ]
}

文件对象:COMMIT

  IPFS中,commit对象代表任何对象在版本历史记录中的一个快照,它与Git的commit也非常类似,但它可以指向任何类型的对象。

版本控制

  commit对象代表着一个对象在历史版本中的一个特定快照。两个不同的commit之间相互比较对象数据,可以揭露出两个不同版本文件系统的区别。IPFS可以实现Git版本控制工具的所有功能,同时也可以兼容Git。

文件系统路径

  Merkle DAG可以看到,可以使用字符串路径API遍历IPFS对象在系统上的文件路径地址。

将文件分割成LIST和BLOB

  版本控制和分发大文件最主要的挑战:找到一个正确的方法来将它们分隔成独立的块。与其认为IPFS可以为每个不同类型的文件提供正确的分隔方法,不如说IPFS提供了以下的几个可选选择:

路径查找性能

  基于路径的访问需要遍历整个对象图,检索每个对象需要在DHT中查找它的Key值,连接到对等点并检索对应的数据块。这是一笔相当大的性能开销,特别是在查找的路径具有多个路径时。IPFS充分考虑了这一点,并设计了如下的方式来缓解:

对象关系图

上图的对象关系中的ttt111的flattened tree结构如下:

{
    "data":["tree","blob","tree","list","blob","blob"],
    "links":[
        {"hash":"<ttt222-hash>","size":1234,"name":"ttt222-name"},
        {"hash":"<bbb111-hash>","size":123,"name":"ttt222-name/bbb111-name"},
        {"hash":"<ttt333-hash>","size":3456,"name":"ttt333-name"},
        {"hash":"<lll111-hash>","size":578,"name":"ttt333-name/lll111-name"},
        {"hash":"<bbb222-hash>","size":22,"name":"ttt333-name/lll111-name/bbb222-name"},
        {"hash":"<bbb222-hash>","size":22,"name":"bbb222-name"},
    ]
}

文章借鉴《IPFS与区块链:原理与实战》推荐大家购买正版书籍。

上一篇下一篇

猜你喜欢

热点阅读