SQL Server分区策略

我有以下要求:

  • 我们存储过去一年中10家公司的每日订单详情。

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

这很好。 但是,由于我们每小时都会从存档中添加“未修改的行”,因此此过程不是最佳的。 比如说我们在一个小时内只收到一家公司的订单,根据目前的实施情况,我们最终将所有其他9家公司的订单进行复制,以填充小时表。

有人可以推荐一个更好的方法来做到这一点?

我们一直在考虑通过公司而不是date来创build一个分区,但是我们该如何处理每小时的切换过程呢?

理想情况下,您只需要在新增的小时内切换,而不需要复制或触摸以前的数据。 但是,这将需要每小时1个分区,你将在4天内用完分区。 即使使用SQL 2008 SP2 增加的分区支持,您也只能存储less于2年的数据。 作为一个扩展,有3个表格和从现在到老的切换分区,然后到更老的一个,你可以覆盖5年,这是一个典型的数据保留策略要求,但我不会轻易推荐这个。

对于你所处的情况,我确实认为你正在做最好的解决scheme。 我会考虑的是提前准备下一个小时的分区:

  • 在H小时开始接收最新的数据并将其存储在表T中。此表是提前为当前分区(也就是当前分区的副本)提供的已存档数据准备好的。
  • 当数据接收完成时,使用快速批量操作(select into,bcp,insert bulk,openrowset bulk等)创build表T的副本T'。 这个T'副本成为下一小时接收新数据的表格。
  • 在表格T中切换
  • 将T'重命名为T,就可以准备好接下来的数据。

当然,我在这里做了一个假设,一旦导入,数据不会被修改,这在大多数ETL场景中是相当普遍的。