我有一个应用程序,它从智能房屋中的十几个传感器收集数据。它将数据存储在 MySQL 数据库中,表格格式如下:
CREATE TABLE IF NOT EXISTS `datapoints` (
`PointID` int(11) NOT NULL,
`System` varchar(50) NOT NULL,
`Sensor` varchar(50) NOT NULL,
`Value` varchar(50) NOT NULL,
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`PointID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
该System
字段用于对传感器进行分组,例如,“空气”系统具有“温度”和“湿度”传感器,“太阳能电池板”系统具有“发电量 (kW)”和“今日生产量 (kWh)”。这些字段都是varchar
因为有几种数据类型来自传感器,而原始数据库设计者采取了简单的方法。(我知道这种数据结构效率不高,但改变它为时已晚。)
传感器包括空气温度、湿度、太阳能电池板输出、太阳能热水器温度等。
我们现在拥有这个每天收集数万个数据点的数据库。到目前为止,我们已经使用了一个查询数据库的应用程序来构建传感器数据随时间变化的图表。但是,我们现在有许多 GB 的数据,最终将耗尽日志硬件上的存储空间。
我正在寻找一种从数据中收集统计数据然后将其删除的方法。我在想一些很像 [Google Analytics | 皮维克 | Awstats] 用于数据。问题是我真的不知道从哪里开始。我希望能够查看更详细的数据,例如:
- 1 天的所有数据
- 1 周的每小时数据
- 1 个月的每日数据
- 我想我想永远保留每周和每月的统计数据。
但是,我不想过多地平滑数据。最终,我将不得不对数据进行平滑处理,但我想尽可能地保持详细。例如,如果我的电力生产有一个很大的峰值,如果它被平滑(降低)到每小时数据中,然后再次(降低)在每日数据中,然后再次(降低)在每周数据中,一周的数据不会反映出现峰值,因为平均值与所有点的平均值不同。
是否有任何软件已经可以做到这一点?如果没有,什么是开始的好方法?我可以用任何语言来做,但首选是 .NET、PHP 或 C(对于 Windows),(按此顺序),因为这些是其他项目成员已经知道的语言,并且日志硬件已经设置好了。