加油,新时代打工人!

1、MongoDB是什么

MongoDB并非芒果的意思,而是源于 Humongous(巨大)一词。 那么为什么要学习MongoDB呢? MongoDB最大的优势就是开发效率的显著提升和卓越的横向扩展能力;做了同样的功能的业务代码,代码量显著减少,因为MongoDB直接使用了类似对象模型的JSON数据结构来进行数据存储,从而大幅度简化了数据库的模式设计及ORM层的编码工作
简单来说,如果你是开发者,MongoDB可以让你花更少的时间在数据库上,从而可以专注于业务编程,如果你是DBA,它可以帮助你解决系统的高可用,高性能,以及横向扩展的痛点;如果你是架构师,或者是产品经理,MongoDB是一个非常灵活的数据库,可以快速响应业务的需求变化;这就是MongoDB作为一个应用数据库的最大优势;
学习MongoDB的难点有哪些呢??
MongoDB是五大数据库之中唯一的非关系型数据库,所谓的NoSQL,这就意味着,一般技术人员所熟知的数据库知识在开始使用MongoDB的时候不一定有很大帮助;相反如果你不摒弃掉哪些传统的关系型数据库理念,大概率上你会用一种错误的方式去设计和使用它;最终无法达到最想要的效果;
在这里插入图片描述

具体来说有这几个难点:

1) 、MongoDB使用JSON的数据模型,鼓励使用更多的文档嵌套方式来减少多表关联的设计,从而达到易用,高性能的目的,但是这种反范式的文档模型设计目前并没有完整的理论支持;导致即使想系统地学习,也没有太好的书籍或者材料可以参考;
2) 、MongoDB依赖于JSON和Javascript语法,对于开发者来说,比较简单,但是对于运维和DBA的同学来说,这需要额外的学习成本;
3) 、MongoDB通过分片来进行横向扩展,分片的设计和调优相对比较复杂,主要是要考虑到一些MongoDB本身的技术实现以及数据均衡带来的性能影响;所以这方面的话需要一定的深入的学习;

MongoDB和关系型数据库对比
在这里插入图片描述

2、MongoDB的特性

MongoDB的3大技术特色如下所示:

在这里插入图片描述
除了上图所示的还支持:
二级索引、动态查询、全文搜索 、聚合框架、MapReduce、GridFS、地理位置索引、内存引擎 、地理分布等一系列的强大功能。
但是其也有些许的缺点,例如:
  多表关联: 仅仅支持Left Outer Join
  SQL 语句支持: 查询为主,部分支持
  多表原子事务: 不支持
  多文档原子事务:不支持
  16MB 文档大小限制(可以使用db.isMaster().maxBsonObjectSize查看)  不支持中文排序 ,服务端 Javascript 性能欠佳

3、关系型数据库与mongodb对比

存储方式对比:

在传统的关系型数据库中,存储方式是以表的形式存放,而在MongoDB中,以文档的形式存在。
在这里插入图片描述
数据库中的对应关系,及存储形式的说明
在这里插入图片描述

MongoDB与SQL的结构对比详解

SQL Terms/ConceptsMongoDB Terms/Concepts
databasedatabase
tablecollection
rowdocument or BSON document
indexindex
table joinsembedded documents and linking
primary keySpecify any unique column orcolumn combination asprimary key.primary keyIn MongoDB, the primary key isautomatically set to the _id field.
aggregation (e.g. group by)aggregation pipelineSee the SQL to Aggregation MappingChart.

4、MongoDB数据存储格式

JSON格式
  JSON 数据格式与语言无关,脱胎于 JavaScript,但目前很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是 .json。
  MongoDB 使用JSON(JavaScript ObjectNotation)文档存储记录。 
  JSON数据库语句可以容易被解析。
  Web 应用大量使用,NAME-VALUE 配对
  在这里插入图片描述
BSON格式
  BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式。BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。
    二进制的JSON,JSON文档的二进制编码存储格式  BSON有JSON没有的Date和BinData
  MongoDB中document以BSON形式存放
  eg:
 db.meeting.insert({meeting:“M1 June",Date:"2018-01-06"});

5、MongoDB适用场景

  1. 网站数据、缓存等大尺寸、低价值的数据   在高伸缩性的场景,用于对象及JSON数据的存储。   游戏场景,使用 MongoDB

  2. 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新 物流场景,使用 MongoDB

  3. 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。

  4. 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能

  5. 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析

  6. 视频直播,使用 MongoDB 存储用户信息、礼物信息等

6、MongoDB 慎用场景

慎用场景原因
PB 数据持久存储大数据分析数据库Hadoop、Spark提供更多分析运算功能和工具,并行计算能力更强MongoDB + Hadoop/Spark
搜索场景:文档有几十个字段,需要按照任意字段搜索并排序限制等不建索引查询太慢,索引太多影响写入及更新操作
ERP、CRM或者类似复杂应用,几十上百个对象互相关联关联支持较弱,事务较弱
需要参与远程事务,或者需要跨表,跨文档原子性更新的MongoDB 事务支持仅限于本机的单文档事务
100% 写可用:任何时间写入不能停MongoDB换主节点时候会有短暂的不可写设计所限
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