IPFS系列 - 默克有向无环图(Merkle DAG)
Merkle DAG的全称是Merkle Directed Acyclic Graph(默克有向无环图)。它是在Merkle Tree的基础上构建的,Merkle Tree由美国计算机学家Merkle于1979年申请了专利。
Merkle DAG跟 Merkle Tree
Merkle DAG跟Merkle Tree很相似,但不完全一样,Merkle DAG不需要进行树的平衡操作,非叶子节点允许包含数据等。ipfs add命令将从指定的文件中的数据中创建Merkle DAG。遵循unixfs数据格式(protobuf),意味着文件被分解成块,然后使用“链接节点”以树状结构排列,连接在一起,给定文件的“散列”实际上是DAG中根节点的散列。
当文件的内容超过256k或者add的是一个目录时,文件将会被拆分成block存储,并使用link nodes重排列成类似tree的一种结构。如何去理解unixfs数据格式呢,比如自己创建一个block,使用如下命令:
echo "block test" | ipfs block put
自己创建block不能用ipfs cat命令查看,因为ipfs cat查看的基于unixfs data格式的数据。
Merkle DAG的功能
Merkle DAG在功能上与Merkle Tree很大不同,Merkle Tree主要为了验证,例如验证数字签名,以及比特币Merkle Proof;对Merkle DAG而言,主要目的有如下三个:
- 内容寻址:使用多种哈希来唯一识别一个数据块的内容。
- 防篡改:方便的检查哈希值来确认数据是否被篡改。
- 去重:相同内容的数据块有相同哈希值,可去掉重复的数据,节省存储空间。
其中第3条是IPFS系统最为重要的一个特性,在IPFS系统中,每个Blob的大小限制在256KB(暂定为256KB,这个值可以根据实际的性能需求进行修改)以内,那些相同的数据就能通过Merkle DAG过滤掉,只需增加一个文件引用,而不需要占据存储空间。
同时每个节点可以 ipfs pin 某个资源, 将其永久保存在本地, 提高全网的冗余度
默认情况下, 通过 ipfs add 添加的资源是自动固定在本地仓库空间中
数据对象格式
定义Merkle DAG的对象格式,IPFSObject是IPFSde存储结构,限制每个数据大小在256K以内,在IPFSObject对象里,保存两部分,一个是Link,用于保存其他的分块数据的引用,另一个是data为本对象内容。Link主要包含三部分,Link的名字,Hash和Size。Link只是对一个IPFSObject的引用。这样设计的好处是结合Git,Merkle DAG会极大减少存储空间消耗。如果对源文件进行部分修改,那么可能只是对很少的IPFSObject进行了修改,就没必要对全部内容进行读写修改。如下是IPFSObject和Link的数据结构:
type IPFSObject struct{links []IPFSLinkdata []byte
}
type IPFSLink struct{Name stringHash MultihashSize int
}
- 往期精彩回顾:
- 区块链知识系列
- 密码学系列
- 共识系列
- 公链调研系列
- 以太坊系列
- EOS系列
- 智能合约系列
- Token系列
IPFS系列 - 默克有向无环图(Merkle DAG)相关推荐
- java 有向无环图 树_拓扑排序-有向无环图(DAG, Directed Acyclic Graph)
条件: 1.每个顶点出现且只出现一次. 2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面. 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说. 一 ...
- 有向无环图(DAG)的温故知新
当我们学习数据结构的时候,总是觉得很枯燥,而当我们解决实际问题的时候,又往往因为对数据结构了解的匮乏而束手无策.从问题中来,到问题中去,在某一点上的深入思考并且不断的实践积累,或许是个笨办法,但笨办法 ...
- 使用R语言绘制graph:无向图(ug)和有向无环图(dag)
首先我们需要安装R语言,参考[软件]R语言-3.6.3 安装教程一文,安装完之后我们打开编辑器. 3.5版本之后,source命令不能用了,需要使用Bioconductor的话,我们需要在consol ...
- 有向无环图(DAG)技术白话解读
区块链技术非常热门,但随着越来越多人使用比特币.以太坊等区块链,使得效率低下的问题越来越突出.尤其是2017年6月以来,ICO市场爆炸式增长,人们疯狂的购买以太坊用于投资ICO,导致以太坊网络经常严重 ...
- 有向无环图(DAG)可以描述含有公共子式的表达式
补充: 有向树:如上图 有一个顶点的入度为0 ,其他顶点的入度为1. 定义:满足下列条件的有向图被称为有向树. (1)有且仅有一个结点的入度为0: (2)除树根外的结点入度为1: (3)从树根到任一节 ...
- 【笔试/面试】—— 有向无环图(DAG)的最短路径问题(动态规划)
W:权重图 d[u]:u 到终点的距离 s.t:始点和终点 def dag_sp(W, s, t, d):if s == t:return 0if s not in d:d[s] = min(W[s] ...
- 算法精解:DAG有向无环图
DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...
- 有向无环图描述表达式
有向无环图(DAG) 有向无环图:若一个有向图中不存在环,则称为有向无环图,简称DAG图. DAG描述表达式 解题方法 对比一哈子 练习
- 有向无环图中的拓扑排序
´有向无环图(DAG),指不存在环的有向图 ´点的入度,指以这个点为结束点的边数 ´点的出度,指以这个点为出发点的边数 ´拓扑序就是对于节点的一个排列使得若(u,v)∈E,那么u在排列中出现的位置一定 ...
最新文章
- 2019年4月28日
- 实战篇一 python常用模块和库介绍
- MySQL高级查询语句
- Promise处理前端异步事件
- Dynamics版本历史演进及Dynamics 365重要功能介绍
- sql 两个表列包含_Oracle数据库扩展语言PL/SQL之运算符
- Oracle 以某字段分组,以某字段排序,取前几条
- 黑马程序员 Python学习笔记 之 名片管理系统
- 北斗导航 | BDS RTK高精度定位算法在形变检测中的应用(算法原理讲解)
- 小米原装系统镜像列表
- java文件保险柜,java
- ligerUi框架简单的表格展示
- 手Q游戏中心上线 完美释放娱乐基因
- rancher应用商店的使用
- 安卓开发(一)快速搭建Android开发环境
- 新零售未来的发展趋势怎么样?
- Django cms 教程五:添加内容
- SATA硬盘和IDE硬盘区别及优劣比较
- 初中语文教资,笔试技巧+面试技巧
- kali linux adb 安装教程,kali linux 使用scrcpy手机投屏