我正在开发一个报告作为其业务大部分的交易平台。数据库(OLTP)和报告
设置如下: SQL OLTP数据库(大约200个表) - 记录数量相当少。 (20,000记录最大的表 - 但每周保持增长) 对于报告服务,正在使用SQL视图查询实时事务数据库。按照数据仓库方法的精神,将这些视图的结果集设想为非规范化视图。然后将这些数据集传递给第三方报表平台(如Tableau,Power Bi或SiSense),这些平台将这些数据集引入多维数据集(可能是一些柱状结构,如mono db,hadoop等)。从那里报告正在生成。
当前的挑战。 SQL视图(约8)。庞大而且很难维护。举个例子,其中一个视图输出100个字段。但是,这些字段中的每一个都是带有复杂CASE语句的计算字段,嵌套的IF语句,内联函数以及哪些不是,这使得该视图与700行SQL代码一样大。我从花药员工那里继承了这些,现在,黯然,我必须维护他们。 由于数据每周增长数百条记录(通过迁移和交易),并且视图中的字段数量也在增加(每周几次),因此建立立方体需要的时间越来越长。举个例子,几个月前我们设立了10分钟的立方体刷新数据(这需要5分钟)。目前需要12-15分钟才能建成,所以我们每30分钟设置一次。正如你可以想象的那样,随着数据和领域数量的不断增长,情况会变得更糟。我们需要尽可能多的数据。
唯一的好处是,一旦建立了多维数据集,报表就会加载得很快,因为它们正在从第三方平台拉出来,所以这里没有关注。
我心目中 我想摆脱的意见,这样我就可以缓解maintenanace的过程,也能够以最低的立方体重新构建的持续时间。
选项:
- 建立一个数据仓库。然后构建SSIS包以使用实时事务数据填充此结构。非正常化的结构可能看起来与上述观点非常相似。这里的缺点是,我并不觉得我简化了很多,实际上增加了一层,即从OLTP到OLAP(数据仓库)的数据迁移。而且我仍然需要重新构建多维数据集。
- 要将当前视图转换为SQL索引视图(物化视图),但在当前状态下,我无法完成此操作,因为在整个视图中使用了很多聚合和内联函数。
- 另一个选项是建立一个ODS(操作数据存储 - 这将是一个数据库,它将包含必要的表,类似于我现在的sql视图 - 并且不断刷新它)也许使用触发器或Transaction日志?但我不确定什么涉及到建立这样的事情,以及维护的难度。
问题: 我应该采取什么办法? 做到以上三点有什么意义吗? 当然,我也对其他想法或建议感兴趣。
谢谢!
Hi Luis Leal。谢谢您的回复。 是的,数字1是我的第一选择,但是目前数据每30分钟通过SiSense中的立方体刷新,我们希望保持相同,不超过30分钟。因此,通过构建数据仓库,意味着我将通过另一层增加复杂性 - 这是ETL,这会延长数据刷新的时间。 – Alin
因此,现在不是一个进程,而是通过直接从Live进行抽取的SQL Views,它将包含必要的逻辑(所有这些case语句),这些逻辑将把数据表单直接导入DW。然后SiSense立方体仍然需要从这些数据仓库表中抽取它。此外,他们不断改变如何通过case语句来拉取这些字段的逻辑,我想知道是否维护不会更糟,在SSIS中执行,而不是SQL视图。所以,我仍然困惑什么是最好的方法。 :) – Alin