关于连接性能与系统非规范化的任何好的文献?

时间:2009-08-02 08:06:09

标签: sql legacy-code denormalization premature-optimization

作为this question的推论,我想知道是否有良好的比较研究,我可以参考并传递使用RDMBS的优点做连接优化与系统非规范化,以便始终访问单个表格一段时间。

具体来说,我想了解以下信息:

  • 性能或规范化与非规范化。
  • 规范化与非规范化系统的可扩展性。
  • 非规范化的可维护性问题。
  • 模型与非规范化的一致性问题。

有一段历史可以看到我要去的地方:我们的系统使用内部数据库抽象层,但它很老,无法处理多个表。因此,必须在每个相关表上使用多个查询来实例化所有复杂对象。现在为了确保系统始终使用单个表格,在整个表格中使用重度系统非规范化,有时会将两个或三个层次压平。至于n-n关系,他们似乎已经通过精心设计他们的数据模型来解决这个问题,以避免这种关系,并始终回到1-n或n-1。

最终结果是一个复杂的过于复杂的系统,客户经常抱怨性能。在分析这样的瓶颈时,他们永远不会质疑系统所基于的这些基本前提,并且总是寻找其他解决方案。

我错过了什么吗?我认为整个想法是错误的,但不知何故缺乏无可辩驳的证据来证明(或反驳)它,这就是我转向你的集体智慧,指向我的良好,被广泛接受的文学,可以说服我团队中的其他人方法是错误的(说服我,我对于一致的数据模型我太偏执和教条)。

我的下一步是建立自己的测试台并收集结果,因为我讨厌重新发明轮子,我想知道这个主题上有什么。

----编辑 注意:系统最初是使用没有数据库系统的平面文件构建的......后来才将其移植到数据库,因为客户端坚持使用Oracle进行系统管理。他们没有重构,只是简单地添加了对现有系统的关系数据库的支持。平面文件支持后来被删除,但我们仍在等待重构利用数据库。

2 个答案:

答案 0 :(得分:2)

一个想法:你有一个明确的阻碍不匹配,一个数据访问层,只允许访问一个表?停在那里,这与关系数据库的最佳使用不一致。关系数据库旨在很好地执行复杂查询。除了返回一个表之外别无选择,并且可能在bausiness层中进行任何加入,这是没有意义的。

为了证明规范化,以及潜在的一致性成本,您可以参考Codd之后的所有材料,请参阅维基百科article

我预测对这种东西进行基准测试将是一项永无止境的活动,特殊情况将会比比皆是。我声称规范化是“正常的”,人们可以从干净的数据库设计中获得足够好的性能。也许一种方法可能是一种调查:“你的数据规范化程度如何?从0到4。”

答案 1 :(得分:1)

据我所知,Dimensional Modeling是系统非规范化的唯一技术,其背后有一些理论。这是data warehousing技术的基础。

DM于1997年由Ralph Kimball在“A Dimensional Modeling Manifesto”中首创.Kimball还撰写了大量书籍。这本似乎评价最好的书是“The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling (Second Edition)”(2002),虽然我还没看过。

毫无疑问,非规范化可以提高某些类型查询的性能,但它会以牺牲其他查询为代价。例如,如果您在产品和订单(在典型的电子商务应用程序中)之间存在多对多关系,并且您需要以最快的速度查询给定订单中的产品,那么您可以将数据存储在一种非规范化的方式来支持它,并获得一些好处。

但这使得查询给定产品的所有订单更加尴尬和低效。如果您同样需要进行两种类型的查询,则应该坚持使用标准化设计。这可以达成折衷,使两个查询都具有相似的性能,但两者都不会像支持一种查询的非规范化设计那样快。

此外,当您以非规范化方式存储数据时,您需要做额外的工作以确保一致性。即没有意外的重复和没有破坏的参照完整性。您必须考虑添加手动检查以保持一致性的成本。