我有一个数据库表,其中包含大约7亿行(以指数级增长)基于时间的数据。
字段:
PK.ID,
PK.TimeStamp,
Value
我还有另外3个表将这些数据分组为Days,Months,Years,其中包含该时间段内每个ID的值的总和。这些表每晚都由一个SQL作业更新,当基表中的数据更新时,需要动态更新这些表的情况,这一次可以达到250万行(不是很多)通常,通常大约200-500k,每5分钟一次),这是否可能,而不会导致大规模的性能命中或什么是实现这一目标的最佳方法?
N.B
如果需要,可以更改每日,每月,每年的表格,它们用于加快查询,例如“获取过去5年中这5个ID的每月总计”,原始数据中这是关于1300万行数据,从月度表中排列300行。
我确实有SSIS可供我使用。
答案 0 :(得分:1)
索引视图将允许您存储和索引聚合数据。它们最有用的一个方面是您甚至不需要在任何查询中直接引用该视图。如果有人查询视图中的聚合,查询引擎将从视图中提取数据,而不是检查基础表。
当数据发生变化时,您需要支付一些额外的费用来更新视图,但从您的方案中听起来这是可以接受的。
答案 1 :(得分:1)
5个月内700M回归意味着5年内8.4B(假设数据流入没有增长)。 欢迎来到大数据世界。这里令人兴奋,我们每天都欢迎越来越多的新居民:)
我将描述您可以采取的三个增量步骤。前两个只是暂时的 - 在某些时候你会有太多的数据而且必须继续前进。但是,每一个都需要更多的工作和/或更多的钱,所以一次采取一个步骤是有道理的。
第1步:更好的硬件 - 向上扩展
更快的磁盘,RAID和更多RAM将带您走一些路。这称为扩展,最终会崩溃,但如果数据线性增长而不是指数增长,那么它会让你浮动一段时间。
您还可以使用SQL Server复制在另一台服务器上创建数据库的副本。复制通过读取事务日志并将其发送到副本来工作。然后,您可以运行在辅助服务器上创建聚合(每日,每月,每年)表的脚本,这些表不会破坏主服务器的性能。
第2步:OLAP
由于您可以随意使用SSIS,因此请开始讨论多维数据。凭借良好的设计,OLAP Cubes将带您走很长的路。他们甚至可能足以管理数十亿条记录,你可以在那里停留好几年(去过那里,它带我们两年左右)。
第3步:横向扩展
通过在多台计算机上分发数据及其处理来处理更多数据。完成后,这允许您几乎线性扩展 - 拥有更多数据然后添加更多机器以保持处理时间不变。
如果您有$$$,请使用Vertica或Greenplum的解决方案(可能还有其他选项,这些是我熟悉的选项)。
如果您更喜欢open source / byo,请使用Hadoop,将事件数据记录到文件中,使用MapReduce处理它们,将结果存储到HBase或Hypertable。这里有许多不同的配置和解决方案 - 整个领域仍处于起步阶段。
答案 2 :(得分:0)
为什么不创建月度表,只是为了保存那几个月所需的信息。这就像模拟多维表。或者,如果您可以访问多维系统(oracle,db2左右),则只需使用多维度。这适用于像你这样的时间段问题。此刻我没有足够的信息给你,但你可以通过谷歌搜索了解很多。
就像一个想法。