2.2 DFF详情声明
设计一个DFF首先进行详情声明,包括DFF的触发类型、存储模式等信息的定义。
一、触发条件
MEMS中以状态为基础构建数学计算过程,以DataFrame流表示状态的流动变化,通过状态本身、状态触发事件、状态操作驱动状态的流转和变化,完成数学计算。
DFF被触发激活并从起始节点开始运行整个DFF网络的行为称为网络触发。DFF触发后从起始节点出发,依次执行各节点和边,直到结束节点,完成以状态张量为基本单元的数据计算和流动。
MEMS中的触发类型包括周期驱动、时间驱动、事件驱动、数据源驱动、手动驱动,具体说明如下表:
| 触发类型 | 名称 | 参数 | 说明 |
|---|---|---|---|
| SimpleRepeat | 周期驱动 | 时间周期 | 每隔一定时间周期,重复触发 |
| TimeDrive | 时间驱动 | Cron表达式 | 按照设定的时间触发 |
| EventDrive | 事件驱动 | 事件判断表达式 | 当设定的事件规则满足时触发 |
| DataSource | 数据源驱动 | / | 当数据源有变化时触发 |
| Manual | 手动驱动 | / | 手动触发 |
DFF的多种触发机制支持,能够实现数据流动链路的及时性、正确性,既保证了系统对关键事件的实时响应能力,又避免了无效的周期性空转计算。
二、存储模式
MEMS对DFF的计算过程与结果设计了EveryTime、Once、Memory、Never 四种存储模式。根据具体要求,用户可以选择合理的存储模式,以实现功能需求和系统性能之间的平衡。以下为各存储模式的定义说明:
| 存储模式 | 名称 | 说明 | 特点 | 使用场景 |
|---|---|---|---|---|
| EveryTime | 每次 | 每次DFF流程执行都会保存结果到数据库。 | 每次运行都会生成新的结果记录; 使用流程的开始时间作为唯一标识; 适合需要保留所有执行历史的场景; 会在数据库中存储完整的执行结果。 | 需要分析DFF执行历史趋势; DFF多次执行结果需要对比; DFF执行结果需要长期保存。 |
| Once | 单次 | 只保存DFF一次结果到数据库,后续执行不会覆盖或新增记录。 | 无论执行多少次,只在数据库中保存一条记录; 不使用时间戳作为标识(固定使用 t=0); 适合只需要最新结果的场景; 会在数据库中存储结果,但只保存一次。 | 只需要最新执行结果; 结果相对稳定,不需要历史记录; 节省存储空间。 |
| Memory | 内存 | 只将DFF结果保存在内存中,不写入数据库。 | 结果仅在内存中临时存储; 系统重启后结果会丢失; 执行速度快,因为不需要I/O操作; 适合临时计算或中间结果。 | 临时计算或中间结果; 对执行速度要求较高的场景; 结果不需要长期保存的情况。 |
| Never | 从不 | 不保存任何执行结果。 | 执行完成后结果立即丢弃; 不占用任何存储空间; 适合只关注执行过程,不需要结果的场景。 | 测试或调试流程; 流程执行本身就是目的(如数据转换、发送通知等); 结果已经通过其他方式处理(如写入文件、发送到外部系统等)。 |
根据具体需求选择合适的存储模式,配置建议如下:
- 需要完整历史记录:选择 EveryTime
- 只需要最新结果:选择 Once
- 追求执行速度:选择 Memory
- 不需要保存结果:选择 Never