修剪 mysql table - 平均记录
Prune mysql table - averaging records
我有一个 MySQL table 存储来自不同设备的实时数据。大约每 20 秒记录一次数据。
table 看起来像这样:
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 分钟的平均值。
因此,无论是相同的 table 设置还是每个设备的 table 都会令人满意,内容如下:
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 小时执行一次 p运行ing 操作。
原因是必须快速检索包含平均值的数据。而且因为20秒间隔的数据波动很大,所以我必须用平均,否则数据很难评估。
我可以在应用程序中做到这一点。每隔 10 分钟检索 10 分钟的平均值,并将其写回不同的 table 或不同的 tables,每个设备一个。
但是数据库功能也可以实现吗?
您可以通过 Events in mysql. Suppose i have 2 tables
in mysql. Table_1 store the data continiously per second or miunte as your application generate. Table_2 is your main table which contains the 10 min avg
data. Now you need to create a stored procedure which calls once in 10 minutes (this can be done by Events or 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 代码,我只是展示方法
我有一个 MySQL table 存储来自不同设备的实时数据。大约每 20 秒记录一次数据。 table 看起来像这样:
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 分钟的平均值。
因此,无论是相同的 table 设置还是每个设备的 table 都会令人满意,内容如下:
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 小时执行一次 p运行ing 操作。
原因是必须快速检索包含平均值的数据。而且因为20秒间隔的数据波动很大,所以我必须用平均,否则数据很难评估。
我可以在应用程序中做到这一点。每隔 10 分钟检索 10 分钟的平均值,并将其写回不同的 table 或不同的 tables,每个设备一个。
但是数据库功能也可以实现吗?
您可以通过 Events in mysql. Suppose i have 2 tables
in mysql. Table_1 store the data continiously per second or miunte as your application generate. Table_2 is your main table which contains the 10 min avg
data. Now you need to create a stored procedure which calls once in 10 minutes (this can be done by Events or 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 代码,我只是展示方法