在SQL中存储/更新基于间隔的数据的最有效方法是什么?

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

要回复问题请先登录注册