在 Unreal、Blender、Alteryx 等中实现基于节点的工作流的一般原则?
General principle to implement node-based workflow as seen in Unreal, Blender, Alteryx and the like?
这个话题很难Google,因为"node"(不是node.js),还有"graph"(不,我不是要制作图表) .
尽管我是一个非常全面且经验丰富的开发人员,但我无法拼凑出一个心智模型来说明这些编辑器如何以合理的方式、以合理的顺序从一个节点到另一个节点获取数据。特别是在 Alteryx 示例中,因为排序模块在继续之前需要其整个上游数据集。并且一些节点可以将单个输出发送给多个下游消费者。
我能够理解树以及我以前的数据结构课程中没有的东西,并在实际项目中成功理解和应用 https://www.python.org/doc/essays/graphs/ 中的基本图形概念。但那是一个静态结构,数据不会从一个节点传递到另一个节点。
我应该从哪里开始 and/or 我缺少什么概念可以使用这样的实现?可以让用户将一些框链接在一起,通过排序和连接等基本操作对文本文件或数据记录进行切片和切块?我正在使用 C#,但答案应该与语言无关。
此范例称为 Dataflow Programming,它处理从指令传递到要处理的指令的数据流。
数据流程序可以以文本或可视化形式编写,除了您提到的软件之外,还有很多程序包含某种数据流语言。
要创建您自己的数据流语言,您必须:
- 创建代表您的处理节点的程序模块或对象,实现不同类型的数据处理。处理节点通常有一个或多个数据输入和一个或多个数据输出,并在其内部实现某种数据处理算法。节点也可能具有控制给定节点如何处理数据的控制输入。典型的数据流算法从一个或多个输入数据流值计算输出数据样本,例如FIR filters do. However processing algorithm also can have data values feedback (output values in some way are mixed with input values) as in IIR filters,或者以某种方式累加值以计算输出值
- 创建用于在处理节点之间传递数据的标准 API。对于不同种类的数据和控制信号,它可以不同,但它必须是标准的,因为处理节点应该 'understand' 彼此。数据通常作为纯值传递。控制信号可以是普通值、事件或更高级的控制语言 - 取决于您的需要。
- 为 link 您的节点创建安排并在它们之间传递数据。您可以创建自己的程序机制或使用一些标准的东西,例如
pipes
、message queues
等。例如,此功能可以实现为 tree-like 结构,其节点是您的处理节点,并且具有对下一个节点及其处理来自当前节点输出的数据的适当输入的引用。
- 创建某种节点迭代器,它从数据流图的开头开始并迭代每个处理节点,其中:
- 提供下一个数据输入值
- 调用节点数据处理方法
- 更新数据输出值
- 将更新后的数据输出值传递给下游处理节点的输入
- 创建一个工具来配置节点参数和它们之间的 links。它可以只是使用文本编辑器编辑的简单文本文件,也可以是使用
GUI
绘制数据流图的复杂可视化编辑器。
关于您在 Alteryx
中关于 Sort
模块的说明 - 也许数据值只是在该模块内累积然后排序。
here 您可以找到 Dataflow
编程语言的更详细描述。
这个话题很难Google,因为"node"(不是node.js),还有"graph"(不,我不是要制作图表) .
尽管我是一个非常全面且经验丰富的开发人员,但我无法拼凑出一个心智模型来说明这些编辑器如何以合理的方式、以合理的顺序从一个节点到另一个节点获取数据。特别是在 Alteryx 示例中,因为排序模块在继续之前需要其整个上游数据集。并且一些节点可以将单个输出发送给多个下游消费者。
我能够理解树以及我以前的数据结构课程中没有的东西,并在实际项目中成功理解和应用 https://www.python.org/doc/essays/graphs/ 中的基本图形概念。但那是一个静态结构,数据不会从一个节点传递到另一个节点。
我应该从哪里开始 and/or 我缺少什么概念可以使用这样的实现?可以让用户将一些框链接在一起,通过排序和连接等基本操作对文本文件或数据记录进行切片和切块?我正在使用 C#,但答案应该与语言无关。
此范例称为 Dataflow Programming,它处理从指令传递到要处理的指令的数据流。
数据流程序可以以文本或可视化形式编写,除了您提到的软件之外,还有很多程序包含某种数据流语言。
要创建您自己的数据流语言,您必须:
- 创建代表您的处理节点的程序模块或对象,实现不同类型的数据处理。处理节点通常有一个或多个数据输入和一个或多个数据输出,并在其内部实现某种数据处理算法。节点也可能具有控制给定节点如何处理数据的控制输入。典型的数据流算法从一个或多个输入数据流值计算输出数据样本,例如FIR filters do. However processing algorithm also can have data values feedback (output values in some way are mixed with input values) as in IIR filters,或者以某种方式累加值以计算输出值
- 创建用于在处理节点之间传递数据的标准 API。对于不同种类的数据和控制信号,它可以不同,但它必须是标准的,因为处理节点应该 'understand' 彼此。数据通常作为纯值传递。控制信号可以是普通值、事件或更高级的控制语言 - 取决于您的需要。
- 为 link 您的节点创建安排并在它们之间传递数据。您可以创建自己的程序机制或使用一些标准的东西,例如
pipes
、message queues
等。例如,此功能可以实现为 tree-like 结构,其节点是您的处理节点,并且具有对下一个节点及其处理来自当前节点输出的数据的适当输入的引用。 - 创建某种节点迭代器,它从数据流图的开头开始并迭代每个处理节点,其中:
- 提供下一个数据输入值
- 调用节点数据处理方法
- 更新数据输出值
- 将更新后的数据输出值传递给下游处理节点的输入
- 创建一个工具来配置节点参数和它们之间的 links。它可以只是使用文本编辑器编辑的简单文本文件,也可以是使用
GUI
绘制数据流图的复杂可视化编辑器。
关于您在 Alteryx
中关于 Sort
模块的说明 - 也许数据值只是在该模块内累积然后排序。
here 您可以找到 Dataflow
编程语言的更详细描述。