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

时间:2014-05-02 05:48:02

标签: ruby-on-rails ruby mongodb

所以请快速提问。我想向自己澄清一下:

MongoDB根据文档是一个非关系型数据库。然而,mongo的gem可以使模型成为关系型。

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

欢迎任何解释。

1 个答案:

答案 0 :(得分:0)

让我们说清楚一点。 MongoDB不以任何方式在内部进行连接。它不能完成,因为它违反了一般设计的原则。至少现在无论如何。所以,当我们谈论"关系"数据库,那些正在服务器上进行内部连接。

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

所以这允许你做以下事情:

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

  2. 制作实际上是"嵌入式"文档(在MongoDB术语中)与关系数据存储区一样,显示为另一个外部关系。

  3. 因此,在 1 的情况下,您的客户端代码中实际发生的是" master"如果文档被重新检索,则会对数据库进行额外的请求(或请求)以获取相关文档。这通常作为一个或多个具有相关密钥信息(所有子项或父项)的文档集合来完成,以便可以引用结果。

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

    此处的限制是您通常被限制为无法过滤"父文档结果基于子项内容。这可能会因实现而异,但任何存储对所有孩子的引用的父母都有这种限制,例如。

    另一方面,与 2 的情况一样,因为文件实际上是"嵌入"在彼此之内,只有一个请求才能检索文档及其所有相关的文档。条目。这实际上是使用MongoDB存储的主要设计点和优势之一,这种情况适合您的需求。

    在这种情况下,数据已经预先加入"没有必要执行任何"加入"因此,所有读写都可以以原子方式完成。


    无论如何,这应该作为基本差异的入门。解释为什么"非关系"备用关系SQL商店中存在的其他NoSQL商店远不是这里要回答的主题。网上有很多阅读材料。