何时构建单独的报告数据库?

Adr*_*n K 33 database architecture database-design reporting

我们正在构建一个拥有数据库的应用程序(是的,非常令人兴奋的呵呵:).数据库主要是事务性的(支持应用程序),并且还会在应用程序中进行一些"报告" - 但没有什么太费劲.

除此之外,我们还有一些报告要求 - 但目前它们非常模糊和高级.我们有一个标准的报告工具,我们在内部使用,随着需求的巩固,我们将用它来进行"更重"的报告.

我的问题是:您如何知道何时需要单独的报告数据库?

需要问什么样的问题?什么样的事情会让你决定一个单独的报告数据库是必要的?

Rob*_*Rob 35

In general, the more mission critical the transactional app and the more sophisticated the reporting requirements, the more splitting makes sense.

  1. When transaction performance is critical.
  2. When it's hard to get a maintenance window on the transactional app.
  3. If reporting needs to correlate results not only from this app, but from other application silos.
  4. If the reports need to support trending or other types of reporting that are best suited for a star schema/Business Intelligence environment.
  5. If the reports are long running.
  6. If the transactional app is on an expensive hardware resource (cluster, mainframe, etc.)
  7. If you need to do data cleansing/extract-transform-load operations on the transactional data (e.g., state names to canonical state abbreviations).

It adds non-trivial complexity, so imo, there has to be a good reason to split.


Cad*_*oux 28

通常,我会尝试最初报告事务数据库.

确保您经常使用添加的任何索引以促进有效报告.您添加的索引越多,性能越差,插入和(如果您更改密钥)更新.

当您转到报告数据库时,请记住您只有几个原因:

最终,关于报告数据库的首要问题是您正在从OLTP数据库中删除锁定争用.因此,如果您的报告数据库是同一数据库的直接副本,那么您只需使用不会干扰生产事务的延迟快照.

接下来,您可以使用单独的索引策略来支持报告使用方案.这些额外的索引可以在报告数据库中维护,但会在OLTP数据库中造成不必要的开销.

现在,上述两种方法都可以在同一台服务器上完成(即使是在单独的数据库中的相同实例,甚至只是在单独的模式中),仍然可以看到好处.当CPU和IO完全挂钩时,此时,您肯定需要将它放在一个完全独立的盒子上(或升级您的单个盒子).

最后,为了最终报告的灵活性,您可以对数据进行非规范化(通常是对维度模型或星型模式),以便报告数据库是不同模型中的相同数据.在维模型中报告大量数据(特别是聚合)非常快,因为星型模式非常有效.对于更多种类的查询而言,如果没有大量的重新索引或分析来更改索引,它也是有效的,因为维度模型更适合于无法预料的使用模式(旧的"切片和骰子每个方向"请求).您可以看到这是一种使用数据仓库技术的小型数据仓库,但不一定要实现完整的数据仓库.此外,星型模式对于用户来说特别容易掌握,数据字典更简单,更容易为星型模式的BI工具或报表工具构建.你可以在同一个盒子或不同的盒子上做这个,就像前面讨论过的那样.


小智 9

@北极:

希望你在近两年后找到答案.这个问题需要经验而不是科学.

作为BI架构师,我为客户设计每个BI解决方案的方法非常不同.我没有查看清单.它需要对其系统,报告要求,预算和人力有一个大致的了解.

我个人更喜欢在数据库方面尽可能多地保留报告流程(BI世界中的最佳实践).报告工具仅用于显示目的(最小用于小型计算).这种方法需要大量的数据预处理,这需要不同的登台表,触发器等.

当你说:

我处理具有数亿行的项目,实时报告以及数百名用户同时访问应用程序/数据库而没有问题.

你的陈述有一些问题.

  1. 数以亿计的行很多.即使在今天,像Cognos TM1或Qlikview这样的内存工具也难以获得这样的结果.(查看SAP的SAP HANA,了解业内巨头如何处理它).

  2. 如果数据库中有数亿行,则并不一定意味着报告需要遍历所有这些记录.也许报告的工作量不是数百万,而是千万.可能那就是你所看到的.

  3. 交易报告与仪表板非常不同.大多数仪表板工具都会预处理和缓存数据.

我知道我在2年后回答并且我的思想组织得不好,但我的观点是,在决定何时:1.设计新模式2.创建语义数据库3.处理相同的事务时,所有这些都有所体验数据库4.甚至使用报告工具(有时手写的仪表板与Java/JSF/Ajax/jQuery或JSP可以很好地为客户端工作)