2

我一直认为 NoSQL(Cassandra、CouchDB、Couchbase、MongoDB 等)是面向文档的(NO JOIN)。典型句子:“如果需要JOIN,使用SQL数据库(MySQL、PostgreSQL等)”

但是现在,Couchbase 宣布了支持 JOIN 的 N1QL(Developer Preview 4):

http://blog.couchbase.com/introducing-developer-preview-for-couchbase-server-4.0

在线尝试:

http://query.pub.couchbase.com/tutorial/#42

所以,我很困惑。Couchbase 是第一个支持 JOIN 的 NOSQL 数据库?使用它有什么缺点吗?为什么其他 NOSQL 数据库(如 mongodb、couchdb、cassandra 等)没有实现它?

4

2 回答 2

6

是的,一些 NoSQL 数据库使用 JSON 文档模型(例如 Couchbase、MongoDB)。但是,面向文档并不一定意味着“没有连接”。PostgreSQL 和 MySQL 等 RDBMS 期望您将对象分解为平面表以进行写入,并使用 JOIN 重新组合对象以进行读取。这称为阻抗失配。

JSON 文档数据库可以直接存储完整的对象,因此没有阻抗不匹配。但是,对象通常与其他对象有关系,您需要跨这些关系进行查询。例如,Movies 和 Actors 是相关的对象,如果您想列出 Movies 的详细信息以及它的 Actors 赢得了多少奖项,您将需要一个 JOIN。

总之,像 PostgreSQL 和 MySQL 这样的 RDBMS 存在阻抗不匹配,因此您必须将 JOIN 用于对象组装和关系。没有 JOIN 的 JSON 文档数据库不允许您跨关系进行查询,因此您必须在应用程序中使用多个查询来实现此逻辑。最后,一个也提供 JOIN 的 JSON 文档数据库为您提供了以下两个好处:(1) 没有阻抗不匹配和没有拆卸/组装,以及 (2) 您可以跨对象之间的关系进行查询。这就是 Couchbase 在 N1QL 中提供 JOIN 的原因。

在 Couchbase 中使用 JOIN 时没有理由不利。当出于正确的原因(关系)使用时,JOIN 非常有用,并且 Couchbase 数据模型 (JSON) 允许您避免“不良”JOIN(用于阻抗不匹配和组装/拆卸)。

于 2015-05-29T21:42:58.180 回答
0

很好地从阻抗失配的角度出发

于 2021-10-17T12:16:56.607 回答