[英]MongoDB is non-relational, but Mongo Gem is relational
所以有一个简单的问题。 我想向我自己澄清一下:
根据该文档,MongoDB是一个非关系数据库。 但是mongo的gem可以使模型具有关联性。
那么问题是它允许以标准AR方法查询数据库的gem实现吗?
欢迎任何解释。
让我们明确一点。 MongoDB不会在内部进行任何形式的联接。 由于它违反了总体设计的原则,因此无法完成。 无论如何至少现在是这样。 因此,当我们谈论“关系型”数据库时,它们正在服务器上进行内部联接。
您的特定库(无论是什么)或以其他方式称为ODM(对象文档映射器)的操作是在“客户端”(您的运行代码)端模拟联接的操作,但这不是实际的联接。
因此,您可以执行以下操作:
先获取一个项目,然后获取其他集合中存在的所有相关项目。
使实际上是一个“嵌入式”文档(以MongoDB术语表示)的文件显示为与关系数据存储区一样的另一个外部关系。
因此,在1的情况下,您的客户代码中实际发生的情况是,在检索“主”文档时,将向数据库发出一个或多个附加请求,以获取相关文档。 通常,这是作为一个或其他具有相关关键信息的文档集合(所有子对象或父对象)完成的,以便可以引用结果。
然后,明显的“加入”实际上发生在客户端而不是服务器上。
这里的限制是您通常被限制为不能基于子级中的内容“过滤”父级文档结果。 这可能会因实现方式而异,但是任何存储对其所有子项的引用的父项都具有该限制,例如。
另一方面,与2的情况一样,由于文档实际上是彼此“嵌入”的,因此仅对数据库发出一个请求才能检索文档及其所有“相关”条目。 实际上,这是在适合您需要的情况下使用MongoDB进行存储的主要设计点和优势之一。
由于在这种情况下,数据已经“预连接”,因此无需执行任何“连接”,并且所有读取和写入都可以原子方式进行。
无论如何,这应该作为基本差异的入门。 解释为什么在替代关系SQL存储上存在“非关系”存储和其他NoSQL存储的各个方面,在这里要回答的话题远远不够。 网上有很多阅读资料。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.