为此目的MongoDB或MySQL的优缺点

时间:2011-09-23 22:38:06

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

我正在寻找关于哪个数据库用于项目的一些帮助或指导。如果您可以提出任何要点或注意缺陷,回答任何问题或推广任何数据库类型以达到我即将阐明的目的,我将非常感激。

反正:

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

  • 我们的用户可以拥有许多不同的属性 数以百计的设置,我不是那种广泛的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当然,我会使用嵌套样式进行整理,但是最好将所有这些存储在“user”下,还是将其分解为设置,许可,权限?第二个例子:formName, address, notes => [note1 => [user,note,date], note2 => [user,note,date]]

  • 进行HYBRID设置有什么问题,其中用户数据是Mongo,表单数据是MySQL吗?

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

  • 数据冗余 - 在Amazon云上,MySQL拥有大量冗余。有没有与Mongo相匹配的服务?进入我自己的设置是否很复杂?

  • MongoDB是否受到任何“云”提供商的支持? AWS为MySQL做了很多工作,但看起来我自己就是Mongo

只是我头脑中的一些事情 - 我真的很感激任何人都要说的。

3 个答案:

答案 0 :(得分:7)

  

我们的用户可以拥有许多不同的属性   数以百计的设置,我不是那种广泛的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存储数据超过太字节。

  

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

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

  

我喜欢MySQL列名称不区分大小写的快速和脏东西。

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

  

在MySQL中,我将事情分解为不同的表格。好吗,在   Mongo,把数据放在一起可以分开吗?示例:username,   电子邮件,电话,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了解更多信息

希望这有帮助

答案 1 :(得分:5)

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

进行统计查询是MongoDB的缺点。原因有几个。首先,将有MongoDB中没有的MySQL功能。其次,对于那些更像数据库人并且对SQL语句非常熟悉的人来说,他们可能很难适应MongoDB的语法。这是一个值得学习的新东西。人们常常喜欢(并且与之合作)他们所知道的东西。

与大多数其他'NoSQL'平台一样,MongoDB不使用ACID,这给它带来了一点性能提升。但这确实意味着风险更大。

有一些基于云的解决方案。请查看MongoHQMongoLab。我可能错了,但我不相信他们有SSD。这都是锭子。但ping他们的支持。他们通常会快速回复。

根据我的经验,MongoDB确实很快。非常快。当你有大型表,联接等时,MySQL很慢。你可以像预期的那样在MongoDB中编制索引。我已经看到,如果你索引太多的东西,或者像必须索引每个元素的数组之类的东西,那么每次事务可能会更加沉重。

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

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

答案 2 :(得分:0)

以下是有关云中MongoDB的一些信息:http://www.mongodb.org/display/DOCS/Hosting+Center