SQL Server:祖父 - 父亲 - 儿子归档

时间:2011-12-14 10:25:15

标签: sql-server sql-server-2008 archive sql-server-2012

A)祖父 - 父子存档是否可能?例如,我们希望在任何时候都进行以下预先计算,并且没有其他任何预先计算的内容:

  • 上周的每日总数
  • 前一周5-6周的总计
  • 前几个月的每月总数

请注意,我们想要例如2个月前的每日总计。我们希望删除每日总计。

为此目的,索引视图是否足够好?我们希望预先计算并存储所有字段。

B)我们希望有一些功能,如StackExchanges(以及一般的Wikis)版本。有没有办法在生产环境中以某种方式存档旧版本,并保持更新版本的东西更容易获得?我们一直在研究Partitioning但它似乎没有处理这种错综复杂的场景(我们不希望对X日期之前的所有帖子进行分区,而不是我们需要比最新版本更旧的所有版本)

这些问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

答:您正在描述具有不同保留期/ graularity的时间序列数据的存储,SQL Server本身不以任何形式提供这些功能。你当然可以很容易地自己构建这个策略,幸运的是你在开源项目中有一些很好的例子可以作为指导:

  1. RRD Tool - 时间序列数据库和图表库。
  2. Graphite - 受RRD工具启发,由
  3. 构建

    B:很难用一般的术语说话,但也许你可以在你的桌子上维护一个Version列,其中0总是反映最新的版本。每次推广新版本时,您都会通过递增此值来降级所有其他版本。随着版本的增加,版本会增加,允许您在确定性值(版本= 0)上创建过滤索引,从而使其获得当前版本的高效性。
    然后,您可以根据版本之前的数量而不是日期进行清除。只需delete yourTable where Version > 5。分区方案也可以使用此方法。