数据库(OLTP)和报告

时间:2016-07-26 20:04:32

标签: reporting-services data-warehouse business-intelligence

我正在开发一个报告作为其业务重要部分的交易平台。

设置如下: SQL OLTP数据库(大约200个表) - 记录数量相当少。 (20,000记录了最大的表 - 但每周都在增长) 对于报告服务,SQL视图用于查询实时事务数据库。根据数据仓库方法的精神,想象一下视图的结果集是非规范化的。然后将这些数据集传递给第三方报告平台(如Tableau,Power Bi或SiSense),它们将这些数据集投入Cubes(可能是一些柱状结构,如mono db,hadoop等)。从那里开始生成报告。

当前的挑战。 SQL视图(大约8个)。是巨大的,很难维护。举个例子,其中一个视图输出100个字段。但是这些字段中的每一个都是具有复杂CASE语句,嵌套IF语句,内联函数以及其他内容的计算字段,这使得该视图大到700行sql代码。我从花药员工那里继承了这些,现在,遗憾,我必须维护它们。 由于数据每周增加数百条记录(通过迁移和事务),并且视图中的字段数也会增长(每周几个),因此多维数据集构建需要更长时间。举个例子,几个月前我们设置了重建的立方体,用10分钟刷新数据(花了5分钟)。目前需要12-15分钟才能建成,所以我们每30分钟设置一次。可以想象,随着数据和字段数量的不断增长,情况会变得更糟;我们需要尽可能多的数据。

唯一的好处是,一旦构建了多维数据集,报告就会快速加载,因为它们是从第三方平台中提取的,所以这里不用担心。

我的想法 我想摆脱这些观点,这样我就可以简化维护过程,并且至少可以保持多维数据集重建的持续时间。

选项:

  1. 构建数据仓库。然后构建SSIS包以使用实时事务数据填充此结构。去标准化的结构可能看起来与上面提到的观点非常相似。这里的回顾是我真的不觉得我简化了很多,实际上又增加了一层,即从OLTP到OLAP(数据仓库)的数据迁移。我仍然需要重新构建立方体。
  2. 要将当前视图转换为SQL索引视图(物化视图),但是在当前状态下,由于在整个视图中大量使用了agregate和inline函数,我根本无法做到这一点。
  3. 我的另一个选择是建立一个ODS(操作数据存储 - 这将是一个数据库,它将包含类似于我现在的sql视图的必要表 - 并且不断刷新它)也许使用触发器,或者,Transaction日志?但是我不确定是什么涉及到构建这样的东西以及维护的难度。
  4. 问题: 我应该采取什么方法? 上面3中的任何一个都有意义吗? 当然,我也对其他想法或建议感兴趣。

    谢谢!

1 个答案:

答案 0 :(得分:0)

从我的经验来看,你最好的方法将是1.它代价高昂,但会给你更好的福利。创建一个ROLAP DWH(我推荐Kimball'数据仓库工具包"用于最佳实践和设计模式),如果您有机会使用柱状数据存储(如amazon redshift或sap sybase iq) )并且所有case语句,嵌套的ifs和你提到的所有操作都将应用于ETL时间,因此在ROLAP中,所有内容都是预先计算并优化为使用。并且不要忘记应用索引(取决于您使用的依赖技术)。一些数据库供应商已经发布了#34;索引最佳实践"对于ROLAP,他们会告诉你哪种类型的索引aply,具体取决于表的类型(维度)和数据类型。