Kau*_*ele 4 rdbms denormalization nosql
在讨论针对传统RDBMS的NoSQL数据库时,许多文章都说,在NoSQL-DB中,所有相关数据都保存在一起,因此可以避免连接.因此,检索数据更快.简而言之,数据是非规范化的.非规范化也存在缺点.例如冗余,额外空间,需要在多个地方更新数据等
但不论非规范化的利弊是什么; 它是一个DB设计属性.如何将其归因于特定的DB类型?如果在给定的情况下,可以对数据进行非规范化,那么也可以在RDBM中实现相同的数据.
那么为什么将非规范化作为NoSQL db的属性进行讨论呢?
借用John Saunders,您可以在RDBMS中对数据进行非规范化 - 非规范化是大多数NoSQL数据库的属性("大多数"意味着"排除图形数据库"),因为在许多情况下,您必须进行非规范化才能获得不错的性能.
继续他的例子,假设我有一个人员记录,它有一个Car记录的外键(在这个例子中为了简化问题,每人一辆车),它有一个制造商记录的外键.对于一个特定的人,我想要那个人,他们的汽车和汽车制造商的记录.
在RDBMS中,我可以规范化这些数据并使用连接在一个查询中检索所有数据,或者我可以对这些数据进行非规范化 - 非规范化读取将比规范化读取便宜一点,因为连接不是免费的,但在此如果读取性能的差异可能不会很大.
我的NoSQL数据库可能不支持连接,所以如果我规范化这些数据,那么我将不得不为它做三次单独的查找,例如使用键值数据库我首先检索包含Car键的Person,然后我检索包含制造商密钥的汽车,然后我将检索制造商; 如果这些数据被非规范化,那么我只需要一次查找,因此性能提升将是显着的.在罕见的情况下,NoSQL数据库确实支持连接,因此它几乎肯定与位置无关,因此Person,Car和Manufacturer记录可能位于不同的服务器上,甚至可能位于不同的数据中心,从而导致非常昂贵的连接.
因此,您选择的过于简单的细分是:
您似乎在读炒作,而不是在阅读数据库设计文章。您可以对任何数据库进行非规范化。是的,NoSQL适用于非规范化数据是一件好事的情况,例如,在存储文档时,使用子文档而不是联接到另一个表。当子文档不重复时,这种方法效果最好。当然,如果它们是重复的,那么您将遇到通常的非规范化数据问题。
示例:人使用汽车。在关系数据库中,您将具有一个Persons表,一个Cars表和一个联结表,也许是“ CarsUsedByPerson”。在NoSQL系统中,您可能在“人员”文档中嵌入了“汽车”文档。
当然,如果两个人使用同一辆车,那么您在多个地方都拥有相同的数据,那么您将需要在所有这些地方进行更新,否则会不一致。
NoSQL适用于需要性能超过一致性的情况。