DAG - 在图论中,如果一个有向图从任意顶点出发无法经过若干条边回到该点,则这个图是一个有向无环图。
其实就是指一个没有回路的有向图。
因为有向图中一个点经过两种路线到达另一个点未必形成环,因此有向无环图未必能转化成树,但任何有向树均为有向无环图。
说起DAG就不得不说区块链,两者的目的都是为了形成可以信任的数据库。
目前币圈很多的分布式数据库的记账方式都在区块链和DAG之间选择。
我们下来利用DAG和链式结构的区别来更好的理解DAG。
DAG与链式结构的本质区别在于异步与同步通讯。区块链的链式结构的本质等同于数据库事务日志,而出块操作则为检查点操作,那么链式结构体系可以看做是定期同步检查点的数据库事务同步机制。
而DAG则通过将事务操作进行异步处理来增加网络吞吐量,采用谣言传播算法(类似谣言在人类社区中的传播方式)在节点间发送操作日志,并通过某种机制(IOTA每次验证前两条交易,并计算一个PoW代表权重)将一个权重赋给该操作。
相比起同步操作的链式结构,DAG结构与任何异步机制一样,能够带来的提升在于吞吐量,但是可能产生的问题则在于无法有效预测交易被确认的时间与周期,并且操作之间的顺序无法最终在多个节点间确认保持一致。
局限
由于当前市面上DAG的实现相对较新,暂时还存在一些理论上未突破的局限性,包括:
在对历史交易验证时采用随机方式,而没有任何先后规则,那么有可能产生某些交易在极端情况下没有任何其他节点对其验证,从而永远不会被确认。这个问题在IOTA中通过多次重试的方式解决,但是是否存在更好的一次性确认机制能更有效地解决该问题值得探讨;
为了追踪每一笔交易与之前交易的关系,整个DAG图谱需要被随时检索和访问。在一个较