我有以下要求:
date公司订单
2010年01月01日Comp A Order#1
01-Jan-2010 Comp A Order#2
2010年1月1日组合B订单#1
..
2010年12月31日Comp A Order#1
2010年12月31日Comp A Order#2
2010年12月31日组合B订单#1
数据库每小时加载一个或多个公司的新的或更新的订单详细信息。 (注意:每个公司可能有数以千计的订单到达每个小时周期)
目前我们通过SQL Server 2005分区来处理这个问题,如下所示:
这很好。 但是,由于我们每小时都会从存档中添加“未修改的行”,因此此过程不是最佳的。 比如说我们在一个小时内只收到一家公司的订单,根据目前的实施情况,我们最终将所有其他9家公司的订单进行复制,以填充小时表。
有人可以推荐一个更好的方法来做到这一点?
我们一直在考虑通过公司而不是date来创build一个分区,但是我们该如何处理每小时的切换过程呢?
理想情况下,您只需要在新增的小时内切换,而不需要复制或触摸以前的数据。 但是,这将需要每小时1个分区,你将在4天内用完分区。 即使使用SQL 2008 SP2 增加的分区支持,您也只能存储less于2年的数据。 作为一个扩展,有3个表格和从现在到老的切换分区,然后到更老的一个,你可以覆盖5年,这是一个典型的数据保留策略要求,但我不会轻易推荐这个。
对于你所处的情况,我确实认为你正在做最好的解决scheme。 我会考虑的是提前准备下一个小时的分区:
当然,我在这里做了一个假设,一旦导入,数据不会被修改,这在大多数ETL场景中是相当普遍的。