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

2020-08-04 18:08:07 +08:00
 changwei

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

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

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

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

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

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

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

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

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

PS:MongoDB 支持 left outer join,通过$lookup 关键字
sunny352787
2020-08-04 19:29:25 +08:00
我这边几个游戏项目都是用的 MongoDB,不过业务需求和你的不一定一样,我们都没有连表查询的需求,大部分都是对单条数据的修改
pigmen
2020-08-04 20:14:01 +08:00
连表查询在 nosql 里面不太会用到,数据都塞进一个 document 里了
xiaogui
2020-08-04 21:09:12 +08:00
PostgreSQL + 1
就 Rails 圈子来说,好多当年主推 MongoDB 的项目最后走了 PostgreSQL 。
lshero
2020-08-04 21:12:19 +08:00
可能是使用姿势不正确,之前遇到的问题是数据多了分页坑,有压力只能靠副本集抗
xkeyideal
2020-08-05 11:04:34 +08:00
四年多来写的大小项目全部使用 mongodb 作为数据库,没发现什么坑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/695597

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX