我们现在正在从 MySQL 数据库迁移到 MSSQL 2008R2 数据库。由于该项目是一个 Web 应用程序,我们需要能够很好地扩展,因此我们需要重新设计数据库处理数据的方式。
我们有 3 个独立的环境:生产、暂存和存档/备份。
首先,是否可以仅在存档环境中设置分析和报告服务?或者它们在原始事务发生的环境中运行是否至关重要?(也许服务需要所有精确的日志等?)这样做的目的是能够“减轻”生产的关键系统,并将负担转移到存档中,服务可以自由地使用更多资源。
其次,有什么好方法可以确保存档/备份环境得到更新和完整?有什么工具可以推荐吗?我们正在研究红门但我们也没有这方面的经验。我们需要将数据库与备份存档同步到新内容中
第三,我们希望有某种“祖父-父亲-儿子”分组。例如,我们希望始终预先计算以下内容,并且没有其他的预先计算:
- 上周每日总计
- 前 5-6 周的每周总计
- 所有前几个月的月度总计
索引视图是否足以满足此目的?我们希望预先计算并存储所有字段。
最后,我们希望拥有一些像 StackExchanges(以及一般的 Wiki)版本控制这样的功能。有没有办法以某种方式存档旧版本,但仍在生产环境中,并让新版本的内容更容易获得?我们一直在研究分区但它似乎无法处理这种复杂的情况(我们不希望对 X 日期之前的所有帖子进行分区,而不是我们需要所有比最新版本更旧的版本)。
如果您对所有子问题没有直接的答案,请留下答案,以便我们能够收集有关归档最佳实践/可扩展性的完整答复。
如果您建议的一些功能/工具来自较新的 2012 版本,那么没问题,因为我们会在版本发布后进行升级。
答案1
是的,您可以让分析和报告只针对一个环境,因为您只需将它们指向该环境即可。最佳实践是在应用程序的生产数据库以外的框上运行 SSRS(报告服务)和 SSAS(分析服务)。这是因为核心数据库引擎、SSRS 和 SSAS 都以不同的方式使用 I/O 和内存。如果您计划在某个时候这样做,它们也会以不同的方式进行集群。
CDC(变更数据捕获)可能允许您执行所需的归档策略,但您需要查看是否可以有效地子类化删除语句。基本上,您需要从生产中删除两种类型的删除...一种是将其从生产中删除(更小、更快的事务数据库),但不会将其从归档中删除,第二种删除是从所有环境中删除数据。理论上我相信这是可能的,但我从未在生产中这样做过。