我有一个应用程序,可以从Smart House中的十几个传感器中收集数据。它使用以下表格格式将其数据存储在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
字段用于分组传感器,例如" Air"系统有"温度"和"湿度"传感器和太阳能电池板"系统具有"发电量(kW)"和"今日生产(千瓦时)"。这些字段都是varchar
,因为有几种数据类型来自传感器,而原始数据库设计人员则采用了简单的方法。 (我知道这种数据结构非常有效,但改变它已经太晚了。)
传感器包括空气温度,湿度,太阳能电池板输出,太阳能热水器温度等。
我们现在拥有这个每天收集数万个数据点的数据库。到目前为止,我们使用了一个查询数据库的应用程序来构建传感器数据随时间变化的图形。但是,我们现在拥有许多千兆字节的数据,并最终会耗尽日志硬件上的存储空间。
我正在寻找一种从数据中收集统计数据然后将其删除的方法。我在考虑的事情很像[Google Analytics | Piwik | Awstats]用于数据。问题是我不知道从哪里开始。我希望能够查看更近期的更详细数据,例如:
但是,我不想太过平滑数据。最终,我将不得不平滑数据,但我希望尽可能详细地保留它。例如,如果我的电力生产有很大的峰值,如果它被平滑(降低)到每小时数据,然后再次(降低)在每日数据中,然后再次(降低)在每周数据,周和# 39; s数据不会反映出有一个峰值,因为平均值的平均值与所有点的平均值不同。
有没有软件可以做到这一点?如果没有,开始的好方法是什么?我可以用任何语言来做,但优先选择.NET,PHP或C(对于Windows),(按此顺序),因为这些是其他项目成员已经知道的语言,并且已经设置了日志记录硬件。 / p>
答案 0 :(得分:1)
您的数据问题是如此之大并且可能是开放式的,我认为没有任何一种工具可以解决您的问题。您可能需要为特定问题创建自己的工具。
我认为你应该看一下科学和工程界使用的基于Python的工具。这包括IPython和Matplotlib用于交互式数据分析和可视化。使用Numpy和Scipy来处理和处理大型数据阵列。最后,考虑SciKit Learn何时需要进行一些严重的数字运算。
祝你好运。答案 1 :(得分:0)
如果我今天仍在执行此项目(以及其他此类项目),我将使用Time Series Database (TSDB)。
TSDB是专门为随时间吸收大量数据点并进行分析而设计的。
我现在一直在为另一个项目使用PostgreSQL的TimeScale扩展名,它可以完全满足我的需要。