1

我最近被介绍给 MongoDB,我非常喜欢(与我用于所有项目的 MySQL 相比)。

然而,在某些特定情况下,将我的数据与使用简单 ID 相互“链接”的文档一起存储更有意义(以减少重复数据)。

例如,我可能有CountryUser文档,其中用户的位置实际上是 a 的 ID Country(因为Country文档包含更多数据,因此在每个用户中复制Country数据没有意义)。

我很好奇的是..与使用适当的关系数据库相比,为什么 MongoDB 会逊色?

是不是因为我可以通过连接来保存事务(而不是用 MongoDB 做两个事务)?

4

3 回答 3

1

这是个好问题..!!

我会说对于您描述的数据类型使用 nosql db 绝对没有错。对于简单的用例,它会很好地工作。

唯一的一点是,关系数据库的设计很久以前就用于存储和查询结构良好的数据......并定义了适当的关系。因此,对于大量结构良好的数据,所提供的性能和功能将远远超过 nosql 数据库提供的性能和功能。因为他们更成熟了..这是他们的球赛..!!

另一方面,nosql 数据库设计用于处理大量非结构化数据,并且对分布式环境扩展具有开箱即用的支持。所以它现在是一个完全不同的球类游戏..

他们基本上以不同的方式处理数据,因此有不同的策略/执行计划来获取给定的数据。

于 2013-10-05T17:08:39.140 回答
0

MongoDB 从一开始就被设计为可在多个服务器上进行扩展。当 MongoDB 数据库对于单个服务器来说太慢或太大时,您可以通过将更大的集合“分片”来添加额外的服务器。这意味着集合在不同的服务器之间划分,每个服务器负责管理集合的不同部分。

MongoDB 不做 JOIN 的原因是,当一个或两个集合分片到多个节点上时,不可能让 JOIN 表现良好。JOIN 需要将表/集合 A 的每个条目与表/集合 B 的每个条目进行比较。当所有数据都在一个服务器上时,有一些快捷方式。但是当数据分布在多个服务器上时,需要在它们之间比较和同步大量数据。这将需要大量的网络流量,并使操作非常缓慢和昂贵。

于 2013-10-05T18:03:41.370 回答
0

您只有两个表,国家和用户是否正确。如果是这样,在我看来,唯一重复的数据是外键,这没什么大不了的。如果有更多重复,那么我质疑数据库设计本身。

从概念上讲,你可以在 NOSQL 中做到这一点,但为什么呢?仅仅因为 NOSQL 是新的?好的,那就去学习吧,但要记住,“如果它没有坏,就不要修理它。” 显然应用程序已经在关系上运行。如果数据存储在 MongoDB 中的单独文档中并且您希望将它们相互关联,则需要使用链接,这将比连接更多工作并且速度更慢。您将不得不存储一个链接,这并不比存储外键好。或者,您可以在 MongoDB 中将一个文档嵌入到另一个文档中,这甚至可能会增加重复。

如果它当前在 MySQL 上运行,那么它就没有在分布式服务器上运行,因此 Mongo 对分布式服务器的使用是无关紧要的。您必须添加服务器才能利用这一点。如果表在关系中正确索引,则不必搜索大量数据。

但是,这不是一个复杂的应用程序,您可以使用其中任何一个。如果数据存储在具有关系的 MPP 环境中,它将运行得非常好,根本不需要搜索大量数据。但是,在 MPP 中选择分区键有两个要求: 1. 选择一个能够实现数据均匀分布的分区键;和 2. 选择一个可以允许配置数据的键。我建议您在两个文件中使用与分区键(分片键)相同的键。

尽管我很喜欢 MongoDB,但我看不到移动应用程序的价值。

于 2014-01-15T01:12:07.043 回答