任务:为了仪表板的目的,我有一个复杂的选择查询,有很多连接和子查询,可以从多个表中获取数据。
选项1:我可以使用SELECT
查询创建视图,Spotfire可以将该视图用作其信息中心的数据源。
选项2:我可以使用SELECT
查询作为源创建SSIS包,我可以将数据加载到单个表中每天一次。 Spotfire可以将该单个表用作其仪表板的源。
注意:我不想实时。仪表板可以每晚更新(每天一次)。
我的理解:我知道该视图基本上是一个存储的SELECT
查询。如果我创建一个视图,每次用户访问仪表板时,它都会尝试访问该视图。这意味着,在后端视图中将命中数据库中的基础表。而不是这个,我可以简单地让SSIS每天加载一次特定的表。因此,Dash将触及此表而不是实际的高度事务性表。
你能给我一个选项和解释吗?
答案 0 :(得分:4)
在某种程度上,这是一个意见问题。但是,您已经定义了以下情况:
结合起来,这些强烈主张在半夜创建仪表板表,以简化查询。
在许多环境中,底层事务表不直接用于报告。而是将表格复制到报告环境(定期或实时),报告环境用于报告。
答案 1 :(得分:4)
您似乎涵盖了大部分问题。
View的优势在于它是实时的,截至报告运行的那一刻。缺点是它在系统上的实时负载,不仅包括CPU,RAM和磁盘I / O,还包括(通常更重要的)表和行锁。
SSIS包的优势在于断开报告负载与生产负载的连接(再次:尤其是减少锁定争用是一个胜利),并且能够创建特殊的仅报告索引,使报告运行更快,而不一定需要维护这些索引,因为实时表的变化(特别是因为用于报告的索引通常与用于生产更新的索引非常不同)。缺点是增加了复杂性和故障点(如果SSIS包开始失败怎么办?),陈旧数据,以及如果你只是移动到同一服务器上的特殊表,报告仍然使用一些CPU,磁盘来自生产服务器的RAM资源,即使它已经减少了。
就个人而言,我倾向于使用视图,直到我不知道为止。
我的意思是,一旦我开始使用SSIS包将数据移动到一个单独的位置进行报告,我想进入"全押"在那个过程中。不要在同一台服务器上做一个报告或表格;获得一个单独的报告服务器(甚至是一个成熟的数据仓库解决方案)并尽可能多地移动到它。然后确保有人负责监控它的健康状况和迁移包的健康状况。我也开始努力改变企业文化,这样每个人都可以放心地看到昨天的数据。但我希望尽可能长时间地关闭它,并坚持使用Views,直到我开始看到一个切实的理由转移到某种真正的数据仓库或分析产品,这将证明这笔费用是合理的。
答案 2 :(得分:0)
首先,我同意这些意见和答案取决于您的要求。根据我的经验,VIEW选项最初很吸引人,因为它易于实现和维护,因为移动部件较少。
但是,随着数据量的增加,仪表板的性能和对底层事务系统的负面性能影响最终导致重构实现。
在我们的场景中,将报告问题与交易系统分开是正确的做法。为我们的报告实现物化视图(想想数据快照),消除了困扰用户并给系统带来不良声誉的锁定,超时和服务器重载。
如果您有时间并且相信您的数据量可能会显着增长,请认真考虑实质性观点。