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

Posted

技术标签:

【中文标题】关于连接性能与系统非规范化的任何好的文献?【英文标题】:Any good literature on join performance vs systematic denormalization? 【发布时间】:2010-11-16 03:29:31 【问题描述】:

作为this question 的必然结果,我想知道是否有很好的比较研究,我可以咨询并传递使用 RDMBS 进行连接优化与系统地反规范化以便始终一次访问单个表的优势.

我特别想了解以下信息:

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

有点历史看看我要去哪里:我们的系统使用内部数据库抽象层,但它非常旧,不能处理多个表。因此,所有复杂对象都必须在每个相关表上使用多个查询来实例化。现在,为了确保系统始终使用单个表,在整个表中都使用了重度系统非规范化,有时会压平两到三层深度。至于 n-n 关系,他们似乎已经通过精心设计他们的数据模型来解决它,以避免这种关系,并且总是退回到 1-n 或 n-1。

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

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

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

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

【问题讨论】:

【参考方案1】:

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

DM 由 Ralph Kimball 于 1997 年在“A Dimensional Modeling Manifesto”中率先提出。Kimball 还撰写了大量书籍。似乎有最好评论的书是“The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling (Second Edition)”(2002),虽然我还没有读过。

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

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

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

【讨论】:

确实,它涉及大量额外的工作,并产生大量必须管理​​的冗余,并且(在我看来)使整个系统变得脆弱,因为它往往会产生大量的耦合在应用程序的业务层中,通常应该埋在持久性和物化层中。虽然我怀疑他们最初的设计和想法源于维度建模,但我会阅读它,但这一定是我第一次听说非规范化应用于手术优化之外。【参考方案2】:

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

有关规范化的理由和潜在的一致性成本,您可以参考 Codd 以后的所有材料,请参阅 Wikipedia article。

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

【讨论】:

我同意你关于不匹配的观点,我技术上的每一根纤维都在向我大喊这是多么错误,但要令人信服,我需要的不仅仅是感觉和预感。我在数据库方面的经验比学术更实用,因此我缺乏做案例的理论背景。您提到的文章中有很多材料,我需要一段时间才能穿过树枝。

以上是关于关于连接性能与系统非规范化的任何好的文献?的主要内容,如果未能解决你的问题,请参考以下文章

什么是非规范化 mysql 数据库的好方法?

关于非规范化。我怎样才能使这个查询更短或更好? (SQL SERVER 2000)[关闭]

您如何表示 Apache Beam 中长时间延伸的非规范化连接

从单个非规范化表创建规范化表

AngularFire - 如何查询非规范化数据?

使用算术运算优化 MySQL 嵌套选择