非规范化如何成为NoSQL DB的属性

时间:2015-06-06 06:49:16

标签: rdbms denormalization nosql

在讨论针对传统RDBMS的NoSQL数据库时,许多文章都说,在NoSQL-DB中,所有相关数据都保存在一起,因此可以避免连接。因此,检索数据更快。 简而言之,数据是非规范化的。非规范化也存在缺点。例如冗余,额外空间,需要在多个地方更新数据等。

但不论非正规化的利弊;它是一个DB设计属性。如何将其归因于特定的DB类型? 如果在给定的情况下,可以对数据进行非规范化,那么在RDBM中也可以实现相同的。

那么为什么将非规范化作为NoSQL db的属性进行讨论?

2 个答案:

答案 0 :(得分:6)

借调John Saunders,您也可以在RDBMS中对数据进行非规范化 - 非规范化是大多数NoSQL数据库的属性(“大多数”意味着“排除图形数据库”),因为在许多情况下,您必须进行非规范化才能获得不错的性能。

继续他的例子,假设我有一个人事记录,其中有一个外键到汽车记录(在这个例子中为了简化问题,每人一辆车),它有一个制造商记录的外键。对于一个特定的人,我想要记录那个人,他们的汽车以及他们的汽车制造商。

在RDBMS中,我可以规范化这些数据,并使用连接在一个查询中检索所有数据,或者我可以对这些数据进行非规范化 - 非规范化读取将比规范化读取便宜一点,因为连接不是免费的,但在这种情况下,读取性能的差异可能不会很大。

我的NoSQL数据库可能不支持连接,所以如果我对这些数据进行规范化,那么我将不得不对它进行三次单独的查找,例如使用键值数据库我首先检索包含Car键的Person,然后我将检索包含Manufacturer键的Car,然后我将检索制造商;如果这些数据被非规范化,那么我只需要一次查找,因此性能提升将是显着的。在NoSQL数据库确实支持连接的极少数情况下,它几乎肯定是位置无关的,因此Person,Car和Manufacturer记录可能位于不同的服务器上,甚至可能位于不同的数据中心,从而导致非常昂贵的连接。

因此,您的选项过于简单化了:

  1. 传统的RDBMS,适用于规范化数据,但难以扩展
  2. NoSQL数据库,相对容易扩展,但带有规范化数据的废话
  3. 分布式OLAP数据库(例如Aster,Greenplum),相对容易扩展,使用标准化数据但非常昂贵

答案 1 :(得分:5)

您似乎在阅读炒作,而不是数据库设计文章。您可以对任何数据库进行非规范化。是的,NoSQL适用于非规范化数据是好事的情况,例如,在存储文档时,使用子文档而不是连接到另一个表。当子文档不重复时,这最有效。当然,如果 重复,那么你就会遇到非规范化数据的常见问题。

示例:人使用汽车。在关系数据库中,您将拥有一个Persons表和一个Cars表和一个联结表,也许是“CarsUsedByPerson”。在NoSQL系统中,您可能在“人”文档中嵌入了“汽车”文档。

当然,如果两个人使用同一辆车,那么你在多个地方都有相同的数据,你需要在所有这些地方更新它,否则它会不一致。

NoSQL适用于需要性能超过一致性的情况。