CouchBase NOSQL 宣布支持 JOIN。使用它们有什么缺点?

Raf*_*ski 2 join mongodb nosql couchbase sql++

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

但现在,Couchbase 宣布了支持 JOIN 的 N1QL(开发者预览版 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等)没有实现它?

ger*_*dss 6

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

JSON文档数据库可以直接存储完整对象,因此不存在阻抗不匹配。但是,对象通常与其他对象存在关系,您需要跨这些关系进行查询。例如,电影和演员是相关对象,如果您想列出电影详细信息以及演员获得的奖项数量,则需要 JOIN。

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

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