V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ericgui
V2EX  ›  程序员

MongoDB 到底靠谱不靠谱?

  •  
  •   ericgui · 2017-07-20 19:08:33 +08:00 · 19329 次点击
    这是一个创建于 2715 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这篇湾区日报选的文章,似乎意思是 MongoDB 是大家曾经的选择,曾经火过一阵子,现在不行了,现在都不用了。
    兄弟们谈谈吧。

    https://wanqu.co/a/5340/2017-07-10-why-did-so-many-startup-choose-mongodb.html?s=/issues

    为何曾经有那么多的创业公司使用 MongoDB

    骇人听闻的故事:一家著名独角兽公司在迁移到 MongoDB 时发生巨大灾难,发誓从此只用无聊不酷的技术;某著名风投说要聘专业团队帮他投资的那些创业公司们统统迁移出麻烦不断的 MongoDB。

    有个问题:刚入职场的年轻工程师如何判断他 /她所要投资的技术是像 2006 年左右的 Rails、2007 年左右的 Hadoop、还是更像 2010 年前后的 MongoDB ?有点像投资创业公司,如何押对宝?还是尽量选择无聊的成熟的老技术、专注于解决实际问题、白猫黑猫抓到老鼠就是好猫?
    76 条回复    2017-07-23 12:36:52 +08:00
    iShawnWang
        1
    iShawnWang  
       2017-07-20 19:22:40 +08:00 via iPhone
    围观下... 最近在学 Mongodb... 还没完全适应它的用法...
    akrf
        2
    akrf  
       2017-07-20 19:27:15 +08:00 via Android
    不靠谱
    scriptB0y
        3
    scriptB0y  
       2017-07-20 19:30:58 +08:00
    最大的不方便是事物,其他还没发现什么
    cxbig
        4
    cxbig  
       2017-07-20 19:32:11 +08:00 via iPhone
    问题还是在人,不在工具。
    ericls
        5
    ericls  
       2017-07-20 19:54:00 +08:00 via iPhone
    不靠谱
    privil
        6
    privil  
       2017-07-20 19:56:51 +08:00   ❤️ 2
    和朋友聊,都觉得押宝 postgreSQL 好些
    jhaohai
        7
    jhaohai  
       2017-07-20 19:58:44 +08:00 via iPhone
    感觉 mongodb 快挂了吧,从来没觉得它的优点在哪儿
    popbones
        8
    popbones  
       2017-07-20 19:59:06 +08:00
    不靠谱

    小规模用用还行,初期挺方便的,数据量上来,业务逻辑复杂起来就很尴尬。

    做应用数据库还行,平台数据库就算了
    ETiV
        9
    ETiV  
       2017-07-20 19:59:25 +08:00
    技术无罪
    靠谱不靠谱,要看用的人
    janxin
        10
    janxin  
       2017-07-20 20:13:49 +08:00   ❤️ 3
    文章说的没啥大问题,没搞清楚 NoSQL 什么可以什么不可以盲目上了,发现有问题就喊着人家坑,难道不是你最开始选型眼瞎?

    MongoDB 也不是全没问题,我们使用下来也发现有些点要注意,比如高读写下性能优化,索引建立,集群同步延迟等等,不过整体还好,至少建议你上个 SSD :)

    不要截取一段文字就要搞个大新闻,作者也说的很清楚:

    Critiques about widely used products like MongoDB can be fraught. My point is not that MongoDB is a poor choice today — in fact, I believe the opposite for the right use cases.
    liprais
        11
    liprais  
       2017-07-20 20:15:18 +08:00 via iPhone
    没有事务,数据不重要的就用呗
    yghack
        12
    yghack  
       2017-07-20 20:17:54 +08:00
    还是要根据业务场景去用
    markocen
        13
    markocen  
       2017-07-20 20:18:14 +08:00 via Android   ❤️ 2
    很多人把 Mongodb 当做 SQL 数据库用,然后出来抱怨性能差,我只想说没有错的工具,只有错的人
    ChefIsAwesome
        14
    ChefIsAwesome  
       2017-07-20 20:20:59 +08:00
    1.按需求选技术。没有调查研究,有吃透技术的把握就盲目跟风选最新的,那是炫技,是对产品的不负责任。
    2.曾经风光,说明他在当时确实有值得称赞的地方。新的技术出现,取长补短,这不就是各行各业发展的正常过程。没必要出来新的就鄙视旧的。
    t6attack
        15
    t6attack  
       2017-07-20 20:25:02 +08:00
    跟随着 nosql 的潮流而火的。
    akrf
        16
    akrf  
       2017-07-20 20:33:03 +08:00
    当然有错的工具啦,MongoDB 就像一个伪娘,中看不中用,当然费一番功夫也能用,只是自己会比较痛苦。当然,这也不一定是痛苦,如果遇到好这一口的人,也会很开心。
    zbinlin
        17
    zbinlin  
       2017-07-20 20:37:45 +08:00
    该用 SQL 的场景还是要用的,PostgreSQL 比它靠谱多了
    tinybaby365
        18
    tinybaby365  
       2017-07-20 20:48:57 +08:00
    能用 MySQL5.7 或者 Postgresql 的,就不用 MongoDB。你不了解的情况下,出了问题只能怪 DB。
    ericgui
        19
    ericgui  
    OP
       2017-07-20 20:55:44 +08:00
    @liprais 互联网业务很多的数据 都没有 transaction,也不重要:)
    TangMonk
        20
    TangMonk  
       2017-07-20 21:12:20 +08:00 via Android
    被 mongodb 坑过,不靠谱
    df4VW
        21
    df4VW  
       2017-07-20 21:14:47 +08:00
    mongodb 本身不靠谱能活那么多年么

    不会用的一个个在那说不靠谱
    7654
        22
    7654  
       2017-07-20 21:17:02 +08:00
    分场景应用不同的数据库,用错地方才头疼
    ericgui
        23
    ericgui  
    OP
       2017-07-20 21:26:24 +08:00
    @7654 那么 MongoDB 适合哪些场景,不适合哪些呢?
    @zbinlin
    @ChefIsAwesome
    qq12345454
        24
    qq12345454  
       2017-07-20 22:30:56 +08:00
    https://www.v2ex.com/t/376217 看我发的帖子, 都唱衰 mongo
    enlau0912
        25
    enlau0912  
       2017-07-20 22:37:56 +08:00
    自己玩玩還行,做產品還是用 mysql 吧,這麼多年一堆公司持續在使用,總不會就你聰明、你創新,人家都傻子。
    otakustay
        26
    otakustay  
       2017-07-20 22:39:23 +08:00
    最大的不方便的 lisence ……
    mingyun
        27
    mingyun  
       2017-07-20 23:57:42 +08:00
    工作过的公司没用过
    WhoMercy
        28
    WhoMercy  
       2017-07-21 00:07:37 +08:00 via Android
    被公司一个不懂 MongoDB 架构、使用思想的同事坑过,胡乱上了分片功能。
    功能是实现了,但性能非常差。
    查 100M 条~200M 条中的一条数据经常超时,切片库还会时不时因为心跳超时等原因重启…
    所以 MongoDB 给我的感觉有点类似于 Java 中 Hibernate 框架—— Heavy 且好用,但需要有非常熟悉的人才能用的好,建议慎用。
    yidinghe
        29
    yidinghe  
       2017-07-21 00:12:29 +08:00 via Android
    非关系数据库这样的坑一定会要踩,对一般人来说,没踩过这个坑就成熟不起来。
    Miy4mori
        30
    Miy4mori  
       2017-07-21 00:27:11 +08:00 via iPhone
    @WhoMercy 你这个比喻也是清奇
    Tunar
        31
    Tunar  
       2017-07-21 00:34:09 +08:00 via Android
    只能做小玩意儿,,
    mathgl
        32
    mathgl  
       2017-07-21 01:09:14 +08:00
    你找出 100 个 mongodb 不靠谱的案例,同样也可以找出另外 100 个靠谱的案例。

    几乎对任何一种技术都适用。
    Immortal
        33
    Immortal  
       2017-07-21 02:26:57 +08:00
    现在手头项目 mongo 是用来做数据归档 和 储存一些查询条件简单量又不大的,但字段变化又无法确定的数据
    主库还是推荐关系数据库,正常业务真离不开 sql
    Immortal
        34
    Immortal  
       2017-07-21 02:27:31 +08:00
    不过 mongo 吃内存是真的挺厉害
    changnet
        35
    changnet  
       2017-07-21 03:51:44 +08:00 via iPad
    @ericgui 做游戏很合适的
    XiaoFaye
        36
    XiaoFaye  
       2017-07-21 04:08:37 +08:00
    不搞些新概念,新技术,怎么骗投资人?怎么搞 KPI ?
    Sharuru
        37
    Sharuru  
       2017-07-21 08:00:32 +08:00 via Android
    我一直搞不懂,NoSQL 不就是个 Map K,V 么...真有人会用?
    SlipStupig
        38
    SlipStupig  
       2017-07-21 08:10:55 +08:00
    我线上每天处理用 monogodb 处理 200G 数据,目前一切正常,不好的就是 mongo 需要多个 CPU 核心和更多内存,场景主要是无结构化数据
    wupher
        39
    wupher  
       2017-07-21 08:56:13 +08:00
    看场景啊。从 MongoDB 1 一直用到 MongoDB 3,非结构化数据场景时很好用的。

    把 mongodb 当 mysql,当 mongodb 当 Redis。这样来使用,最好还怪 MongoDB 这有坑那有罪的,我能说什么呢?
    jjx
        40
    jjx  
       2017-07-21 09:02:45 +08:00
    没有硬件资源就不要碰, 有硬件资源随便
    MrJing1992
        41
    MrJing1992  
       2017-07-21 09:10:52 +08:00   ❤️ 1
    问题主要还是出在用的人身上了
    vicalloy
        42
    vicalloy  
       2017-07-21 09:11:15 +08:00
    MongoDB 的一些特性让 MongoDB 看上去有些象关系数据库。
    在 MongoDB 火的时候很多人将 MongoDB 当关系数据库。
    对于大多应用场景而言还是结构化数据居多,用 MongoDB 真的只是比较酷而已。

    注:之前简单的用过 MongoDB,在结构化数据前 MongoDB 没有 ORM 好用。由于数据量不大,性能方面没有明显的体会。
    ryd994
        43
    ryd994  
       2017-07-21 09:12:25 +08:00
    @Sharuru kvmap 那是 redis,mongodb 怎么说也比 kvmap 复杂
    weilongs
        44
    weilongs  
       2017-07-21 09:44:36 +08:00
    靠谱不靠谱关键在人怎么用,至少我从事的工作还没遇到用这个。
    justfly
        45
    justfly  
       2017-07-21 09:45:12 +08:00
    这篇文章表达的根本不是这意思
    cstj0505
        46
    cstj0505  
       2017-07-21 09:47:03 +08:00
    读写性能还可以。我们弃用的关键是查询的分析能力渣渣。
    ChristopherWu
        47
    ChristopherWu  
       2017-07-21 09:51:18 +08:00
    在用 mongo 之前,你总要想清楚,你的业务是什么,为什么选择 mongo,mongo 跟 psql 之类相比优缺点是什么吧
    hwwen
        48
    hwwen  
       2017-07-21 09:57:07 +08:00
    @cstj0505 数据多起来的话查询是真的慢。。。
    niuoh
        49
    niuoh  
       2017-07-21 10:20:15 +08:00
    介于 mysql 和 redis 之间。。
    tabris17
        50
    tabris17  
       2017-07-21 10:26:47 +08:00
    可以用作快速存储介质,别当可靠存储介质用就行了
    zhuliangliang
        51
    zhuliangliang  
       2017-07-21 10:27:53 +08:00
    mongo 一时爽,ETL 火葬场
    rrfeng
        52
    rrfeng  
       2017-07-21 10:31:35 +08:00
    几亿数据跑的好好的。
    被喷是因为 MongoDB 相对于其他 NoSQL 火一些所以枪打出头鸟了。
    大多数还是没好好当 NoSQL 用。
    fqzz
        53
    fqzz  
       2017-07-21 10:32:38 +08:00
    英文不好,没看出“现在不行了,现在都不用了”是哪里说的?
    RangerWolf
        54
    RangerWolf  
       2017-07-21 11:19:15 +08:00
    我们项目组在存 mongo 的时候同时把数据往 Cassandra 塞了一份
    不然规模分析根本扛不住
    doubleflower
        55
    doubleflower  
       2017-07-21 13:55:24 +08:00
    mysql 能搞定的千万别上 mongodb

    无结构开发体验更差,还没事务
    loveskyforever
        56
    loveskyforever  
       2017-07-21 14:05:26 +08:00
    这么说吧 mongo 其实适合做弱类型文档型的数据存储,比如你做一个论坛,留言板或者博客什么的,mongo 还是很好用的,但是你要是做电商啥的那就想都不用想了,mongo 自身的确有很多限制,但是也可以说他的优点,看你把它用在什么地方。我们目前搭建了一个接口管理平台 doclever.cn 用于接口管理,mock 数据,自动化测试,团队协作,这个系统就比较适合 mongo,至少目前比较适合~
    crayygy
        57
    crayygy  
       2017-07-21 14:07:57 +08:00
    内部一个小工具用的 MongoDB,一直想换成 PG,但是转移成本有点高。

    新项目的话,还是用 PG 之类的比较靠谱吧(个人意见
    Miy4mori
        58
    Miy4mori  
       2017-07-21 14:30:34 +08:00 via iPhone
    @Sharuru 你的理解有些片面了,广域上一切非 SQL 都可以叫做 NoSQL,除了键值数据库还有图数据库等,典型的有 neo4j ……
    wchrt
        59
    wchrt  
       2017-07-21 15:47:42 +08:00
    mongodb 的分布式部署非常好用,现在缺的是靠谱的 mongodba
    undeflife
        60
    undeflife  
       2017-07-21 16:14:01 +08:00
    mongodb 免费版的全文索引不支持中文分词。。。
    frye
        61
    frye  
       2017-07-21 16:25:16 +08:00
    弃坑 Mongo 是一个很好的选择,当数据量上去之后,弃坑也是一个早晚的事情。
    我所遇到的用 Mongo 的大点的公司,到目前为止,没有一个公司没有弃坑的。
    nullcc
        62
    nullcc  
       2017-07-21 16:30:39 +08:00
    mongodb 存存 log 什么的还是不错的
    ryanzyy
        63
    ryanzyy  
       2017-07-21 16:38:50 +08:00
    客观的说一句
    看到拿 MongoDB 跟 PostgreSQL 相比的评论
    就好比看到
    外行人把 JavaScript 称作 JAVA
    rrfeng
        64
    rrfeng  
       2017-07-21 16:40:59 +08:00
    @frye 360 ?
    j
        65
    j  
       2017-07-21 17:12:59 +08:00
    小规模没问题,中大规模么,等你哪天想 repair 的时候就会想哭了。
    sampeng
        66
    sampeng  
       2017-07-21 19:57:29 +08:00
    我的经验是有精力去爬 mongodb 的坑,早就把 mysql 环境打造的很好了。从整体代价上来看其实是一样的。。
    前面有人说是人的问题,不是工具。。这个没错。会 mysql 的一大把,会 mongodb 并且精通的打着灯笼都找不到。从这点来看,不说 postgresql。。和 mysql 比都没优势。。所有所谓 mongodb 解决的问题,mysql 用反范式照样能做。复杂度两者其实是一样的。什么?改改配置就能用。。做梦吧,掉坑里想出都出不来。。照样得改代码,照样得容错,照样的监控性能查找性能瓶颈。。。
    那么问题来了。。。在大规模使用下 mongodb 和其他的数据库产品没有太大优势而言。。那么,为毛要去跳这个坑?
    恩。。答案就是:
    因为大部分创业公司一开始用的 nodejs。。。大家可以看,nodejs 的大部分带数据库存储的都是走的 mongodb。。。。。
    popbones
        67
    popbones  
       2017-07-21 20:29:12 +08:00 via iPhone
    @sampeng 你说的很对,我司就是这样的例子,初创的时候业务逻辑简单,关系少上了 mongo,之后各种新的逻辑叠加在一起很难有效的 denormalize,数据量上来只能加资源。当然不是说没办法,但是从人力到资源的的成本都飙升,并且意味着未来的成本会更高。所以现在在逐渐把业务逻辑处理挪到其他的数据库,Mongo 做 document store 读写和简单的逻辑还是可以的。
    jk0
        68
    jk0  
       2017-07-21 20:33:26 +08:00 via Android
    @akrf 感觉你很有故事?
    hanxiansheng
        69
    hanxiansheng  
       2017-07-22 08:49:24 +08:00 via Android
    蒙古数据库( MongoDB)我是挺喜欢的
    minvacai
        70
    minvacai  
       2017-07-22 09:08:47 +08:00 via Android
    @hwwen 索引没做好吧
    lulalalulala
        71
    lulalalulala  
       2017-07-22 15:38:28 +08:00
    我有好多项目都用 mongodb,只是我的项目特点是没什么事务,所以用它很爽。如果是那种事务性高的,肯定不能选 mongodb。选数据库要看场景,选技术也一样。
    CRVV
        72
    CRVV  
       2017-07-22 19:57:56 +08:00   ❤️ 1
    @ryanzyy
    https://www.enterprisedb.com/postgres-plus-edb-blog/marc-linster/postgres-outperforms-mongodb-and-ushers-new-developer-reality
    比不比没什么不对的,EnterpriseDB 也是正经搞 PostgreSQL 的公司
    比较的结论就是把 PostgreSQL 当 MongoDB 用,MongoDB 也不如 PostgreSQL,更不用说当关系型数据库来用了
    littlehz
        73
    littlehz  
       2017-07-23 00:41:48 +08:00
    据说坑多,我司人少,一直不敢用
    fiht
        74
    fiht  
       2017-07-23 07:25:47 +08:00
    还是看需求吧...
    层主现在写的爬虫就用的 MongoDB 存的数据,原因的我的爬虫保存了 HTTP response header 字段,而这个字段里面的内容是很不确定的,这个用 SQL 实现起来就很麻烦,但是 NoSQL 的就很实用了,直接 insert 进去就可以。
    所以还是跟业务场景有关吧,就爬虫来说,我的理解是 MongoDB 存脏数据,MySQL(SQL)存清洗过后的数据
    forex118899
        75
    forex118899  
       2017-07-23 10:39:00 +08:00
    no-sql 裡最靠譜 首選問自己到底要 sql 還是 no-sql
    winglight2016
        76
    winglight2016  
       2017-07-23 12:36:52 +08:00
    我记得几年前看过一本《 mongodb 权威指南》的书,有兴趣的可以看看,里面解释了适合 mongodb 的几种场景,包括可能会有的坑以及解决办法,个人认为,说 mongodb 不好使,一是没用对地方,二是不会用,没有其他原因
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:08 · PVG 22:08 · LAX 06:08 · JFK 09:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.