在原生文档中可以进行哪些类型的操作或查询
存储,例如 MongoDB 或 CouchBase,无法在
支持任意嵌套数据的关系型数据库。
即使 BigQuery 支持任意嵌套数据,与 MongoDB 相比,BigQuery 也允许有限的嵌套。MongoDB 支持更多级别的嵌套。
在 BigQuery 中,您的架构不能包含超过 15 层的嵌套 STRUCT。 MongoDB 支持多达 100 级的 BSON 文档嵌套。
换句话说,我的假设(我希望我是错误的或被误导的)是
只要数据库支持结构,它就可以做任何事情
document-store 可以。
不完全是 - 嵌套列是列中的列。但与 Mongo 这样的 NoSQL 数据库相比,RDBMS 中的分片是一项复杂的工作。从技术上讲你可以做到,但它不是为同样的目的而设计的。就像用扳手当锤子一样——当然可以,但它的目的是不同的。您应该为正确的目的使用正确的工具。
如果不是,它在哪些地方:(1)
可以在 MongoDB(或任何其他文档存储)中完成
在 BigQuery(或任何其他支持结构的数据库)中完成?和
(2) 在 MongoDB 中可以比在
关系型数据库?
问题的关键在于,RDBMS 可能会添加一些功能以“从技术上”让您做一些可以在 NoSQL 数据库中做的事情。但这并不意味着它可能同样有效。例如,由于使 RDBMS 成为 RDBMS 的特性(ACID 合规性、事务等),与 NoSQL 数据库相比,总会有额外的性能损失。如果 RDBMS 删除了这些功能,那么它就不再是 RDBMS!
这个答案说明了 MongoDB 如何获得更好的性能,因为它不需要支持 RDBMS 功能:
https://softwareengineering.stackexchange.com/questions/54373/when-would-someone-use-mongodb-or-similar-over-a-relational-dbms
- MongoDB 每次查询的延迟更低,每次查询花费的 CPU 时间也更少,因为它做的工作少得多(例如,没有连接,
交易)。
- 因此,它可以处理更高的每秒查询负载,因此经常在您拥有大量用户的情况下使用。
- MongoDB 更容易分片(在集群中使用),因为它不必担心事务和一致性。 - MongoDB 有一个
更快的写入速度,因为它不必担心
事务或回滚(因此不必担心
锁定)。
- MongoDB 没有架构,以防您有特殊用例可以利用它。
另一个特性是分片 - 使用 mongodb 分片更容易,因为它不需要支持许多使 RDBMS 成为 RDBMS 的特性,例如符合 ACID。相比之下,RDBMS 的分片很复杂,因为 RDBMS 必须保持 ACID 兼容。
看看下面两张图片:
快艇在水中的性能是“水陆两用车”的 10/10 倍。水陆两用车在技术上可以在水中航行,但它并非设计用于,因此速度较慢且不适合其用途。
同样,看看快艇和这款可爱的汽车在空气动力学方面的差异。即使你把轮子钉在船上,它在陆地上的表现也不会像这辆车那样好。 (打个比方,你可以说 NoSQL 数据库不进行连接 - 你必须自己实现它们。 - 但是对于连接繁重的操作,它会比 RDBMS 执行得更好吗?)
我用类比的意思是,每种数据库最初都是为特定目标设计的,随着时间的推移,已经添加了一些功能来尝试解决它不是为它设计的问题(因此它没有不要像专门为此目的而设计的那样做)。
因此,在您的问题中,即使 BigQuery 或某些 RDBMS 可以做某事,这并不意味着您应该使用它们来完成这项工作。这同样适用于 NoSQL 数据库。你应该使用最好的工具来完成这项工作。