繁体   English   中英

MongoDB是非关系的,但是Mongo Gem是关系的

[英]MongoDB is non-relational, but Mongo Gem is relational

所以有一个简单的问题。 我想向我自己澄清一下:

根据该文档,MongoDB是一个非关系数据库。 但是mongo的gem可以使模型具有关联性。

那么问题是它允许以标准AR方法查询数据库的gem实现吗?

欢迎任何解释。

让我们明确一点。 MongoDB不会在内部进行任何形式的联接。 由于它违反了总体设计的原则,因此无法完成。 无论如何至少现在是这样。 因此,当我们谈论“关系型”数据库时,它们正在服务器上进行内部联接。

您的特定库(无论是什么)或以其他方式称为ODM(对象文档映射器)的操作是在“客户端”(您的运行代码)端模拟联接的操作,但这不是实际的联接。

因此,您可以执行以下操作:

  1. 先获取一个项目,然后获取其他集合中存在的所有相关项目。

  2. 使实际上是一个“嵌入式”文档(以MongoDB术语表示)的文件显示为与关系数据存储区一样的另一个外部关系。

因此,在1的情况下,您的客户代码中实际发生的情况是,在检索“主”文档时,将向数据库发出一个或多个附加请求,以获取相关文档。 通常,这是作为一个或其他具有相关关键信息的文档集合(所有子对象或父对象)完成的,以便可以引用结果。

然后,明显的“加入”实际上发生在客户端而不是服务器上。

这里的限制是您通常被限制为不能基于子级中的内容“过滤”父级文档结果。 这可能会因实现方式而异,但是任何存储对其所有子项的引用的父项都具有该限制,例如。

另一方面,与2的情况一样,由于文档实际上是彼此“嵌入”的,因此仅对数据库发出一个请求才能检索文档及其所有“相关”条目。 实际上,这是在适合您需要的情况下使用MongoDB进行存储的主要设计点和优势之一。

由于在这种情况下,数据已经“预连接”,因此无需执行任何“连接”,并且所有读取和写入都可以原子方式进行。


无论如何,这应该作为基本差异的入门。 解释为什么在替代关系SQL存储上存在“非关系”存储和其他NoSQL存储的各个方面,在这里要回答的话题远远不够。 网上有很多阅读资料。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM