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的分布式我还没配成功过。