2015-04-03 76 views
1

我刚读这在在mongoid.org网站(ODM为Ruby)MongoDB不适用于关系数据吗?

如果您发现有比嵌入式那些你 应用多个关系协会,建议您不要使用 的MongoDB,并移动到一个关系数据库。

这是一个有效的陈述吗?

+0

好吧mongodb不是一个sql,它是一个数据库,它没有连接 – Abhishek 2015-04-03 09:40:05

+0

当你的数据是*什么都不是关系时,你可以看看像Neo4j这样的图形数据库,它比关系数据库更容易拥抱关系。 – Philipp 2015-04-03 09:45:23

回答

0

MongoDB是一个面向文档的数据库。交易和关系不在此解决方案中提供。尽管存在这种限制,它还是提供了更具可扩展性的环境

您应该去mongodb.org有更多的信息解决方案。

+0

是的,我知道它是什么,你可以建立收藏关系。但是如果你有很多相互引用的顶级集合,这是一个不错的选择吗? – sandelius 2015-04-03 09:42:17

+0

我认为使用Mongo,最佳实践是为您的数据设计一个新模型。对于许多集合之间的关系,您应该更喜欢关系DB – Tony 2015-04-03 09:55:24

2

这是一个有效的声明?

我不这么认为。我相信过度嵌入和避免关系是MongoDB最常见的两个初学者的错误。更重要的是,数据如何被结构化为并不重要。重要的是你需要什么查询,以及你是否提前知道。

关系数据库擅长将不同表格上的查询约束条件组合在一起:“哪些客户居住在我们经营大多数商店的城市,在阳光灿烂的日子里购买?”一个SQL数据库可以很好地回答这个问题。使用正确的索引,您可以快速完成这些查询的整个类。如果你不知道在编译时会被问到的问题,那就特别有用。

不幸的是,这是以复杂性为代价的:根据您提出的问题,结果具有不同的结构,但典型的LOB应用程序大多需要获取对象并将其存储回来。而且,创建SQL查询也不是微不足道的,因此您必须手动编写它们或使用复杂的软件(一种对象关系映射器)来创建查询,组装对象并将所有对象拼接在一起。避免这种可怕的软件和复杂性,是从我的角度使用MongoDB的关键原因。因此,对象文档映射器的想法对我来说通常听起来很诡异。

关于锁,交易,“比例”等的讨论基本上是正交的。

如果您事先知道您的查询,MongoDB可以cope with relations relatively well,您可以避免大多数事务。如果您需要商业智能查询,那么使用关系数据库可能会更好。

+1

我想强调的是,正确的建模和查询和/或聚合几乎总是可以避免交易。而且,即使那些被提及的野生查询可以使用各种技术来实现,但并不像使用SQL那么容易。但是,正如mnemosyn正确地提到的那样,除了那些边缘情况之外,其他一切都变得更加容易,在某些情况下更是如此。 – 2015-04-03 10:58:01