刷新准备好的报告表大约需要5-10分钟。我们希望不断更新此表(可能每15分钟或连续一次)。
我们非常频繁地查询此报告表(每分钟多次),我无法在任何时间内保持这种状态。如果数据是15分钟就可以了。
我无法删除表并重新创建它。我无法删除表的内容并重新创建它。
我应该使用哪种技术,比如在两个表之间交换(在我们构建另一个表时从一个表读取),还是将这个5-10分钟的进程放在一个大型事务中?
答案 0 :(得分:13)
Use synonyms?。在创作时,这指向tableA。
CREATE SYNONYM ReportingTable FOR dbo.tableA;
15分钟后,您创建tableB并重新定义同义词
DROP SYNONYM ReportingTable;
CREATE SYNONYM ReportingTable FOR dbo.tableB;
同义词只是指向实际表的指针:这样,实际表重命名等的处理被简化并抽象出来,所有代码/客户端都将使用ReportingTable
编辑,2011年11月24日
所有版本都提供同义词:分区切换仅限企业/开发人员。
编辑,2012年2月
您可以在标准版本中切换整个表格(可能是Express,未经测试)
ALTER TABLE .. SWITCH ..
如果目标表为空,这将比同义词更优雅。
编辑,2012年2月(2)
通过架构进行轮播答案 1 :(得分:1)
是的,您应该交换表,如果尚未完成,请考虑为报告表使用不同的服务器或其他物理分区。
近乎实时报告的推荐方法是从操作系统卸载读取,并将报告活动与报告系统中的读取活动分开。
你已经完成了第一部分,至少在逻辑上,有一个准备好的表。在用户的只读表和用于更新的单独表之间交换消除了事务之间的写 - 读冲突。成本是用户的缓存延迟,但如果需要,应该可以采取措施最大限度地缩短准备时间并更频繁地交换表。
有关实时报告中设计选择的更多信息,我推荐Wayne Eckerson撰写的一篇写得很好的论文,Best Practices in Operational BI。
答案 2 :(得分:0)
有两个表听起来像最简单的解决方案。
答案 3 :(得分:0)
在我们的项目中,我们使用了两个表,并使用Create / Alter View进行切换。