【发布时间】:2019-01-10 04:19:39
【问题描述】:
我有一个表,用于存储历史数据,并为我每 5 分钟跟踪的项目添加一条记录。 这是一个仅使用 2 个项目的示例:
+----+-------------+
| id | timestamp |
+----+-------------+
| 1 | 1533209426 |
| 2 | 1533209426 |
| 1 | 1533209726 |
| 2 | 1533209726 |
| 1 | 1533210026 |
| 2 | 1533210026 |
+----+-------------+
问题是我实际上正在跟踪 4k 项,并且表格越来越大,而且,如果我想获得上个月的数据,我不需要 5 分钟的数据。我想了解的是是否有办法保留过去 24 小时的 5 分钟记录、过去 7 天的 1 小时记录等。也许每小时我都可以从 5 分钟表中获取前 12 条记录并存储平均值在 1h 表中?但是,如果某些记录因为错误而丢失怎么办?这是解决此问题的正确方法还是有更好的选择?
【问题讨论】:
-
看看像influxdb这样的时间序列数据库
-
@fancyPants 我目前正在使用 aws RDS
-
您每 1 小时存储一次平均值的想法(可能是 1 小时表中的每一天)似乎是合理的,您可能可以使用 triggers 来实现这一点(并从5分钟表)。
-
@Nick 谢谢,如果我停止跟踪某些项目(我从未使用过触发器),为插入的行设置触发器会导致错误吗?即使超过 24 小时过去了,旧条目之类的东西仍然存在。
-
是的,旧条目将保留,但应该可以围绕它编写代码。或者也许设置一个 cron 作业来清理旧条目。此外,如果您停止跟踪某个项目,那么您就不再担心桌子变大了...
标签: mysql database database-design time-series