03.08 MongoDB适合做商城app数据库吗?

西瓜乐园


个人认为,MongoDB不太适合用作商城APP的数据库:

  • 能用是肯定能用的,但是不适合,开发过程中需要解决的问题会比较多且严峻;

  • 单独只使用MongoDB是不适合的,可以用它解决一部分的问题,也就是关系型数据库和MongoDB配合着使用。

MongoDB是什么,以及它的优点

概括地说一下MongoDB是什么:它是一个基于分布式文件存储的非关系型数据库;我们常见的MySQL、Oracle都是关系型数据库,数据在关系型数据库中都是通过表的格式展现,可以看做二维表格;而MongoDB中的数据,类似于JSON格式(BSON)。

MongoDB除了性能上的优势之外,我认为最大的优点就是数据模式自由,如果你愿意的话,可以将任何数据都保存到同一张表中(MongoDB中叫做Collection,等同于关系型数据库中的Table);

比如像这样,一条客户信息,一条产品信息,两条毫无交集的数据,可以保存到同一个Collection中(比较极端的做法,实际使用的时候还是要区分开):


为什么说MongoDB不太适合用作商城应用的数据库

  • 首先,商城应用对事务一致性要求非常高,而MongoDB在事务的支持上,比较晚熟;MongoDB在3.0左右的版本,开始支持单文档的事务,到了4.0以上的版本,开始支持多文档事务;MongoDB发展的越来越好,但是在事务支持上,和关系型数据库相比确实还是有差距。

  • 第二,通常商城相关的业务,表结构相对都是比较成熟且固定的,比如客户表、商品表、订单表、支付表等等,同一个维度的数据结构基本都是相同的,比如客户都会有姓名、手机号、收货地址,这并没有发挥MongoDB数据结构自由的优势,关系型数据库已经可以很好地支撑。

  • 第三,MongoDB在多表关联方面,优势不大,比如需要查询客户下面所有的订单,那么可能需要关联客户表和订单表;而让MongoDB来实现,订单可以作为客户下面的一个子文档来存储,大概就是这个样子:


总结来说,MongoDB更多适用于大数据量、高并发、弱事务、数据结构“随意”且“善变”的场景,是对关系型数据库的补充。


我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


刚好最近接触的项目是一个商城项目并且使用了MongoDB数据库。

该商城系统使用MongoDB的目的是存储大量的商品信息,并且结合了搜索引擎lucene,以便于维护商品信息和进行查询。

说明商城系统使用MongoDB不是稀奇的事情。

一分钟了解MongoDB

MongoDB最大的特点是与MySQL等关系型数据库不同的是,他是基于分布式文件存储的数据库。它的存储的数据格式是最接近自然最面向对象的Json格式。



最重要的是,MongoDB,不支持复杂事务和连表查询。

请注意这一点也就意味着MongoDB的适用场景是有一定局限性的,如果你想要复杂连表查询和事务,那么MongoDB将做不到。

如果你是想维护单表信息并且做频繁得更新和查询,而且数据量增长指数很吓人,MongoDB非常适合。

宇文氏建议:

这也就意味着如果MongoDB用于电商系统,那么很可能作为其中的一个数据存储部分,多半会和MySQL等数据库联合使用。

关注“极客宇文氏”,一名有料的软件工程师。

极客宇文氏


首先,mongdb一个最大的缺点就是不能进行多表联合查询,也就是说像mysql等关系型数据库里面的join语法在mongdb是不存在的。所以说如果你想要的数据确保在一张表里就能查出来就还好,如果涉及到多表的话难道你想用各种for循环去实现表的联合查询吗?

而实际上商城系统还是比较复杂的,业务不可能用一张表来表达,肯定会涉及到多表查询,因此mongdb可以用在商城系统中的一环,但是不能用于全部。


IT我的小熊不见了丶


这个问题要看是什么样的商城?如果是作者可以小东西,商城非常简单,那还是可以的。现在比较火的前后端分离,以及全栈工程师,从前端写到后端,老顾看到有些视频和文章就是用MongoDB作为数据库进行开发的。

因地制宜

真实已经运营上线的商城系统是比较复杂的,设计到的技术点也是比较多的。好的系统不会只选择一种方案,而是遇到什么业务场景,选择不同的方案。

持久化方案

我们这里沟通一下持久化方案。小伙伴们经常挂到嘴边的数据库其实就是一种持久化方案,把数据保存到磁盘上面。经常用到的产品如:oracle,mysql,MongoDB,elasticsearch,hdfs,甚至redis都是。

不同的持久化产品有不同的特性,mongoDB采用的是kv存储的方式,高性能,天生支持分布式,常常是用来做数据分析的。他的弱点就是关联查询就比较麻烦。

而传统的mysql数据库关联查询就比较方便,但性能不高,搭建集群也比较麻烦。

总结:要看具体的业务场景,选择不同的持久化方案;不能脱离了业务,脱离业务就是耍流氓了。


老顾聊技术


不适合,mongo适用于字段类型复杂且经常变化的业务,如社交系统,行为数据,爬虫等。商城的特点是schema固定,强事务和一致性,关联查询频繁。这些都非nosql的特长


乌里雅苏台Uriahsutai


性能不如mysql,唯一的好处就分布式方便,只能用来做日志系统,计算用的大数据存储。要不还是乖乖用MySQL吧,一个稍微复杂点的查询性能可以比mysql慢十多倍。 另外一点好处就是写入特快,不会因为单表数据越来越多就越来越慢。只合适做低频查询的数据存储


小小CTO


非常不推荐,mongo的话是文档型非关系型数据库,弱化了对象的概念,像这种大型的系统还是推荐mysql这种关系型数据库,mongo的话,你在使用的过程中,维护这些表的相互关系,时间上会花掉更多的时间。


兰州拉面首席刀客


[灵光一闪]主要还是事务机智不理想。


半寸灰1


可以的,也有实际案例。


corder


不支持事务就决定它在核心功能上不合适


分享到:


相關文章: