V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
vicalloy
V2EX  ›  MongoDB

有谁在用 MongoDB 体验怎么样

  •  
  •   vicalloy · 2012-09-11 10:44:12 +08:00 · 12284 次点击
    这是一个创建于 4489 天前的主题,其中的信息可能已经有所发展或是发生改变。
    MongoDB已经火了有些时间了,相信已经有不少人将MongoDB用到了自己产品中。不知道大家使用MongoDB的体验怎么样。

    MongoDB 的优势应当是速度以及海量数据的支持,另外一个有点就是schemeless。

    关于schemeless
    真正需要用到schemeless的地方似乎并不是太多。目前很多 MongoDB 封装,也都增加了scheme的定义功能,这基本上等于放弃了schemeless。另外如果过度的schemeless,日子久了后可能自己都搞不清楚自己到底在数据库里放了什么东西。

    MongoDB的特性决定了某些关系数据库很容易做的操作在MongoDB中会很不容易实现(比如多表关联查询等,而且据说分页性能也不怎么样?)。为配合MongoDB,在构架设计乃至产品功能需求方面都需要做些调整。

    海量,可能大多人都不太会有机会遇到真正需要MongoDB的海量数据。

    对于大多应用场景,采用关系数据库为主,以MongoDB为辅的方式是否会更加合理?或者说MongoDB的应用场景还是比较有限的。
    35 条回复    2018-05-11 08:52:20 +08:00
    fire9
        1
    fire9  
       2012-09-11 10:58:52 +08:00
    如果你是关系型的数据,我劝你还是考虑MySQL,PostGreSQL等关系型数据库吧。MongoDB由于处理日志等简单关系的类型还是不错的。
    superisaac
        2
    superisaac  
       2012-09-11 11:18:52 +08:00
    我们在用mongodb, 自己写了个mapping. 类似django那种方法。mongodb可以代替关系数据库。schema migration也比关系数据库简单。findAndModify之类的方法很方便。
    mongodb的问题是没有事务支持,这点对于严肃应用来说比较难办。
    holystrike
        3
    holystrike  
       2012-09-11 11:26:15 +08:00
    据个人的实际使用中,schemeless确实没多大的优势体现,某些时候反而有弄巧成拙的感觉
    holystrike
        4
    holystrike  
       2012-09-11 11:27:17 +08:00
    当然了,也不排除本RDB禁锢较深,没有找到 schemeless 的最佳实践
    lqs
        5
    lqs  
       2012-09-11 12:25:49 +08:00
    schemeless适合在一个表里存储有细微差别的数据,省掉了在关系型数据库里要用多个表建立一对一关系。

    另外以前版本mongodb性能是软肋,2.2里也许有提升。
    W2EX
        6
    W2EX  
       2012-09-11 13:16:11 +08:00
    大内存机器的话性能很好,关键是要至少2台以上服务器才能用于生产环境
    avatasia
        7
    avatasia  
       2012-09-11 13:31:33 +08:00
    直接上2.2 看新版的documents.

    http://docs.mongodb.org/manual/contents/

    数据没上1亿条,还是乖乖用RDB吧。
    forest520
        8
    forest520  
       2012-09-11 13:50:53 +08:00
    mongodb不用在开发前定好schema,可以后续迭代的时候进行修改,这是它最大的优势,客观上提升了开发效率。
    如果要schema,那还用mongodb干嘛?
    ivyshark
        9
    ivyshark  
       2012-09-11 14:01:12 +08:00   ❤️ 1
    mongodb简直是一坨屎

    mongodb的写全局锁2.2才换到db级别的锁
    mongodb没有事务支持 怕丢数据的不要用
    用了mongo之后你会发现执行语句出错了是不返回错误的 当然这也是它快的原因之一
    号称支持gis 却连polygon的and或者or查询都做不了 至少到2.2都没有解决.
    group只能用mapreduce,用不上索引,大数据量group效率的还不如mysql。2.2之后倒是可以用新框架,我试了下还是很慢。
    ivyshark
        10
    ivyshark  
       2012-09-11 14:04:00 +08:00
    忘记了 mongo数据超过一定数量排序会直接出错 这个bug目前也为解决 很奇葩
    ivyshark
        11
    ivyshark  
       2012-09-11 14:06:03 +08:00
    还有用sharding做生产环境的简直是自寻死路 一旦挂掉了 就得整个停下来重新做sharding
    反正是一坨屎
    avatasia
        12
    avatasia  
       2012-09-11 14:22:27 +08:00   ❤️ 1
    @ivyshark 你是专门注册来吐糟的么?呵呵
    ivyshark
        13
    ivyshark  
       2012-09-11 14:50:06 +08:00
    @avatasia 这都被你发现了 因为我们这边美国的架构师开始强烈要求用mongo 用完自己都后悔了
    ivyshark
        14
    ivyshark  
       2012-09-11 14:53:34 +08:00
    @avatasia 吐槽归吐槽 不过有些场景用mongo还是不错的
    企业应用就不建议用了
    W2EX
        15
    W2EX  
       2012-09-11 14:59:39 +08:00
    总要看用的人怎么用,用不用得好
    ivyshark
        16
    ivyshark  
       2012-09-11 15:25:48 +08:00
    @W2EX 你可以试试
    ivyshark
        17
    ivyshark  
       2012-09-11 15:26:27 +08:00
    @W2EX 如果你遇到问题 不要查你的代码 直接查他的jira 都在里面
    avatasia
        18
    avatasia  
       2012-09-11 15:57:21 +08:00
    @ivyshark 我也是被人骗采用mongodb,SMG也在用mongodb,他们的据说用了一年多了
    ivyshark
        19
    ivyshark  
       2012-09-11 16:19:14 +08:00
    @avatasia 微博什么的对数据一致性要求不高的可以用用 数据量不大或者巨大的也可以考虑 需求太复杂的就放弃吧
    W2EX
        20
    W2EX  
       2012-09-11 21:06:44 +08:00
    @ivyshark 关于性能问题: 只要你有大内存,热数据全部放在内存里,真的可以很快,数据多了可以分片... 扩展方向是 先纵向 再横向
    关于可靠性: 只能说mongo是给有钱人用的,要没几台大内存机器组replica set 没有快照备份机制式 是不能用于生产环境 另外空间占用大也是真的...
    但是咱不能就说它性能不好、不可靠啊,出得起钱性能就好就可靠了
    ipconfiger
        21
    ipconfiger  
       2012-09-11 22:42:58 +08:00
    用在生产系统中实际运维的时候你会很想屎的......
    ivyshark
        22
    ivyshark  
       2012-09-12 10:20:54 +08:00
    @W2EX 你分片的时候出过问题么? 是停机解决的么? 我感觉mongo的分片不是一般的垃圾
    avatasia
        24
    avatasia  
       2012-09-12 10:51:57 +08:00
    今天在重整数据,从oracle到mongodb,一晚上18w条,崩溃。正式环境有2000w条左右。
    ivyshark
        25
    ivyshark  
       2012-09-12 11:19:27 +08:00
    @avatasia 看来你们数据量不是很大 我们一次上传都有10w+的数据
    avatasia
        26
    avatasia  
       2012-09-12 13:02:32 +08:00
    @ivyshark 用了多长时间?
    ivyshark
        27
    ivyshark  
       2012-09-12 13:05:07 +08:00
    @avatasia 我们逻辑比较复杂 还没有在服务器上调 我笔记本上随便测试了下 10W条6分钟不到 我觉得还行 因为我们每条记录都做了很多验证
    ivyshark
        28
    ivyshark  
       2012-09-12 13:06:07 +08:00
    @avatasia 这中间包括一些查询别的表再做验证的时间
    avatasia
        29
    avatasia  
       2012-09-12 13:30:40 +08:00
    @ivyshark 我也做了验证,但是为毛,1个小时就1w条左右,太操蛋了。一条要100ms,也有可能0。
    本地局域网两台机器,一开始以为是mongodb开了journal影响速度,已经关了,但还是慢。我循环里又没sleep,真要命啊。
    avatasia
        30
    avatasia  
       2012-09-12 15:23:51 +08:00
    @ivyshark 分析了下,有两个原因:
    1. 在插入数据的时候,每次要做删除处理
    2. 删除的query 没有做索引
    superisaac
        31
    superisaac  
       2012-09-12 16:40:13 +08:00
    @avatasia 为什么我上次导入13万条记录到mongodb,也就十几秒时间?秒杀postgresql
    avatasia
        32
    avatasia  
       2012-09-12 16:58:40 +08:00
    @superisaac 13w条,光载入内存也得要这么久吧。
    superisaac
        33
    superisaac  
       2012-09-12 20:20:50 +08:00
    @avatasia 几十M而已。
    dcoder
        34
    dcoder  
       2018-05-11 08:51:51 +08:00
    MongoDB, PostgreSQL, MySQL 都用过, 我觉得下面这篇说得不错, 以前没读到过.
    http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/
    dcoder
        35
    dcoder  
       2018-05-11 08:52:20 +08:00
    发完后,发现这个帖子好老...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1212 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:15 · PVG 02:15 · LAX 10:15 · JFK 13:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.