我有一个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分钟的平均值,并将其写回不同的表或不同的表,每个设备一个。
但是数据库功能还能实现吗?
答案 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代码,我只是展示了方法