【发布时间】:2016-11-30 15:17:23
【问题描述】:
我正在开发一个交易平台,该平台将报告作为其业务的很大一部分。
设置如下: SQL OLTP 数据库(大约 200 个表)——记录数量相当少。 (20,000 条记录是最大的表——但每周都在不断增长) 对于报告服务,SQL 视图用于查询实时交易数据库。本着数据仓库方法的精神,想象一下视图的结果集是非规范化的。然后将这些数据集传递到第三方报告平台(如 Tableau、Power Bi 或 SiSense),该平台将这些数据集放入 Cube(可能是一些柱状结构,如 mono db、hadoop 等)。从那里生成报告。
当前的挑战。 SQL 视图(大约 8 个)。很大而且很难维护。举个例子,其中一个视图输出 100 个字段。但是这些字段中的每一个都是计算字段,有复杂的 CASE 语句、嵌套的 IF 语句、内联函数等等,这使得这个视图有 700 行 sql 代码。我从另一个员工那里继承了这些,现在,可悲,我必须维护它们。 因为数据每周增长数百条记录(通过迁移和事务),并且视图中的字段数量也在增长(每周几个),所以构建多维数据集的时间越来越长。举个例子,几个月前,我们设置了每 10 分钟重新构建的多维数据集以刷新数据(这需要 5 分钟)。目前构建需要 12-15 分钟,因此我们每 30 分钟设置一次。可以想象,随着数据和字段数量的不断增长,这种情况会变得更糟;我们需要尽可能最新的数据。
唯一的好处是,一旦构建了多维数据集,报告加载速度很快,因为它们是从 3rd 方平台拉出来的,所以这里不用担心。
我的想法 我想摆脱这些视图,这样我就可以简化维护过程,并至少保持立方体重建的持续时间。
选项:
- 构建数据仓库。然后构建 SSIS 包以使用实时事务数据填充此结构。去规范化的结构可能看起来与上面提到的视图非常相似。这里的缺点是我真的觉得我并没有简化太多,实际上增加了一层,即从 OLTP 到 OLAP(数据仓库)的数据迁移。而且我仍然需要重新构建立方体。
- 要将当前视图转换为 SQL 索引视图(物化视图),但在它们的当前状态下,我根本做不到,因为在整个视图中大量使用了聚合和内联函数。
- 另一个我很喜欢的选项是构建一个 ODS(操作数据存储 - 这将是一个数据库,其中包含类似于我现在拥有的 sql 视图的必要表 - 并不断刷新它)也许使用触发器,或者,事务日志?但我不确定构建这样的东西涉及什么以及维护起来有多难。
问题: 我应该采取什么方法? 以上3个中的任何一个有意义吗? 当然,我也对其他想法或建议感兴趣。
谢谢!
【问题讨论】:
标签: reporting-services data-warehouse business-intelligence