1

我正在开发一个报告作为其业务大部分的交易平台。数据库(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的过程,也能够以最低的立方体重新构建的持续时间。

选项:

  1. 建立一个数据仓库。然后构建SSIS包以使用实时事务数据填充此结构。非正常化的结构可能看起来与上述观点非常相似。这里的缺点是,我并不觉得我简化了很多,实际上增加了一层,即从OLTP到OLAP(数据仓库)的数据迁移。而且我仍然需要重新构建多维数据集。
  2. 要将当前视图转换为SQL索引视图(物化视图),但在当前状态下,我无法完成此操作,因为在整个视图中使用了很多聚合和内联函数。
  3. 另一个选项是建立一个ODS(操作数据存储 - 这将是一个数据库,它将包含必要的表,类似于我现在的sql视图 - 并且不断刷新它)也许使用触发器或Transaction日志?但我不确定什么涉及到建立这样的事情,以及维护的难度。

问题: 我应该采取什么办法? 做到以上三点有什么意义吗? 当然,我也对其他想法或建议感兴趣。

谢谢!

回答

0

从我的经验来看,你最好的做法是1.它是昂贵的,但会给你更多的好处。如果你有机会使用列式数据存储(如amazon redshift或sap sybase iq)和所有case语句,嵌套ifs,创建一个ROLAP DWH(我建议Kimball的“数据仓库工具包”用于最佳实践和设计模式)并且您提到的所有操作都将应用于ETL时间,因此在ROLAP中,所有操作都会预先计算并优化为消耗。并且不要忘记aplying索引(取决于您使用的依赖技术)。有些数据库供应商已经发布了ROLAP的“索引最佳实践”,因此他们会告诉您哪种类型的索引适用于(例如)表的类型(维度)和数据类型。

+0

Hi Luis Leal。谢谢您的回复。 是的,数字1是我的第一选择,但是目前数据每30分钟通过SiSense中的立方体刷新,我们希望保持相同,不超过30分钟。因此,通过构建数据仓库,意味着我将通过另一层增加复杂性 - 这是ETL,这会延长数据刷新的时间。 – Alin

+0

因此,现在不是一个进程,而是通过直接从Live进行抽取的SQL Views,它将包含必要的逻辑(所有这些case语句),这些逻辑将把数据表单直接导入DW。然后SiSense立方体仍然需要从这些数据仓库表中抽取它。此外,他们不断改变如何通过case语句来拉取这些字段的逻辑,我想知道是否维护不会更糟,在SSIS中执行,而不是SQL视图。所以,我仍然困惑什么是最好的方法。 :) – Alin