我是SQL新手,请指教。
我希望每 5 秒记录一次来自传感器的传入数据以供将来绘制图表 在 MySQL 中设计数据库的最佳方法是什么?
- 当我喜欢按小时、天、周、月显示图表时,我可以使用时间戳记录并使用 AVG 函数吗?
或者我可以记录并平均每分钟,每小时,每天以减少数据库大小
收集数据超过 1 分钟时是否可以使用触发功能进行平均?
答案是,这取决于您实际要记录的数据量、查询的频率以及需要多快的响应时间。如果它只是一个传感器,每 5 秒一次,您可能会一直持续下去,而不会遇到太多常规 sql 查询问题,无法在合理的时间内提取平均值、总和等。
我会说,根据经验,您可以使用 SQL 和时间序列数据做很多事情,但是您必须非常小心如何设计查询。我使用过具有数十亿行和这些行中的数万个单独传感器的时间序列表;在这么多时间序列行上实现非常快速的执行是可能的,但是您可能会花费一周的时间来尝试微调数据库。这绝对是灵活性和速度之间的权衡。
同样,出于您的目的,如果您只是在谈论一个传感器,它可能不会有太大的不同。只需编写一个常规 SQL 查询。但是,如果您预计增加数百个传感器或增加采样率,您可能需要考虑按照您的建议执行定期“汇总”功能。在这种情况下,我会更倾向于使用 NoSQL 数据库(例如 Cassandra、Couchbase 等)编写自定义解决方案,并使用定期运行的程序进行汇总。如果您有兴趣,我可以提供详细信息,但我真的认为您不需要走那么远。
这篇文章对在 SQL 与 NOSQL 中存储时间序列数据进行了很好的讨论: https ://dba.stackexchange.com/questions/7634/timeseries-sql-or-nosql
您应该阅读有关 RRDtool 的信息。
从 RRDtool 网站:
RRDtool 是用于时间序列数据的开源行业标准、高性能数据记录和图形系统。
http://oss.oetiker.ch/rrdtool/
如果您不想使用它(它可能太复杂,对您的应用程序来说太大等) - 看看它是如何制作的,信息是如何存储的等等。