DAG - 在图论中,如果一个有向图从任意顶点出发无法经过若干条边回到该点,则这个图是一个有向无环图。

其实就是指一个没有回路的有向图。

因为有向图中一个点经过两种路线到达另一个点未必形成环,因此有向无环图未必能转化成树,但任何有向树均为有向无环图。

说起DAG就不得不说区块链,两者的目的都是为了形成可以信任的数据库。

目前币圈很多的分布式数据库的记账方式都在区块链和DAG之间选择。

我们下来利用DAG和链式结构的区别来更好的理解DAG。

DAG与链式结构的本质区别在于异步与同步通讯。区块链的链式结构的本质等同于数据库事务日志,而出块操作则为检查点操作,那么链式结构体系可以看做是定期同步检查点的数据库事务同步机制。

而DAG则通过将事务操作进行异步处理来增加网络吞吐量,采用谣言传播算法(类似谣言在人类社区中的传播方式)在节点间发送操作日志,并通过某种机制(IOTA每次验证前两条交易,并计算一个PoW代表权重)将一个权重赋给该操作。

相比起同步操作的链式结构,DAG结构与任何异步机制一样,能够带来的提升在于吞吐量,但是可能产生的问题则在于无法有效预测交易被确认的时间与周期,并且操作之间的顺序无法最终在多个节点间确认保持一致。

局限

由于当前市面上DAG的实现相对较新,暂时还存在一些理论上未突破的局限性,包括:

在对历史交易验证时采用随机方式,而没有任何先后规则,那么有可能产生某些交易在极端情况下没有任何其他节点对其验证,从而永远不会被确认。这个问题在IOTA中通过多次重试的方式解决,但是是否存在更好的一次性确认机制能更有效地解决该问题值得探讨;

为了追踪每一笔交易与之前交易的关系,整个DAG图谱需要被随时检索和访问。在一个较大规模的系统中其交易图谱溯源会非常复杂,同时几乎不可能被全部保存在内存中以进行实时更新。而如果将这些数据保存在磁盘上,那么实时刷新每个Tangle的权重会造成大量随机I/O(也许可以通过大量部署SSD解决),因此从工程实现上来看优化难度较大;

由于DAG的操作记录写入顺序不存在“区块”或“日志”这类检查点机制,因此每个节点各自为政,对于全局顺序无法得到保障。在这种情况下,在非等阶操作时可能存在不一致的问题(例如对同一条记录,在两个不同的节点同时执行转账(加减法)和计息(乘法)操作,两个节点得到的操作顺序有区别,导致账户余额最终结果不一致)。

如今从DAG衍生出一些其他数据结构(例如哈希树等),基本上只是从存储方式上有一些特定的优化,但是整体上与DAG所带来的问题保持一致。

DAG - 数据结构 有向无环图相关推荐

  1. DAG(有向无环图)易懂介绍

    目录 1. Tip的概念 2. 交易到达率和网络延迟对DAG的影响 3.新交易的Tip选择策略 1. 基于概率的策略 2.非基于概率的策略 4. DAG的优缺点 DAG优点 DAG缺点 DAG看他的结 ...

  2. DAG(有向无环图)易懂介绍(*)

    DAG看他的结构挺唬人的,但是原理还是蛮简单的.DAG改变的是传统区块链的数据结构.首先简单介绍一下什么是图.一个图(graph)是由两部分组成:点(vertex)和边(edge).所谓有向无环图其实 ...

  3. Spark构建DAG(有向无环图)

    文章目录 前言 一.构建RDD有向无环图 二.RDD有向无环图拆分 三. DAGScheduler 四. Task调度 五. Task执行 前言 有向无环图(Directed Acyclic Grap ...

  4. 五分钟讲明白DAG(有向无环图)的优缺点

    区块链是一个去中心化的数据库,但是去中心化的数据库却不仅仅指区块链,因为还有一种技术叫做DAG,它也是分布式账本技术. 1:什么是DAG DAG(Directed Acyclic Graph),中文名 ...

  5. 算法精解:DAG有向无环图

    DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...

  6. 数据结构(六):图的概念、存储方式、基本操作、最小生成树、最短路径、有向无环图、关键路径 | Prim、Kruskal算法 | BFS、Dijkstra、Floyd算法 | 拓扑排序 | 求关键路径

    文章目录 第六章 图 一.图 (一)图的定义 (二)图逻辑结构的应用 (三)无向图.有向图 (四)简单图.多重图 (五)顶点的度.入度.出度 (六)顶点-顶点的关系描述 (七)连通图.强连通图 (八) ...

  7. Apache Spark中的有向无环图DAG

    Apache Spark中的有向无环图DAG 由DATAFLAIR TEAM ·更新· 2018年11月21日 1.目的 在本Apache Spark教程中,我们将了解Apache Spark中的DA ...

  8. 有向无环图描述表达式

    有向无环图(DAG) 有向无环图:若一个有向图中不存在环,则称为有向无环图,简称DAG图. DAG描述表达式 解题方法 对比一哈子 练习

  9. 判定有向无环图 (拓扑排序)

    问题描述: 给出一张有向图,问它是否存在环. 解题思路: 这里可以用到拓扑排序. 拓扑排序的定义 拓扑排序应用于有向无环图之中,排序完以后会出现这样的性质:对于一个点p,只对排序位置在它之后的点有边. ...

最新文章

  1. UTF-8与UTF-8 BOM
  2. module 'cv2' has no attribute 'CV_LOAD_IMAGE_GRAYSCALE'
  3. 【计算理论】计算理论总结 ( 自动机设计 ) ★★
  4. 修改Thickbox,预加载图片和点击图片前后浏览
  5. 【LeetCode从零单排】No.169 Majority Element(hashmap用法)
  6. Java 8流中的数据库CRUD操作
  7. linux中如何统计目录中的文件,[Linux目录文件]在Linux中统计目录内文件
  8. 微软开源模糊测试平台 OneFuzz
  9. MyBatis学习总结(3)——优化MyBatis配置文件中的配置
  10. 3Dcnn 降假阳性模型调试(八)
  11. Linux定时器函数setitimer
  12. REC Solar推出黑色多晶半切片PERC组件,已进入量产化
  13. c语言max函数和min,使用函数获取值,查找max,查找min并以C语言显示
  14. 清华2018计算机研究所录取结果,2018年清华北大自主招生录取名单公布!
  15. 《软件工程(C编码实践篇)》学习总结
  16. SpringBoot整合Sa-Token
  17. python实现图片拼接(项目界面展示图合并)
  18. 人脸识别准确概率计算——超详细
  19. CSAW-2015-StringIPC解法一修改cred结构
  20. 商品表(spu)、规格表(sku)设计

热门文章

  1. python环境变量配置(为了cmd能直接打开python)
  2. Mysql数据库---学习总结(二) 之使用练习
  3. 安装Windows 10时出现 Windows无法打开所需的文件 C:\Sources\install.wim 错误代码0x8007000D的解决办法
  4. 眼底病php 是什么病,什么是眼底病 五种常见眼底病详述
  5. 项目代码风格要求(转自博客园-张子阳)
  6. 大话数据结构学习心得
  7. 去雨方向工作概述(二)
  8. webstorm 2019 激活破解方法大全
  9. 洛克菲勒书信--现在就去做
  10. xadmin与mysql数据库_Xadmin中的功能及设置