【问题标题】:Organizing millions of measurements in database tables在数据库表中组织数百万个测量值
【发布时间】:2015-12-03 19:01:46
【问题描述】:

我正在尝试找出存储测量数据的最佳方式:

  1. 我有超过 50 种乐器
  2. 仪器独立,无需链接数据
  3. 每台仪器每分钟生成一条记录
  4. 每条记录大约有 1400 个测量值(浮点值)
  5. 每条记录都有唯一的测量时间
  6. 我将使用查询来选择时间之间的数据(在 99% 的情况下)
  7. 我将使用查询来选择最多一个月的测量类型(5 - 30 种测量类型)
  8. 有时我会查询特定日期和时间的所有测量值
  9. 并非所有数据都同等重要。在大多数情况下,将选择大约 100-200 种测量类型
  10. 我将录制至少 6 个月
  11. 插入不是问题
  12. 我使用的是 SQL Server 2012

最好的方法是什么?

  1. 我正在考虑为每种乐器创建 7 个表。第一个表只能包含最重要的测量类型(200 列)。其余表将包含大约 200 列。如果我将使用 Join 从多个表中进行选择,如何最有效地索引数据?这样我每天就有 1440 行。

  2. 其他方法是创建两个表。首先将包含从时间创建的主键。对于每个测量,我会在第二个表中放一行。这样我每天就有 200 万行。

【问题讨论】:

  • 是否需要存储所有 1400 个测量值?如果只存储汇总数据会怎样?如果报告将使用汇总数据,则会减少存储需求,并允许更快地生成报告。
  • 我必须存储所有测量值。我可以选择将记录间隔缩短到一个月。
  • 空间要求不是问题。我每天对每台仪器进行 200 万次测量。我有类似的系统运行了将近一年,但我每 10 分钟存储一次数据。我正在使用 MySQL 服务器作为数据库引擎。数据库已增长到近 20 GB。
  • 我预计当项目进入生产阶段(最多 300 台设备)时仪器会大量增加。记录设置将受到每年 100 GB 数据库大小的限制。
  • 您打算如何提取数据?有了这么多记录,您可能会希望忽略规范化,转而支持数据仓库式架构。从 100GB 的数据库中检索应该是一个考虑因素。

标签: sql-server database sql-server-2012


【解决方案1】:

考虑只创建一个表。您希望通过“时间”表实现的目标可以通过列值的数据库内压缩和按月对表进行分区来实现。您希望通过将数据拆分为可以通过索引实现的各种表来实现。

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 2018-12-21
    • 2017-11-22
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多