SQL Server时间序列建模巨大的数据收集

时间:2015-06-18 16:13:15

标签: sql .net sql-server time-series

我必须实现数据收集,以便重播100-1000个设备的电气参数,并监控至少20个参数。这相当于庞大的数据收集,因为它与时间序列非常相似。我必须支持1秒的分辨率。思考1年[365 * 24 * 60 * 60 * 1000] = 31536000000行。 我做了我的研究,但仍然没有几个问题

  1. 由于数据量很大,将数据保存在同一个表中或表格是否应该进行吐出是很好的。 [数据结构相同]或我应该 依靠指数?

  2. 数据插入也会非常频繁,但我可以批量处理它们仍然是最好的方法吗?它是直接写入同一个数据库 或使用临时数据库进行写入和同步?

  3. SQL Server是否有特定的架构建议来进行选择,更新和插入的时间序列优化?任何开箱即用 有助于平均一天?或者我可以使用特定的通用聚合函数 写我自己但只是为了知道这是一个标准问题所以他们 可能有一些最佳实践和开箱即用的样品。**

  4. 请提前感谢任何帮助,请通知我

2 个答案:

答案 0 :(得分:2)

1)您可能想要探索分区的使用。这将允许非常有效的插入(如果正确进行分区,则为元操作)并且非常快(2)。您可能希望探索列存储索引,因为数据(一旦收集)将永远不会更改,您将拥有非常大的数据集。分区和列存储需要学习曲线,但它非常可行。 Internet上有很多代码描述了SQL Server中日期函数的使用。

答案 1 :(得分:0)

这是一个很大的数字,但我会从一张桌子开始看看它是否有用。如果将其拆分为多个表,则它仍然是相同数量的数据。

您是否需要跨设备搜索?如果没有,您可以为每个设备分别设置一个表。

我有一些审计表不是那么大,但仍然很大,没有任何问题。如果数据按时间顺序加载,则将日期作为聚簇索引的第一列(或唯一)。

如果PK是日期,那么设备就可以了,但是如果你能在同一秒内获得两次阅读,那么就无法做到。如果这是PK,那么你可以加载那种数据。即使你必须分阶段加载。你只是不能分割一个大的表。如果您无法通过排序加载,则填充因子为50%。

如果你不能拥有PK,那么只需使用日期作为聚集索引而不是PK,并在设备上放置非聚集索引。

我有一些3,000,000,000的桌子,我可以通过PK加载而没有其他索引。从第1行到第3,000行的插入物没有可测量的降级。