使用过MySQL和MongoDB的同学,来说一下它们的区别?

2013-05-18 11:12:39 +08:00
 sdjl
回帖时注意以下几点:

1 不要只是简单的说某某数据库比某某快多少,要说明为什么快,在什么情况下快

2 不要只是用某几个简单的点就说某个比另一个好,要说明它们在各自适用的情况

3 不要只是突出性能问题,因为不同的人对性能有不同的理解和需求。 请更多的讨论不同数据库对人的思维、工作方式、习惯养成、看待问题的方法等这些方面的影响

4 要分析,不要结论

承诺所有分享有价值经验的同学必定感激 :)
11459 次点击
所在节点    问与答
8 条回复
est
2013-05-18 11:26:49 +08:00
求人帮忙还提要求。。。。。
acpp
2013-05-18 11:38:13 +08:00
这不是在问问题啊,这是数据库专家,在考验小白的智商。
wy315700
2013-05-18 11:48:08 +08:00
MySQL是关系型数据库,使用简单,方便,有统一的SQL语句,支持事务一致性。
MongoDB是文档式数据库,必须使用专用的API进行操作,不过大部分操作都绕不过增删改查,学习起来也方便,不支持事务一致性。

MySQL里数据模型是二维线性表,里面每一个元素都是不可再分的原子,而且同一列的数据类型是相同的。
MongoDB数据模型就比较灵活,一张表就是一个document,里面的每一个数据都是一个collection,如果将一个document当作二维表看,里面的每一个元素都是可以是一个原子数据或者是一个collection,而且同一列的数据类型可以不一致,所以一般MongoDB的管理软件都把一个数据用json格式来显示。比如说这样的
array (
'_id' => 'EP_6e632c60-3dab-4866-9c41-f609fb1c38f0',
'_class' => 'net.ucmp.cmsdk.ehf.ExtraData',
'values' =>
array (
'UCMP_ID' => 'CH_caabf0dc-fa06-4dd6-ba55-14ffb6caec29',
'UCMP_HOME_TP' => '',
'UCMP_CONT_TP' => '',
'UCMP_WAPHOME_TP' => '',
'UCMP_WAPCONT_TP' => '',
'UCMP_HOME_HTML' => '',
'UCMP_CONT_HTML' => '',
'UCMP_SND_DOMAIN' => '',
'UCMP_IMG_LOC' => '',
'UCMP_INTRO' => '',
'UCMP_META_KEYS' => '',
'UCMP_META_DESCR' => '',
'UCMP_CUSTOMIZE1' => '',
'UCMP_CUSTOMIZE2' => '',
'UCMP_CUSTOMIZE3' => '',
'UCMP_CUSTOMIZE4' => '',
'UCMP_CUSTOMIZE5' => '',
),
)

在存储比较复杂的数据类型的时候,MongoDB比MySQL方便的多了。比如说存储用户和群组关系的时候,MySQL一般是用一张单独的表存储两者的联系,MongoDB就可以直接把用户ID当作群组的一个子元素存储,更加直观。

MongoDB还提供gridfs文件系统,可以存入一个很大的文件。这是MongoDB一个很大的优点,比如说可以直接把视频图片什么的存到数据库里统一管理,而不需要放到单独的文件里了,而且还能做成分布式的。

性能方面,NOSQL比SQL快是正常的。不过要注意一点,不要在Windows上跑MongoDB,影响性能,虽然不知道原因,我们当初测试的结果是Linux上比Windows下快了将近5倍,而且影响性能的是CPU。

然后是分布式支持,MongoDB配分布式是很方便的,不过有一点很郁闷,config server必须是1个或者3个。MySQL的分布式我还没配成功过。
breeswish
2013-05-18 11:50:54 +08:00
personal ideas:

1. MongoDB比MySQL快在它有Memory-Mapping以及它不用处理事物

2. MySQL适用于传统的对关联要求高的方面,MongoDB更多用于Logging、SNS等以K-V居多的需求,但是两种数据库其实都能胜任大多数需求。

对MongoDB来说,关联一般是做成内联的,最大程度发挥其优势。而如果内联起来比较纠结或者冗余太多处理麻烦的时候当然用SQL更恰当了

3. 新项目可以考虑用MongoDB 如果经验不足而时间紧迫则可以继续用MySQL

4. 总之适当的任务用适当的工具

5. MongoDB有比较好的扩展能力,可以很容易做成分布式架构

6. 对MongoDB来说,内存越多越好
sdjl
2013-05-18 12:08:50 +08:00
@wy315700
@breeswish 感谢楼上的两位

wy315700 说到nosql不需要列类型一致, 这个让我想象到了更为灵活的运用数据库来改造程序
chemzqm
2013-05-18 12:53:29 +08:00
MongoDB对我来说最大的好处是面向文档带来的应用上的简洁:可以自然的映射成javascript嵌套对象。原先使用mysql不管是拼接sql自己转成对象,或者使用ORM都需要过多代码进行处理,而RoR的Active Record方式让我感觉过于魔幻了。

MongoDB管理上不如MySQL来的方便吧,要写好js有一定难度。


@breeswish 做K—V我觉得Redis更专业些,关联的问题可以借助ORM驱动的帮助来简化,例如删除post里面的某个comment,可以先取出一个post对象,然后调用post.comments.pull(id)方法,尽管两次请求性能上不划算,但是可以让应用的逻辑简单易懂。
armoni
2013-05-18 16:30:37 +08:00
跑mongodb起步内存多少,vps上的1g内存是不是想也别想
duhastmich
2013-05-19 09:23:17 +08:00
@armoni mongodb 不是把数据全放内存的,1g完全可以用

看看别人用过mongo的怎么说的 http://v2ex.com/t/68903

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/69288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX