1
est 2013-05-18 11:26:49 +08:00
求人帮忙还提要求。。。。。
|
2
acpp 2013-05-18 11:38:13 +08:00
这不是在问问题啊,这是数据库专家,在考验小白的智商。
|
3
wy315700 2013-05-18 11:48:08 +08:00 1
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的分布式我还没配成功过。 |
4
breeswish 2013-05-18 11:50:54 +08:00 via Android 1
personal ideas:
1. MongoDB比MySQL快在它有Memory-Mapping以及它不用处理事物 2. MySQL适用于传统的对关联要求高的方面,MongoDB更多用于Logging、SNS等以K-V居多的需求,但是两种数据库其实都能胜任大多数需求。 对MongoDB来说,关联一般是做成内联的,最大程度发挥其优势。而如果内联起来比较纠结或者冗余太多处理麻烦的时候当然用SQL更恰当了 3. 新项目可以考虑用MongoDB 如果经验不足而时间紧迫则可以继续用MySQL 4. 总之适当的任务用适当的工具 5. MongoDB有比较好的扩展能力,可以很容易做成分布式架构 6. 对MongoDB来说,内存越多越好 |
5
sdjl OP |
6
chemzqm 2013-05-18 12:53:29 +08:00 1
MongoDB对我来说最大的好处是面向文档带来的应用上的简洁:可以自然的映射成javascript嵌套对象。原先使用mysql不管是拼接sql自己转成对象,或者使用ORM都需要过多代码进行处理,而RoR的Active Record方式让我感觉过于魔幻了。
MongoDB管理上不如MySQL来的方便吧,要写好js有一定难度。 @breeswish 做K—V我觉得Redis更专业些,关联的问题可以借助ORM驱动的帮助来简化,例如删除post里面的某个comment,可以先取出一个post对象,然后调用post.comments.pull(id)方法,尽管两次请求性能上不划算,但是可以让应用的逻辑简单易懂。 |
7
armoni 2013-05-18 16:30:37 +08:00
跑mongodb起步内存多少,vps上的1g内存是不是想也别想
|
8
duhastmich 2013-05-19 09:23:17 +08:00
|