MySQL将增量数据合并为全套

时间:2015-10-31 18:49:23

标签: mysql

我正在研究家庭自动化系统的数据记录器。当某个状态发生变化时,它会在一个密钥=>中定期从HA控制器接收数据。价值形式。我想把它转储到MySQL数据库中。

当HA控制器发送此数据时,它不包含对象的每个属性。示例如下所示:

初次回归

stdClass Object
(
 [name] => Washing Machine
 [altid] => 10
 [id] => 31
 [category] => 3
 [subcategory] => 0
 [room] => 2
 [parent] => 1
 [status] => 1
 [light] => 30
 [kwh] => 30.2700
 [state] => -1
 [comment] =>
 [watts] => 108.5
)

增量更新

stdClass Object
(
 [altid] => 10
 [id] => 31
 [subcategory] => 0
 [room] => 2
 [parent] => 1
 [status] => 1
 [light] => 30
 [kwh] => 30.2700
 [state] => -1
 [comment] =>
 [watts] => 96.7
)

如您所见,后来的更新不包含对象的名称或类别。对于其他对象类,可能缺少其他属性。

我的问题是记录此数据的最佳方法是什么,以便我可以运行查询以在单个时间点检索每个属性的状态?某种果味查询可能会创建一个视图?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

由于它始终为您提供ID(希望如此),您可以在事件进入时查找缺少的属性,并在保存之前填充缺少信息的记录。您需要从以前的事件中进行选择,或者在某些主类别和名称表中创建已经创建的设备定义。

另一种方法是不关心缺少指标并在UI /图表/报告阶段处理这些问题。您可以构建一个知道ID 31是洗衣机的UI,随后可以随时绘制所有属性。用户界面可以通过查看以前的值或选择以0表示图表来继续绘制任何不存在的值。

这样做,构建一个可以在任何时间点识别任何值的单个查询会很棘手,因为它必须及时向后扫描,直到找到一个值。但是,再次,在图形意义上,它确实不重要,因为您希望日期范围足够大以容纳缺失值。

您也可以将数据保存到时间序列数据库(如涌入数据库)而不是关系数据库中。

答案 1 :(得分:0)

我最终在另一个SO帖子中找到了解决方案:MySQL: Get Last Distinct Set of Records

smdrager的最佳答案就是我所使用的。表中只有几行和数千行之间的速度似乎没有区别。