sql - RDBMS 或 NoSQL 用于具有循环和有序操作的复杂计划数据?

标签 sql mongodb postgresql database nosql

我正在尝试弄清楚如何最好地存储(和建模)自动化系统的调度组件。我需要存储将要执行的事情(灯、水泵等)的时间表。我还没有尝试管理计划执行时的状态。目前,我感兴趣的是如何存储并让用户处理计划创建。

我还没有确定用什么来存储数据(RDBMS、MongoDB、Cassandra 等等)。我想我更喜欢 RDBMS,因为很多其他数据都是类似数据的,而且我想利用连接、事务,并对数据弹性充满信心。我知道 RDBMS 并不是镇上唯一能给我这些功能的游戏,但我的大部分经验都是使用 SQL 和最近的一个 MongoDB 项目。也就是说,我发现很难用表和关系来描述模型。像下面这样的东西是我到目前为止所拥有的。

最好的存储方法是什么,其次,如果有任何关于可行模型的提示,我们将不胜感激。

一些需求

  • Action 循环
  • 执行顺序
  • 交易大加分

示例时间表

1) [step1] [action] room 1 lights on
2) [step2] [loop] 5x
    2.1 [step2.1] [action] tv on  (ignoring duration of steps)
    2.2 [step2.2] [action] tv off
3) [step3] [action] pool pump on

最佳答案

在任何相当复杂的自动化系统中,我认为您会发现您确实需要 a state machinea way to store state .

存储状态相当容易;存储状态机并执行它并不是那么容易。一种方法是在代码中定义状态机并让它计算下一次需要执行的时间,然后将下一次执行时间的记录放入数据库中。您的主循环然后简单地按顺序从数据库中提取事件,等待直到它有一个要执行的事件,加载适当的状态机并执行它。在执行期间,状态机可以更改任何变量的状态(包括外部设备的开/关状态),并且可以重新安排自己在事件列表中执行一次或多次。

我链接了几篇描述我的自动化系统工作方式的博文。我的要求比简单的计时循环复杂得多;它们涉及条件逻辑,基于之前发生的事情的历史等类似的逻辑,但我怀疑迟早你会想要超越简单的循环。

关于sql - RDBMS 或 NoSQL 用于具有循环和有序操作的复杂计划数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25188689/

相关文章:

php - SQL 关注和关注者

MongoDB db.copyDatabase 在未经授权时失败

MongoDB 与 mergeObjects 聚合

postgresql - 在 postgres 中使用数据库模式的优点和缺点是什么?

sql - 在大多数 RDBMS 中,如何检查标识符的未转义有效性?

sql - EXECUTE AS OWNER 的存储过程是否可以有效替代从第三个模式表中选择的 View ?

mysql - 获取一个整数并将其转换为日期 - mysql

mongodb - 如何使用 mongoimport 导入二进制数据?

java - 如何为不同服务器上的计划任务创建仲裁器

php - Laravel Postgre 无效文本表示