【问题标题】:Pros/cons of MongoDB or MySQL for this purpose [closed]MongoDB或MySQL为此目的的优点/缺点[关闭]
【发布时间】:2011-11-24 00:46:10
【问题描述】:

我正在寻找有关将哪个数据库用于项目的帮助或指导。如果您能提出任何观点,或指出缺陷,回答任何问题或推广任何一种数据库类型,我将不胜感激。

无论如何:

  • 我们有一些跟踪表格的软件。

  • 我们的用户可以拥有许多不同的属性,从字面上看 数百个设置,我不喜欢 MySQL 表那么宽。一世 真的很喜欢Mongo。

  • 我们有不同类型的表格,每一种都可以有完全不同的 字段。现在,我们有一个包含通用数据的表单列表,然后 加入相关表以获取更多数据。我会拥有所有 使用 Mongo 将这些字段放在一个不同的文档中,我可以轻松地 无需担心添加字段。

  • 我们在每个表格上都有费用、备注和历史记录。我喜欢他们在 MySQL 中的表现 在不同的表中,我可以按表单或用户获取历史记录- 和笔记一样。

  • 我们的政策几乎是保留所有数据,甚至删除或预先编辑 数据……永远。我可以做 担心达到尺寸限制?到 2013 年底,我们可能会说 100GB

  • 每页有多少 Mongo 查询会使事情陷入困境? 20? 100?将 如果我在服务器中有 SSD,会发生什么变化? (现在,我们有大约 60 MySQL 查询一个页面。这可以改进。)

  • 让我的第一个 Mongo 项目成为一个有点大的项目是不是一个坏主意 一点软件?这是我可以边走边学的东西吗?

  • 我喜欢 MySQL 列名不区分大小写 脏东西。

  • 在 MySQL 中,我将事情分解到不同的表中。在 Mongo 中,将可以分离的数据放在一起可以吗?示例:username, email, phone, license1 => [num,isValid], license2 => [num, isValid], notifications => [notification1...notification50000], password hash, salt, setting1, setting2...setting1000, permission1, permission2...permission1000 当然,我会使用嵌套样式来组织,但是最好将所有这些存储在“用户”下还是将其分解为设置、许可证、权限?第二个例子:formName, address, notes => [note1 => [user,note,date], note2 => [user,note,date]]

  • 进行 HYBRID 设置是否有任何问题,其中用户数据是 Mongo,表单数据是 MySQL?

  • 我们必须运行大量报告,Mongo 对此有限制吗?例如,我是否会在查找过去 40 天内每张费用超过 10 美元的表格时遇到问题,每行的费用总计,按填写表格的用户年龄排序?

  • 数据冗余 - 在 Amazon 云上,MySQL 具有大量冗余。是否有任何服务可以与 Mongo 相匹配?自己进行设置是否复杂?

  • 任何“云”提供商都支持 MongoDB 吗? AWS 为 MySQL 做了很多工作,但对于 Mongo 来说,我似乎只能靠自己了

我脑子里只有几件事 - 我真的很感激任何人要说的任何话。

