我有一个表,用于存储历史数据,并每5分钟添加一次我要跟踪的项目的记录。
这是仅使用两个项目的示例:
+----+-------------+
| id | timestamp |
+----+-------------+
| 1 | 1533209426 |
| 2 | 1533209426 |
| 1 | 1533209726 |
| 2 | 1533209726 |
| 1 | 1533210026 |
| 2 | 1533210026 |
+----+-------------+
问题是我实际上正在跟踪4k项,并且表格不断变大,而且,如果我想获得上个月的数据,则不需要5分钟的数据。我想了解的是,是否可以保留过去24小时的5分钟记录,过去7天的1小时记录等。也许每小时我可以从5分钟表中获取前12条记录并存储平均值在1h表中?但是,如果由于错误而缺少某些记录怎么办?这是解决此问题的正确方法,还是有更好的选择?
最佳答案
您走在正确的轨道上。
有多个问题需要决定如何处理-缺少条目,时间戳偏移1秒(或其他时间)等。
通过提供一个计数(应始终为12),您可以发现一些问题:
SELECT FLOOR(timestamp / 3600) AS hr, -- MEDIUMINT UNSIGNED
COUNT(*), -- TINYINT UNSIGNED
AVG(metric) -- FLOAT
FROM tbl
GROUP BY 1;
是的,每小时都要处理前一小时的数据。添加
WHERE timestamp BETWEEN ... AND ... + 3599
以约束所讨论的范围。然后清除相同的数据集。该表将具有
PRIMARY KEY(hr)
。除非您正在谈论表中的数百万行,否则我建议您不要使用
PARTITION
。关于mysql - 数据库设计-MySQL:如何存储和拆分时间序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51652857/