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.
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世界中的最佳实践).报告工具仅用于显示目的(最小用于小型计算).这种方法需要大量的数据预处理,这需要不同的登台表,触发器等.
当你说:
我处理具有数亿行的项目,实时报告以及数百名用户同时访问应用程序/数据库而没有问题.
你的陈述有一些问题.
数以亿计的行很多.即使在今天,像Cognos TM1或Qlikview这样的内存工具也难以获得这样的结果.(查看SAP的SAP HANA,了解业内巨头如何处理它).
如果数据库中有数亿行,则并不一定意味着报告需要遍历所有这些记录.也许报告的工作量不是数百万,而是千万.可能那就是你所看到的.
交易报告与仪表板非常不同.大多数仪表板工具都会预处理和缓存数据.
我知道我在2年后回答并且我的思想组织得不好,但我的观点是,在决定何时:1.设计新模式2.创建语义数据库3.处理相同的事务时,所有这些都有所体验数据库4.甚至使用报告工具(有时手写的仪表板与Java/JSF/Ajax/jQuery或JSP可以很好地为客户端工作)