知乎上查了一圈发现很多人讨论 MongoDB 的坑居然是默认没有密码被黑客敲诈勒索这种坑,= =
但是也有几年前的帖子说插入失败后没有报错导致莫名其妙丢数据,请问这些坑目前解决了吗?
我这里有个项目要引入国际化支持,导致一些数据结构比较奇怪,而且树状的数据结构比较多(例如不同国家地区的省市县乡村和联邦,州,市,村镇街道等等都不太一样,邮政编码以及手机号段归属地等等都不一样,然后这些不一样的字段还和其它表有各种关联,用 MySQL 建表针对不同情况要建立不同的表结构,有些国家的情况目前也没调研清楚,后期这个表结构可能随时都需要大改,因此用传统关系型数据库觉得非常麻烦)
尝试过用 Powerdesign 画 ER 图转逻辑模型再转物理模型,各种数据库模式设计之后发现最后非常复杂,业务代码写起来也很复杂,不用物理外键甚至还有可能导致数据不一致问题。发现改成 MongoDB 后在数据模式设计上面的这些问题就解决了。
MongoDB 导入 ElasticSearch 做全文索引也很方便,json 结构都可以直接一对一导入进去,不像 MySQL 还得把很多树状结构转换一下。我感觉功能上 MongoDB 还是非常好的。只是不知道在稳定性和数据安全性上这个数据库到底怎么样?
另外还想问问各位会使用 MongoDB 的物理外键吗?(同名问题: https://www.zhihu.com/question/412020726 )
1
renmu123 2020-08-04 18:15:23 +08:00 via Android
MongoDB 理论上都能做,甚至做得更好,在数据量大的时候应该表现得比 MySQL 之类更好,MongoDB 有物理外键这种概念吗,可以根据你的项目设置不同的 model (我只在小项目中用过
|
2
MeteorCat 2020-08-04 18:18:51 +08:00 via Android
复杂业务统计的混合条件很麻烦,常规的分组混合统计编写比普通 sql 麻烦多了
|
3
MeteorCat 2020-08-04 18:21:14 +08:00 via Android
对了,MongoDB 可以连表查询吗?我用了好久从没试过连表查功能,不知道现在还有没有
|
4
lithiumii 2020-08-04 18:25:58 +08:00 via Android
本来只有 MongoDB 的时候,因为聚合查询特别难写,数据统计的时候都是一股脑读出来用 Python 算;后来换成了 MySQL,经常偷懒写个长长的 SQL,然后被开发追着打
|
5
MeteorCat 2020-08-04 18:30:10 +08:00 via Android 1
还有 MongoDB 有个很大的坑点,就是他的$group 分组,不要单纯用来对比 sql 的 group by,如果单个数据库数据过大会引发 group 数据切片分层,这种情况应该使用 aggregate,切记不要抄百度所有让你$group 分组的方法,要去找 aggregate 分组
|
6
teawithlife 2020-08-04 19:20:29 +08:00
MongoDB 应该是最适合你这个需求的了,或者你可以考虑一下 PostgreSQL,支持 json 字段
MongoDB 发展到现在,已经算是很成熟的了,大部分的坑都已经被填,对于使用者(特别是用了多年 SQL 的人)来说,主要还是使用习惯的转变,需要从 SQL 的思路跳出来 大胆的去用吧,你会发现真香的 PS:MongoDB 支持 left outer join,通过$lookup 关键字 |
7
sunny352787 2020-08-04 19:29:25 +08:00
我这边几个游戏项目都是用的 MongoDB,不过业务需求和你的不一定一样,我们都没有连表查询的需求,大部分都是对单条数据的修改
|
8
pigmen 2020-08-04 20:14:01 +08:00
连表查询在 nosql 里面不太会用到,数据都塞进一个 document 里了
|
9
xiaogui 2020-08-04 21:09:12 +08:00
PostgreSQL + 1
就 Rails 圈子来说,好多当年主推 MongoDB 的项目最后走了 PostgreSQL 。 |
10
lshero 2020-08-04 21:12:19 +08:00
可能是使用姿势不正确,之前遇到的问题是数据多了分页坑,有压力只能靠副本集抗
|
11
xkeyideal 2020-08-05 11:04:34 +08:00
四年多来写的大小项目全部使用 mongodb 作为数据库,没发现什么坑
|