V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sdjl
V2EX  ›  问与答

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

  •  
  •   sdjl · 2013-05-18 11:12:39 +08:00 · 11459 次点击
    这是一个创建于 4206 天前的主题,其中的信息可能已经有所发展或是发生改变。
    回帖时注意以下几点:

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

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

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

    4 要分析,不要结论

    承诺所有分享有价值经验的同学必定感激 :)
    8 条回复    1970-01-01 08:00:00 +08:00
    est
        1
    est  
       2013-05-18 11:26:49 +08:00
    求人帮忙还提要求。。。。。
    acpp
        2
    acpp  
       2013-05-18 11:38:13 +08:00
    这不是在问问题啊,这是数据库专家,在考验小白的智商。
    wy315700
        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的分布式我还没配成功过。
    breeswish
        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来说,内存越多越好
    sdjl
        5
    sdjl  
    OP
       2013-05-18 12:08:50 +08:00
    @wy315700
    @breeswish 感谢楼上的两位

    wy315700 说到nosql不需要列类型一致, 这个让我想象到了更为灵活的运用数据库来改造程序
    chemzqm
        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)方法,尽管两次请求性能上不划算,但是可以让应用的逻辑简单易懂。
    armoni
        7
    armoni  
       2013-05-18 16:30:37 +08:00
    跑mongodb起步内存多少,vps上的1g内存是不是想也别想
    duhastmich
        8
    duhastmich  
       2013-05-19 09:23:17 +08:00
    @armoni mongodb 不是把数据全放内存的,1g完全可以用

    看看别人用过mongo的怎么说的 http://v2ex.com/t/68903
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2785 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:45 · PVG 21:45 · LAX 05:45 · JFK 08:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.