【问题标题】:Are there any advantages to using mongodb over mysql if said mongo db were used without embedded documents?如果在没有嵌入文档的情况下使用 mongo db,那么使用 mongodb 是否有任何优势?
【发布时间】:2011-12-15 04:51:40
【问题描述】:

我正在使用带有 mongodb 适配器的 php 框架,该适配器当前不将嵌入式文档理解为模型/关联关系。在阅读了几天的 mongodb 之后,您似乎应该将嵌入式文档用于最常一起显示的对象。这对我来说很有意义。在一次 mongo 架构演讲中曾说过,许多小文档的集合可能会否定 mongo 相对于 RDBMS 的一些优势。

在搜索 stackoverflow 及其他内容时,我似乎看不出在将 mongodb 部署到使用合理规范化架构(如在传统 RDBMS 中找到)的环境中时存在哪些优势(如果有的话)。

以这种方式使用 MongoDB 是否还有优势?缩放?性能?

【问题讨论】:

    标签: mysql mongodb normalization database-schema


    【解决方案1】:

    我首先使用 MySQL 开发我的大学论文项目,然后考虑尝试使用 MongoDB 来提高性能。使用 Jongo 重写代码非常简单直接。生产真的很顺利。

    不幸的是,性能很糟糕。我对 MongoDB 查询不是特别熟练,但我相信我做了很多研究:我使用过 map reduce,我使用过聚合框架,$limit 和所有这些东西......当我在同一阶段收到消息时:“请求堆使用超过物理RAM的10%”我真的放弃并交付了MySQL版本。

    对我来说,这真的很遗憾,因为我一直在努力让它以最好的方式与 MongoDB 一起工作(因为如果你做一些不同的事情,大学项目就会脱颖而出)。不过我想我以后会继续研究 MongoDB,但目前我坚持性能(或者更好的性能)。

    我希望我的评论不会冒犯 MongoDB 粉丝,但这是我的经验。

    【讨论】:

      【解决方案2】:

      以下是 MongoDb 可能为您带来的一些优势(取决于您的用例):

      • 无架构:如果稍后修改文档结构,则更加灵活。
      • 性能:MongoDB 很好地利用了可用的 RAM,使其性能非常好
      • 轻松复制:复制很容易设置
      • 分片/集群:MongoDB 在设计时就考虑到了分片。它易于设置,不需要专家。
      • Map/Reduce:如果你碰巧需要这个,有内置支持。
      • Javascript:如果您已经了解 Javascript(现在谁不知道 :),则可以直观地使用 :)

      MongoDB 网站有一个很好的list of casestudies of production deployments

      【讨论】:

      • 您可能需要编辑您的第一个项目符号点以阅读 Schemaless,如果没有“c”,则它具有完全不同的含义。
      【解决方案3】:

      如果“合理规范化”是指您需要一个表中的信息来过滤另一个表中的信息(即连接),那么 mongo 将对您不利。在 SQL 数据库中,您可以通过单个查询轻松地从多个表中获取信息。在 mongo 中,您需要多个查询才能从多个集合中获取数据。 mongo 为您从单个集合中提取提供的任何速度优势都将很快被多次往返数据库所抵消。

      【讨论】:

      • 我目前使用的框架 CakePHP 2 似乎很少使用连接,即使是 SQL dbs。模型之间的关系是在应用程序中管理的,而不是在数据库中。我想那么问题就变成了:往返 mongo 比往返 mysql 更快(仅查询,而不是连接+查询)。
      • 在那种情况下,我不得不说你可能仍然使用 SQL 更好,但不是很多。我没有做过任何速度测试,但是人们一直在努力使 SQL DB 比 mongo 更快速和高效,而且这种情况并没有发挥 mongo 的优势,所以我的猜测是 mongo 会更慢。
      • 我收回了。这是发挥 mongo 的优势。 Mongo 处理单个集合的速度非常快,但 SQL 更适用于关系。这些关系会带来开销,即使您并没有真正使用它们,仅仅是因为这就是数据库的优化目标。
      【解决方案4】:

      MongoDB 内置了复制和分片。

      这些是可以用 MySQL 完成的。

      缺点是学习曲线和缺乏了解它的程序员。

      如果它只适合你,作为一个学习项目会很有趣。

      如果这是一个更大的项目,您需要权衡 MongoDB 程序员的缺乏和学习曲线与 MySQL 的流行度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-14
        • 1970-01-01
        • 2015-07-20
        • 1970-01-01
        • 2019-05-21
        • 2018-08-06
        • 2013-01-18
        相关资源
        最近更新 更多