修剪mysql表 - 平均记录

时间:2015-10-17 15:28:34

标签: mysql aggregate-functions

我有一个MySQL表,可存储来自不同设备的实时数据。大约每20秒记录一次数据。 该表如下所示:

report_dt             device    value1    value2
2015-10-16 10:32:15   solar     34.4      67.8
2015-10-16 10:32:15   grid      56.9      23.5
2015-10-16 10:32:35   solar     45.6      34.3

查询以获取每个设备的记录值非常耗费CPU。我有(report_dt,device)作为主键。此外,几天之后我不再需要20秒的数据,而只需要10分钟的平均值。

因此,无论是相同的表格设置还是每台设备的表格,都可以满足这些内容:

report_dt             device    value1    
2015-10-16 10:00:00   solar     avg(value1 over 10 mins)
2015-10-16 10:10:10   grid      avg(value1 over 10 mins)
2015-10-16 10:20:20   solar     avg(value1 over 10 mins)

想法是每24小时进行一次修剪动作。

原因是必须快速检索包含平均值的数据。而且由于20秒间隔内的数据极其波动,我必须使用平均值或者数据难以评估。

我可以在应用程序中执行此操作。每10分钟检索10分钟的平均值,并将其写回不同的表或不同的表,每个设备一个。

但是数据库功能还能实现吗?

1 个答案:

答案 0 :(得分:0)

您可以在mysql中通过Events执行此操作。假设我在mysql中有2 tables。 Table_1在应用程序生成时每秒或连续存储数据。 Table_2是您的主表,其中包含10分钟avg数据。现在您需要创建一个在10分钟内调用一次的存储过程(这可以通过事件或CRON in linux完成)。那么什么包含stored procedure?这些步骤在存储过程

中执行
BEGIN
   SELECT  avg(value) of last 10 min from Table_1
   INSERT into Table_2 the avg record.
   DELETE avg(value) of last 10 min from Table_1
END

警告 - 我没有开发mysql代码,我只是展示了方法