有没有人尝试过整个项目都完全用 MongoDB 这种 NoSQL?有遇到过什么坑吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
changwei
V2EX    问与答

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

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

    知乎上查了一圈发现很多人讨论 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     Solana     3590 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 00:13 PVG 08:13 LAX 17:13 JFK 20:13
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86