【问题标题】:General principle to implement node-based workflow as seen in Unreal, Blender, Alteryx and the like?在 Unreal、Blender、Alteryx 等中实现基于节点的工作流的一般原则?
【发布时间】:2018-08-28 17:46:17
【问题描述】:

这个话题对谷歌来说很难,因为“node”(不是 node.js)和“graph”(不,我不是要制作图表)。

尽管我是一位非常全面且经验丰富的开发人员,但我无法拼凑出一个心智模型,说明这些编辑器如何以合理的方式、以合理的顺序从一个节点到另一个节点获取数据。特别是在 Alteryx 示例中,例如,因为排序模块在继续之前需要其整个上游数据集。并且一些节点可以将单个输出发送给多个下游消费者。

我在过去的旧数据结构课程中能够理解树和什么不是,并在实际项目中成功地理解和适应 https://www.python.org/doc/essays/graphs/ 的基本图形概念。但那是一个静态结构,数据不会从一个节点传递到另一个节点。

我应该从哪里开始和/或我缺少什么概念可以使用实现这样的东西?让用户通过一些基本操作(如排序和连接)将一些框链接在一起来对文本文件或数据记录进行切片和切块?我正在使用 C#,但答案应该与语言无关。

【问题讨论】:

    标签: editor nodes graph-theory


    【解决方案1】:

    此范例称为Dataflow Programming,它适用于从指令传递到要处理的指令的数据流。

    数据流程序可以以文本或可视形式进行编程,除了您提到的软件之外,还有很多程序包含某种数据流语言。

    要创建自己的数据流语言,您必须:

    1. 创建代表处理节点的程序模块或对象,实现不同类型的数据处理。处理节点通常有一个或多个数据输入和一个或多个数据输出,并在它们内部实现一些数据处理算法。节点也可能具有控制给定节点如何处理数据的控制输入。典型的数据流算法从一个或多个输入数据流值计算输出数据样本,例如FIR filters 做的。但是处理算法也可以有数据值反馈(输出值以某种方式与输入值混合),如IIR filters,或者以某种方式累加值来计算输出值
    2. 创建用于在处理节点之间传递数据的标准 API。对于不同种类的数据和控制信号,它可以是不同的,但它必须是标准的,因为处理节点应该相互“理解”。数据通常作为纯值传递。控制信号可以是普通值、事件或更高级的控制语言 - 取决于您的需要。
    3. 创建安排以链接您的节点并在它们之间传递数据。您可以创建自己的程序机制或使用一些标准的东西,如pipesmessage queues 等。例如,此功能可以实现为树状结构,其节点是您的处理节点,并引用下一个节点和处理来自当前节点输出的数据的适当输入。
    4. 创建某种节点迭代器,该迭代器从数据流图的开头开始并遍历它所在的每个处理节点:
      • 提供下一个数据输入值
      • 调用节点数据处理方法
      • 更新数据输出值
      • 将更新的数据输出值传递给下游处理节点的输入
    5. 创建一个工具来配置节点参数和它们之间的链接。它可以是使用文本编辑器编辑的简单文本文件,也可以是使用 GUI 的复杂可视化编辑器来绘制数据流图。

    关于您在Alteryx 中关于Sort 模块的注释 - 也许数据值只是在此模块内累积然后排序。

    here 你可以找到更详细的Dataflow 编程语言描述。

    【讨论】:

    • 在研究这个主题时,我确实从你的第一段中看到了维基百科的文章,以及微软的 TPL 数据流库之类的东西。知道正确的术语有助于进一步的研究,但我希望能获得关于第 2 点和第 3 点的更具体的信息。我猜也总是有来源潜水。
    • @amonroejj 我改进了答案,希望现在更清楚。关于您关于“来源潜水”的注释-由于您的问题主题相当抽象,我想最好解释一下本质,而不是附加到具体的编程语言。
    猜你喜欢
    • 2019-03-21
    • 2018-10-31
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2022-06-16
    • 1970-01-01
    相关资源
    最近更新 更多