DAG在数据开发中的应用

2020-06-29 18:05:21 浏览数 (1)

最近在项目中需要对设备上报的数据进行处理,其中需要在控制台上为用户提供拖拉拽的数据流处理图形,让用户更形象的将数据流的处理过程展示出来。下图是一个最简单的数据流处理过程,数据的处理过程可能是多个节点,而且输出也可以是多个节点,很明显该模型与有向无环图(DAG)很类似的。

数据流定义数据流定义

对于整个数据流程的处理图,任何数据处理节点后都可以是最终的输出点,也可以是作为某个数据处理节点的输入源,整个数据流图的流转过程,是一个DAG的遍历过程,某个层级的节点处理完成后,进行下一层级的节点的数据处理,而同一层级的节点的处理是可以并行的。具体到本需求,某些数据的处理和输出可能是比较耗时的,这里我们采用了同一层级的数据处理并发进行。

在控制台画图的时候,需要定义好整个DAG的拓扑关系包括每个节点的子节点列表,节点在画布区的位置,节点作用类型及相应的进入下一层级的处理条件等,例如某个数据处理节点,在完成数据流的定义后,我们会对创建的数据流进行合法性校验,主要是检测是否有环。

代码语言:javascript复制
{
    "Id":"f1id",
    "Type":"filter",
    "Position":"f1 position",
    "ChildList":[
        "outid"
    ],
    "Op":"and",
    "CondList":[
        {
            "Op":"eq",
            "Id":"light_switch",
            "Value":1
        },
        {
            "Op":"eq",
            "Id":"color",
            "Value":2
        }
    ]
}

在控制台定义好数据流图,之后就是具体的数据流的执行流程。解析以上在控制台定义的数据流协议,建立整个DAG的拓扑关系,设置每个节点的处理函数,进而按照DAG的执行整个数据流。

0 人点赞