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