【问题标题】:SQL Server: Grandfather-Father-Son archivingSQL Server:祖父-父-子归档
【发布时间】:2011-12-14 10:25:15
【问题描述】:

A) 是否可以进行祖父-父-子归档?例如,我们希望始终预先计算以下内容,而不预先计算任何其他内容:

  • 上周的每日总计
  • 过去 5-6 周的每周总计
  • 之前所有月份的每月总计

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

索引视图是否足以满足此目的?我们希望预先计算和存储所有字段。

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

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

【问题讨论】:

  • 索引视图在这里不是一个选项,因为您的定义依赖于当前日期(即非确定性值)

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


【解决方案1】:

答:您正在描述具有不同保留期/粒度的时间序列数据的存储,SQL Server 本身没有以任何形式提供的功能。您当然可以相当轻松地自己构建此策略,幸运的是,您在开源项目中有一些很好的示例可供指导:

  1. RRD Tool - 时间序列数据库和图形库。
  2. Graphite - 灵感来自 RRD 工具,由
  3. 构建

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

【讨论】:

    猜你喜欢
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多