【问题标题】:Storing large number of sensor data records存储大量传感器数据记录
【发布时间】:2011-01-20 09:21:30
【问题描述】:

我需要创建一个数据库来保存传感器数据,稍后将查询这些数据以生成报告(显示给定时间范围内的图表和 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 工作组版本上运行)?

【问题讨论】:

  • 多少个传感器? 1 还是 4000000000?
  • 尚待确定,但肯定小于50

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这完全取决于您想在上面花费什么资源和精力。在每秒 1 行的情况下,该表每年每个传感器仍将小于 0.5GB,这非常小。如果您有数千个传感器,那么您可能需要考虑是否创建汇总表来帮助报告和分析数据。

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

    有许多软件包可以帮助存储和管理这种时间序列数据。还有大量关于该主题的研究和文献,可能会对您有所帮助。如果您还不熟悉它,请搜索“Process Historian”、“复杂事件处理”和“SCADA”等术语。

    【讨论】:

    • 实际上数据来自 SCADA 系统。 ;-) 我将采用上述表格设计,因为他的 SQL 服务器似乎能够处理大量数据,而且很容易将报告系统甚至办公应用程序与这个简单的表格结构联系起来。
    【解决方案3】:

    这取决于您将如何使用数据、添加的索引、传感器数量等。

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

    【讨论】:

    • 我相信最终限制是 524 PB(数据库限制,而不是文件大小限制)。
    • @grimmig - 我最初设置了数据库大小限制,但是由于您指定了工作组版本,因此您不能使用分区表,所以如果您将它保存在一张表中,那么一张表只能存在于一个文件中。
    • 很高兴知道,谢谢。我的申请仍将远低于限制,因为在大多数情况下我不需要第二次间隔。
    • @grimmig - 事实上,我想我可能有这个错误。表被限制为单个文件组,而不是单个文件。但正如您所说,使用 50 个传感器似乎在限制范围内。
    【解决方案4】:

    如果您担心数据库变得太大,那么我建议您可以拥有一个具有相同结构的 Archive_Table,并按每月或 6 个月(完全基于数据量)的间隔归档数据。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 2015-09-23
      • 2011-02-28
      相关资源
      最近更新 更多