【问题讨论】:

    标签: php mysql database-design mongodb amazon-web-services


    【解决方案1】:

    这里有一些关于云中 MongoDB 的信息:http://www.mongodb.org/display/DOCS/Hosting+Center

    【讨论】:

      【解决方案2】:

      您可以根据需要使用 MongoDB 或 MySQL。要注意的主要事情是缩放。在 MySQL 中,您可以垂直扩展。你得到一台更大的机器,更好的机器。并希望它有所作为。在 MongoDB 中,您可以水平扩展。您有多台机器和shard。垂直缩放是有限制的。但水平缩放不会。在垂直成本扩展方面很容易理解。水平扩展通常会导致购买一组机器,然后当您想要进一步扩展时,它会变成指数级。所以这是你必须考虑的事情。

      执行统计查询是 MongoDB 的一个缺点。出于几个原因。首先,会有一些 MySQL 的特性,你在 MongoDB 中是没有的。其次,对于更多是 DB 人员并且非常熟悉 SQL 语句的人来说,他们可能很难适应 MongoDB 的语法。这是要学习的新东西。人们通常喜欢(并且很好地使用)他们所知道的。

      与大多数其他“NoSQL”平台一样,MongoDB 不使用ACID,这使其性能有所提升。但这确实意味着它可能更具风险。

      有一些基于云的解决方案。看看MongoHQMongoLab。我可能错了,但我不相信他们有 SSD。都是纺锤。不过ping自己的支持。他们通常回复很快。

      根据我的经验,MongoDB 确实运行得很快。非常快。当你有大表、连接等时,MySQL 很慢。而且你可以在 MongoDB 中建立索引,正如你所期望的那样。我已经看到,如果你索引太多的东西,或者像数组这样的东西,它必须索引每个元素,那么每笔交易可能会更加繁重。

      我不会把你推向任何一个方向。这需要一些研究。对于这样一个大型项目,我不会说使用 MongoDB 是一个坏主意,但是要弄清楚它是否适合您的情况需要时间。与所有事物一样。

      有一些替代方案,特别是 MySQL 的专有扩展,可以大大提升性能(取决于您的设置、平均事务类型等)。想到的一个是InfoBright,但这些通常很昂贵。

      【讨论】:

        【解决方案3】:

        我们的用户可以拥有许多不同的属性,从字面上看 数百个设置,我不喜欢 MySQL 表那么宽。一世 真的很喜欢 Mongo。

        我们有不同类型的表格,每一种都可以完全拥有 不同的领域。现在,我们有一个带有泛型的表单列表 数据,然后加入相关表以获取其他数据。我会 使用 Mongo 将所有这些字段放在一个不同的文档中,我可以轻松添加字段而无需担心。

        从您的帖子中,我了解到您的最终目标是处理包含不同架构(又名无架构)的用户和表单。我相信 mongodb 是实现此目的的正确选择。

        我们在每张表格上都有费用、备注和历史记录。我喜欢他们在 MySQL 中的表现 在不同的表中,我可以按表单或用户获取历史记录- 和注释一样。

        没问题,您可以使用不同的文档(或基于其大小的嵌入文档 - 16 mb 是文档的最大大小)来处理此问题而不会出现任何问题。所以你可以有这样的架构

          Form
           - form field1
           - form field1
           - id of the fees doc
           - id of the notes doc
           - id of the history doc
        

        或(对于嵌入式文档)

          Form
           - form field1
           - form field2
           - embedded fees doc
                     - fees field1 
                     - fees field2
           - embedded notes doc
                     - notes field1 
                     - notes field2
        

        我们的政策几乎是保留所有数据,甚至是删除或预先编辑的数据……永远。 >我应该担心达到尺寸限制吗?到 >2013 年底,我们可能会说 100GB

        您将存储尽可能多的数据,已经有production deployments 存储超过 TB 的数据。

        我的第一个 Mongo 项目有点重要是不是一个坏主意 的软件?这是我可以边走边学的东西吗?

        是的,如果您打算使用 mongodb 而不对应用程序模型进行原型设计。我建议实现(原型)你的应用程序的最小集合(比如 mysql 中的功能)并学习基础知识,看看你有多舒服。

        我喜欢 MySQL 列名不区分大小写,以便快速和肮脏的事情。

        Mongo 强制区分大小写,因为这是 BSON(以及 JSON)键值对的特性。

        在 MySQL 中,我将事物分解为不同的表。好吗,在 Mongo,将可以分离的数据放在一起?示例:用户名, 电子邮件、电话、license1 => [num,isValid],

        mongo 相对于其他 sql 数据存储的主要优势是,您可以在同一文档中存储尽可能多的相关信息(在 16 mb 大小内)。如果您不确定数据的大小或某些部分正在增长,则可以将部分拆分为另一个部分。由于您担心查询的数量,这将大大减少请求的数量。

        进行 HYBRID 设置是否有任何问题,其中用户数据是 Mongo,表单数据在 MySQL 中?

        绝对不是,事实上我目前正在运行 mongodb 和 mysql(仅用于事务)。但是如果你不处理任何事务,你可以坚持使用 mongodb。

        我们必须生成大量报告,在这方面有限制吗? 蒙哥?例如,我是否会在查找每种表格时遇到问题 从过去 40 天开始,费用超过 10 美元,每行费用 总计,按填写用户的年龄排序?

        不,我认为这没有任何限制。事实上,它非常快速地处理具有适当索引的查询。但是有些事情你不能用 mongo 做,比如普通的连接,相反你可以使用 map/reduce 来处理报告的数据。

        任何“云”提供商都支持 MongoDB 吗? AWS 为 MySQL,但看起来我会为 Mongo 独自一人

        Mongohq,Mongolab 是一些可用的专用托管 mongo 托管服务。此外,redhat openshift 和 vmware cloundfoundry 提供了 mongo 的托管平台,您可以查看mongo hosting center 了解更多信息

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 2011-01-03
          • 1970-01-01
          • 2010-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-05
          • 2010-09-06
          相关资源
          最近更新 更多