mysql:如何存储和分割时间序列

q0qdq0h2  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(380)

我有一个表,在那里我存储历史数据,并为每5分钟跟踪的项目添加一条记录。这是一个仅使用两项的示例:

+----+-------------+
| id |  timestamp  |
+----+-------------+
|  1 |  1533209426 |
|  2 |  1533209426 |
|  1 |  1533209726 |
|  2 |  1533209726 |
|  1 |  1533210026 |
|  2 |  1533210026 |
+----+-------------+

问题是,我实际上在跟踪4k项,而且表不断变大,而且,如果我想得到上个月的数据,我不需要5分钟的数据。我想了解的是,是否有办法保存过去24小时的5分钟记录,过去7天的1小时记录等等。也许每小时我都可以从5分钟表中获取前12条记录,并将平均值存储在1小时表中?但是如果因为出错而丢失了一些记录呢?这是解决这个问题的正确方法还是有更好的选择?

x4shl7ld

x4shl7ld1#

你在正确的轨道上。
要决定如何处理有多个问题——丢失条目、时间戳偏移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 限制所讨论的范围。然后清除同一组数据。
这张table应该 PRIMARY KEY(hr) .
除非您讨论的是表中的数百万行,否则我不建议使用 PARTITION .

相关问题