存储大量传感器数据记录

时间:2011-01-20 09:21:30

标签: sql-server sql-server-2008 database-design

我需要创建一个数据库来保存将要查询的传感器数据,以便稍后生成报告(显示给定时间范围内的图形和AVG / MAX / MIN值)。

数据点如下所示:

CREATE TABLE [dbo].[Table_1](
    [time] [datetime] NOT NULL,
    [sensor] [int] NOT NULL,
    [value] [decimal](18, 0) NULL
)

可以按秒到几分钟的间隔添加数据(取决于传感器)。

当数年累积数据时,我是否应该担心我的数据库变得太大(数据库将在MS SQL Server 2008工作组版本上运行)?

4 个答案:

答案 0 :(得分:3)

有专门的历史数据库,例如OSISoft的PI Historian,它比关系数据库更好地处理这类数据。使用PI,您可以为每个数据点配置压缩偏差,这样即使数据至少因压缩偏差而改变,也不会存档数据。当您查询给定点的历史数据时,您可以要求PI对指定时间内的值进行插值,即使您的时间段在存档值之间也是如此。

它能够提供更多功能,但您必须自己探索,因为我不打算成为OSISoft推销员。但是,这绝对是您希望存储大量传感器数据的方式。

答案 1 :(得分:1)

这一切都取决于你想要花费多少资源和精力。每秒1行,每个传感器每年仍然小于0.5GB,这是非常小的。如果您有数千个传感器,那么您可能需要考虑是否创建汇总表以帮助报告和分析数据。

像这样的传感器数据通常是非常重复的。有更方便的方法来存储重复值 - 例如,存储一行具有一定范围的行而不是多行具有不同的时间。

有许多软件包可以帮助存储和管理这种时间序列数据。关于这个主题还有大量的研究和文献,可能对你有所帮助。如果你还不熟悉谷歌,那就像“Process Historian”,“复杂事件处理”和“SCADA”这样的术语。

答案 2 :(得分:1)

这取决于您将如何使用数据,您还添加了哪些索引,传感器数量等等。

如图所示,该表可以在~6GB空间(假设堆)中存储1.5亿行(约1个传感器x每秒1次记录×5年)。 file size limit是16 TB,我不知道Workgroup版本对此有任何限制。

答案 3 :(得分:0)

如果您担心数据库变得过大,我建议您可以使用具有相同结构和归档数据的Archive_Table,例如每月或每月6次(完全基于数据量)。

因此,这将允许您检查表中的记录数。当然,存档表可以在您需要时生成报告。