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

有没有人尝试过整个项目都完全用 MongoDB 这种 NoSQL?有遇到过什么坑吗?

  •  
  •   changwei · 2020-08-04 18:08:07 +08:00 · 4358 次点击
    这是一个创建于 1570 天前的主题,其中的信息可能已经有所发展或是发生改变。

    知乎上查了一圈发现很多人讨论 MongoDB 的坑居然是默认没有密码被黑客敲诈勒索这种坑,= =

    但是也有几年前的帖子说插入失败后没有报错导致莫名其妙丢数据,请问这些坑目前解决了吗?

    我这里有个项目要引入国际化支持,导致一些数据结构比较奇怪,而且树状的数据结构比较多(例如不同国家地区的省市县乡村和联邦,州,市,村镇街道等等都不太一样,邮政编码以及手机号段归属地等等都不一样,然后这些不一样的字段还和其它表有各种关联,用 MySQL 建表针对不同情况要建立不同的表结构,有些国家的情况目前也没调研清楚,后期这个表结构可能随时都需要大改,因此用传统关系型数据库觉得非常麻烦)

    尝试过用 Powerdesign 画 ER 图转逻辑模型再转物理模型,各种数据库模式设计之后发现最后非常复杂,业务代码写起来也很复杂,不用物理外键甚至还有可能导致数据不一致问题。发现改成 MongoDB 后在数据模式设计上面的这些问题就解决了。

    MongoDB 导入 ElasticSearch 做全文索引也很方便,json 结构都可以直接一对一导入进去,不像 MySQL 还得把很多树状结构转换一下。我感觉功能上 MongoDB 还是非常好的。只是不知道在稳定性和数据安全性上这个数据库到底怎么样?

    另外还想问问各位会使用 MongoDB 的物理外键吗?(同名问题: https://www.zhihu.com/question/412020726

    11 条回复    2020-08-05 11:04:34 +08:00
    renmu123
        1
    renmu123  
       2020-08-04 18:15:23 +08:00 via Android
    MongoDB 理论上都能做,甚至做得更好,在数据量大的时候应该表现得比 MySQL 之类更好,MongoDB 有物理外键这种概念吗,可以根据你的项目设置不同的 model (我只在小项目中用过
    MeteorCat
        2
    MeteorCat  
       2020-08-04 18:18:51 +08:00 via Android
    复杂业务统计的混合条件很麻烦,常规的分组混合统计编写比普通 sql 麻烦多了
    MeteorCat
        3
    MeteorCat  
       2020-08-04 18:21:14 +08:00 via Android
    对了,MongoDB 可以连表查询吗?我用了好久从没试过连表查功能,不知道现在还有没有
    lithiumii
        4
    lithiumii  
       2020-08-04 18:25:58 +08:00 via Android
    本来只有 MongoDB 的时候,因为聚合查询特别难写,数据统计的时候都是一股脑读出来用 Python 算;后来换成了 MySQL,经常偷懒写个长长的 SQL,然后被开发追着打
    MeteorCat
        5
    MeteorCat  
       2020-08-04 18:30:10 +08:00 via Android   ❤️ 1
    还有 MongoDB 有个很大的坑点,就是他的$group 分组,不要单纯用来对比 sql 的 group by,如果单个数据库数据过大会引发 group 数据切片分层,这种情况应该使用 aggregate,切记不要抄百度所有让你$group 分组的方法,要去找 aggregate 分组
    teawithlife
        6
    teawithlife  
       2020-08-04 19:20:29 +08:00
    MongoDB 应该是最适合你这个需求的了,或者你可以考虑一下 PostgreSQL,支持 json 字段

    MongoDB 发展到现在,已经算是很成熟的了,大部分的坑都已经被填,对于使用者(特别是用了多年 SQL 的人)来说,主要还是使用习惯的转变,需要从 SQL 的思路跳出来

    大胆的去用吧,你会发现真香的

    PS:MongoDB 支持 left outer join,通过$lookup 关键字
    sunny352787
        7
    sunny352787  
       2020-08-04 19:29:25 +08:00
    我这边几个游戏项目都是用的 MongoDB,不过业务需求和你的不一定一样,我们都没有连表查询的需求,大部分都是对单条数据的修改
    pigmen
        8
    pigmen  
       2020-08-04 20:14:01 +08:00
    连表查询在 nosql 里面不太会用到,数据都塞进一个 document 里了
    xiaogui
        9
    xiaogui  
       2020-08-04 21:09:12 +08:00
    PostgreSQL + 1
    就 Rails 圈子来说,好多当年主推 MongoDB 的项目最后走了 PostgreSQL 。
    lshero
        10
    lshero  
       2020-08-04 21:12:19 +08:00
    可能是使用姿势不正确,之前遇到的问题是数据多了分页坑,有压力只能靠副本集抗
    xkeyideal
        11
    xkeyideal  
       2020-08-05 11:04:34 +08:00
    四年多来写的大小项目全部使用 mongodb 作为数据库,没发现什么坑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2428 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:06 · PVG 00:06 · LAX 08:06 · JFK 11:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.