为此目的MongoDB或MySQL的优缺点

9 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来说是独立的

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

Ram*_*Vel 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
Run Code Online (Sandbox Code Playgroud)

或(对于嵌入式文档)

  Form
   - form field1
   - form field2
   - embedded fees doc
             - fees field1 
             - fees field2
   - embedded notes doc
             - notes field1 
             - notes field2
Run Code Online (Sandbox Code Playgroud)

我们的政策几乎保留所有数据,甚至删除或预编辑数据......永远.>我是否应该担心达到尺寸限制?我们可能在2013年底之前谈论100gb

您将存储与您将要执行的数据一样多的数据,已经有生产部署存储数据超过太字节.

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

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

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

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

在MySQL中,我将事情分解为不同的表.在Mongo中,将数据放在一起可以分开吗?示例:username,email,phone,license1 => [num,isValid],

与其他sql数据存储相比,mongo的主要优点是,您可以在同一文档中存储尽可能多的相关信息(在16 MB大小内).如果您不确定数据的大小或某些部分是否在增长,那么您可以将该部分拆分为另一部分.由于您不关心查询,因此会大大减少请求的数量.

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

不是绝对没有,事实上我目前正在运行mongodb和mysql(仅针对交易).但是如果你没有处理任何交易,你可以坚持使用mongodb.

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

不,我没有看到任何限制.事实上,它使用适当的索引进行快速处理查询.但是有一些事情你不能像普通连接一样使用mongo,而是可以使用map/reduce来处理报告数据.

MongoDB是否受到任何"云"提供商的支持?AWS为MySQL做了很多工作,但看起来我对Mongo来说是独立的

Mongohq,Mongolab是一些专门管理的mongo托管服务.另外redhat openshift&vmware cloundfoundry为mongo提供托管平台,你可以查看mongo托管中心了解更多信息

希望这可以帮助


Mar*_*all 5

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

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

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

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

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

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

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