我自己用mongodb做了有大小上十个项目了,使用时有些不好的体验总结如下:
- mongodb对关联操作(类似Mysql的join)支持不够好
2.事务场景很难处理
3.好像没有了
遇到这两个问题时,总会想起Mysql,但是已经Mongodb已经用了很久了,总是下不了决心去换。
这里希望大家讲讲nodejs项目中使用Mysql的体验如何,帮我做个决定。
如果你的电脑是 macbook 的话,那么还是mongodb,如果不是,两个都可以,mysql在windows下会更好用一点,mongodb也是ok的
尽量不使用关联操作,事务可以不用,一般情况下遇到的项目数据其实都不算大,用mongodb、mysql都没问题的,看个人喜好。
@vxhly 自己的电脑是什么,似乎不应该影响数据库选型
@ciey 老兄,你说的简单,有些时候,是你说不用就不用的?
@qujinxiong 也对,不影响,我只是强迫症,用macbook的话,最好还是mongodb
我还是喜欢mysql那种面向表的思维,而且mysql是主流,mongodb算是node开发者的主流吧,选mysql的话一是先接触的是mysql,然后有不懂的还可以请教rd
当然是MongoDB啦,MongoDB唯一的缺点好像就是全文搜索不支持中文。
根据业务需求决定吧, 对事务要求比较多的场景用mysql, 比如订单, 积分等, 以读为主, 查询场景多的, 比如, 日志分析,报表, 用mongodb. join在mongodb里曲线救国, 用lookup.没有最好, 只有最适合.
@zhanzhenzhen 难道我说的两个问题在你这不是问题?那你是怎么处理那两个的
@shoyer2010 join在mongodb中,我用的是mongoose提供的population,实际上mongodb官方文档,也简单提了下ref
是在两种不同数据模型的数据库中做选择吗?这个跨度太大了,就好像是“我今晚到底是吃意面还是吃寿司?”,多多少少应该先选择是“日料还是意餐”吧?
一个是关系模型,一个是非关系模型,取决于你的数据模型是哪种,如果你的数据是文档型的,比如国家-省-市-区这种树状结构的数据,通常如果每个行政等级之间没啥联系的话就是一个树状的非关系模型,这时候用如果用关系模型数据库实现的话你会发现你需要花好大的力气来构建这个树状结构,维护和性能可能也会有很大问题。。。
当然上面也不是绝对的,看实际需求和技术上面遇到的问题。
选定一种数据模型再去研究到底需要哪些数据库特性,非关系型数据库也不是只有MongoDB一个。
MongoDB有两个不足是客观存在的,1.不支持事务 2.不支持自定义锁 但这些机制并不是必要的,而且是可以用程序框架来实现的,只不过会比较复杂,我的建议是也没必要把整个服务都独占到一个数据库软件上,系统可以拆分成几个相对独立的子系统,不同子系统按照各自的数据模型类型和数据的使用特性来决定各自使用的数据库。
@qujinxiong aggregation aggregation 才是mongodb的精髓, 建议你了解下.
用lookup解决关联还是挺方便的吧
@qujinxiong 不支持多表连接查询
主要得看你项目的需求特性,如果只是存存简单的kv型数据,mongodb足以胜任,而且在某些场景性能还要好过RDBMS,如果你需要事务、强一致性这类的,还是mysql吧。
我不用事务的啦
@shoyer2010 呵呵,你这还真不客气,什么叫了解下,有话直说。
@TimLiu1 官方支持的不够好,并不是没有,你可以查下mongodb文档的ref
把你的项目需求发出来,就知道用哪个数据库,各有优缺点,根据需求定哈
@qujinxiong 让你了解下aggregation里面的lookup, 可以解决你提到的join问题, 怕你找不到, 文档地址都给你贴上了,还要我直说什么?
@shoyer2010 lookup只能解决部分简单的join问题,多层级的关联是做不了的或者说很麻烦吧。比如,两层或者多次的关联。
@zhanzhenzhen 我觉得事务问题几乎无法避开,除非你把数据库设计成那种单文档的样子。否则,一次请求要做两次更新数据库的操作,难道你没遇到过?
@qujinxiong 那个只是通过id连表查询,是语法糖的一种,mongodb主要是为了让mongodb支持复杂的分布式管理做的取舍
简单的事务处理可以用这个库。。https://github.com/zaaack/mongo-tx
来自酷炫的 CNodeMD
@qujinxiong 复杂的join可以在框架层面实现
来自酷炫的 CNodeMD
用mongodb比较多,mysql的话用的感觉不是很舒服,,不过mysql还是主流啊
看具体需求,如果数据逻辑性比较强,统计分析较多的情况使用mysql。如果数据存储量比较大,数据逻辑性较弱,统计分析需求不多的情况,使用mongodb较好。很多情况下,期实可以使用mysql + redis组合,或者mongodb + mysql配合起来使用会达到较好的效果。
楼主,你做了十几个mongodb的项目,有没有遇到这样的一个问题.比如我有一个增加和删除的操作,增加的数据成功,但是删除操作报错了,但是增加的数据已经在数据库中.如果要还原之前的数据自己手动删除增加的那条数据.一个关联的还好,如果多个关联之后报错我都不知道怎么办.所以mongodb搞的我好烦,你是怎么解决这个问题…
@598220654 这就是mongodb的不足之一,不支持事务。官方有二段提交,我没用过,嫌麻烦。 你说的这个问题,一般就从业务流程和代码本身逻辑上控制。
两个一起用, 没毛病.
对我学习node有点点帮助!