课程名称:Spring Cloud 进阶 Alibaba 微服务体系自媒体实战
课程章节: 第5章 Admin 平台运营管理中心服务
主讲老师: 风间影月
课程内容
基础概念
MongoDB 是非关系型数据库,也就是nosql,存储json数据格式会非常灵活,要比数据库mysql/MariaDB更好,同时也能为mysql/MariaDB分摊一部分的流量压力。
对于经常读写的数据他会存入内存,如此一来对于热数据的并发性能是相当高的,从而提升整体的系统效率。
另外呢,对于非事务的数据完全可以保存到MongoDB中,这些数据往往也是非核心数据。
一般来说,我们可以把一些非重要数据但是读写却很大的数据存储在MongoDB,比如我们自己的物流运输的车辆运行轨迹,GPS坐标,以及大气监测的一些动态指标等数据。又或者说咱们实战中的友情链接,友情链接在首页,这数据本身不重要,但是在首页里会经常被读到,并发读很大,所以放mongoDB中没毛病。
此外,mongodb提供的gridfs提供小文件存储,可以自己把控接口读取的权限,这一点也是有优势的,比如存储一些身份证信息啊,人脸信息啊都是可以的。
以下是MongoDB和数据库以及ElasticSearch(es没接触过的,待后续整合es后可以回过头来对比看看)的术语对比:
数据库 | ElasticSearch | MongoDB |
database | es库 | database |
table 表 | index 索引 | collection 数据集合 |
row 行(记录) | document 文档(json) | document 文档(json) |
column 字段列 | field 域 | field 域 |
index 索引 | - | index 索引 |
join 表关联查询 | - | - |
pk 主键 | _id | _id |
MongoDB可以创建多个数据库(同mysql)
一个数据库可以创建多个collection(同mysql创建多表)
一个集合可以包含很多文档数据(同mysql一张表包含很多行记录)
我们可以通过如下代码片段来更好的理解MongoDB的数据对比,假设这张表中总记录有3条:
UserList: [ { userId: "1001", username: "lee", age: 18, sex: "boy" }, { userId: "1002", username: "jay", age: 20, sex: "boy" }, { userId: "1003", username: "jolin", age: 19, sex: "girl" } ]
如上述代码中:
UserList是一个collection,在mysql中可以当做是一张表
UserList中的每个{}都是一个json对象,他们称之为document文档,在mysql中称之为行记录
userId、username、age、sex 这些都是field 域,在MySQL中称之为column列字段
课程收获
MongoDb的主要特点:
MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
MongoDB安装简单。
课程截屏