这是我的第70篇原创
拼奢侈品装名媛,实在是太LOW了。真正的奢侈品不是外物,而是知识!是科学!你看我,从来没告诉过任何人,我开过私人飞机。
所以,今天要给大家分享一个可以在朋友圈装X的词:有向无环图,英文简称DAG。这个词太高端了,高端到你的朋友圈里90%以上的人不认识,但是又基本和你的工作、生活扯上关系。一股高处不胜寒的技术直男高级感油然而生!
啥是有向无环图?
有向无环图(DAG)与烂大街的二叉树一样,都是一种拓扑结构。同属于图论的领域。你看,这逼格是不是顿时就起来了?
搞信息技术的大佬们,很会取名字,目的就是为了减少信息传输时的损耗。你看二叉树就很形象,就是分两个叉叉的树状结构。
有向无环图好像很高大上,其实拆开也很容易理解,就是整个图的形状是有方向的,但是有没有形成环。所以,二叉树其实也是一种有向无环图(DAG)。
这个玩意,可以用来做很多事情,咱一个一个来说。
ETL任务调度
玩过ETL的同学都知道,所有的ETL任务都是一个有向无环图(DAG)。
我会教所有玩ETL的同学这个概念。因为有些人真的会天马行空的设计出一个环状任务流。这个就是有环图了。有换图会直接报错,执行不了,因为A任务的启动,前置条件是后续的任务的结果。
有些同学逻辑思维能力强,虽然不知道有向无环图(DAG),但是天然就明白不能这么设计,这种人就是老天爷赏饭吃,天赋使然,令人艳羡。
但是如果情况特殊,真的有前置条件是后置任务的结果该咋办?有这种情况,但是肯定不是当前任务,而是相同任务的下一次执行。所以把结果存储下来,下次执行的时候读取一下就行了。
有经验的同学,会对任务进行合理的安排,既不冲突,又能高效。之前在数据倾斜的文章《点击查阅:12种方法,彻底搞定数据倾斜!》里,有一个方案是ETL预处理,其本质就是在数据输入之前,用ETL把数据整理的比较均匀,然后再传给Spark进行计算。这种方法实际上并没有减轻整个任务链的工作时间,但是能保证Spark的只占用较少的计算时间。我们可以在资源利用低谷,用ETL处理好数据,然后在凌晨资源利用高峰期进行计算,这样能削峰填谷,资源整体利用率高。
项目管理
好,现在开始考试,请听题:
这是信息系统项目管理师(高级职称)的一道考题,PMP里也会有。这个是不是很熟悉?这也是有向无环图(DAG)。这是计算关键路径,关键路径决定着整个项目的最长用时。如果我们需要压缩整个工期,应该从关键路径上下功夫。
上面那道题应该还比较简单,我们整点有难度的:
你可能会觉得奇怪,项目管理要学这个干啥?这些其实就是任务安排啊。任务前后有顺序,有依赖。在不改变关系的前提下,我们还要压缩工期,咋整?就得用上面的工具了。咱不能所有工作都是流水线,该并行就得并行,该资源调拨,就得调拨。我们得知道兵力往哪里部署是最能节省时间和成本的。这就得用到拓扑学中的有向无环图(DAG)了。一招一式,都是学问。
区块链
区块链的数据存储方式本质上是一个链表。就是一个严格按照顺序进行存储的表。
而且区块链的去中心化的设计思想,是集群中50%以上的节点都下载并认可这条数据,这个数据才被宣告有效,也就是得超过50%的节点下载并写入成功才可以。可想而知,这得多慢啊!所以区块链最大的弊端就是并发量不够。
目前区块链最热门的技术就是有向无环图(DAG)。这直接解决了区块链的链表线性存储效率低下的弊端。
区块链通过DAG进行交易认证,这比50%认可的链表可快多了!