1 MongoDB
MongoDB是⼀款⾼性能的NoSQL
1.1 MongoDB体系结构
1.1.1 NoSQL 和 MongoDB
1.1.2 MongoDB 体系结构
1. MongoDB 和RDBMS(关系型数据库)对⽐
1.1.4 什么是BSON
BSON是⼀种类json的⼀种⼆进制形式的存储格式,简称Binary JSON,它和JSON⼀样,⽀持内嵌的⽂档对象和数组对象,但是BSON有JSON没有的⼀些数据类型,如Date和Binary Data类型。
BSON可以做为⽹络数据交换的⼀种存储形式,是⼀种schema-less的存储形式,它的优点是灵活性⾼,但它的缺点是空间利⽤率不是很理想。
{key:value,key2:value2} 这是⼀个BSON的例⼦,其中key是字符串类型,后⾯的value值,它的类型⼀般是字符串,double,Array,ISODate等类型。
BSON有三个特点:轻量性、可遍历性、⾼效性
1.1.5 BSON在MongoDB中的使⽤
MongoDB使⽤了BSON这种结构来存储数据和⽹络数据交换。把这种格式转化成⼀⽂档这个概念(Document),这
⾥的⼀个Document也可以理解成关系数据库中的⼀条记录(Record),只是这⾥的Document的变化更丰富⼀些,
如Document可以嵌套。
MongoDB中Document 中 可以出现的数据类型
1.2 MongoDB命令
1.2.1 MongoDB的基本操作
查看数据库
show dbs;
切换数据库 如果没有对应的数据库则创建
use 数据库名;
创建集合
db.createCollection("集合名")
查看集合
show tables;
show collections;
删除集合
db.集合名.drop();
删除当前数据库
db.dropDatabase();
1.2.2 MongoDB集合数据操作(CURD)
1.2.2.1 数据添加
1. 插⼊单条数据 db.集合名.insert(⽂档)
2. 例如:
db.lg_resume_preview.insert({name:"张晓峰",birthday:new ISODate("2000-07-01"),expectSalary:15000,gender:0,city:"bj"})
没有指定 _id 这个字段 系统会⾃动⽣成 当然我们也可以指定 _id
( _id 类型是ObjectId 类型是⼀个12字节 BSON 类型数据,有以下格式:
前4个字节表示时间戳 ObjectId("对象Id字符串").getTimestamp() 来获取
接下来的3个字节是机器标识码
紧接的两个字节由进程id组成(PID)
最后三个字节是随机数。)
3. 插⼊多条数据
db.集合名.insert([⽂档,⽂档])
1.2.2.2 数据查询
1.2.2.3 数据更新 调⽤update
1.2.2.4 数据删除
1.2.3 聚合操作
聚合是MongoDB的⾼级查询语⾔,它允许我们通过转化合并由多个⽂档的数据来⽣成新的在单个⽂档⾥不存在的
⽂档信息。⼀般都是将记录按条件分组之后进⾏⼀系列求最⼤值,最⼩值,平均值的简单操作,也可以对记录进⾏
复杂数据统计,数据挖掘的操作。聚合操作的输⼊是集中的⽂档,输出可以是⼀个⽂档也可以是多个⽂档。
1.2.3.1 MongoDB 聚合操作分类
1.2.3.2 单⽬的聚合操作
1.2.3.3 聚合管道(Aggregation Pipeline)
1. 2.3.5 MapReduce 编程模型
1.3 MongoDB索引Index
索引是⼀种单独的、物理的对数据库表中⼀列或多列的值进⾏排序的⼀种存储结构,它是某个表中⼀列或若
⼲列值的集合和相应的指向表中物理标识这些值的数据⻚的逻辑指针清单。索引的作⽤相当于图书的⽬录,
可以根据⽬录中的⻚码快速找到所需的内容。索引⽬标是提⾼数据库的查询效率,没有索引的话,查询会进
⾏全表扫描(scan every document in a collection),数据量⼤时严重降低了查询效率。默认情况下Mongo
在⼀个集合(collection)创建时,⾃动地对集合的_id创建了唯⼀索引
1.3.1 索引类型
1.3.1.1 单键索引 (Single Field)
1.3.1.2 复合索引(Compound Index)
1.3.1.3 多键索引(Multikey indexes)
针对属性包含数组数据的情况,MongoDB⽀持针对数组中每⼀个element创建索引,Multikey indexes⽀持
strings,numbers和nested documents
1.3.1.4 地理空间索引(Geospatial Index)
1.3.1.5 全⽂索引
1.3.1.6 哈希索引 Hashed Index
1.3.2 索引和explain 分析
1.3.2.1 索引管理
1.3.2.2 explain 分析
1.3.3 慢查询分析
1.3.4 MongoDB 索引底层实现原理分析
1.4 MongoDB 应⽤实战
1.4.1 MongoDB的适⽤场景
1.4.2 MongoDB的⾏业具体应⽤场景
1.4.3 如何抉择是否使⽤MongoDB
1.4.4 Spring Boot 访问 MongoDB
1.4.4.1 MongoTemplate 的⽅式
1.4.4.2 MongoRepository 的⽅式
1.5 MongoDB集群⾼可⽤
1.5.1 MongoDB主从复制架构原理和缺陷
master-slave架构中master节点负责数据的读写,slave没有写⼊权限只负责读取数据。
1.5.2 复制集replica sets
复制集是由⼀组拥有相同数据集的mongod实例做组成的集群。
复制集是⼀个集群,它是2台及2台以上的服务器组成,以及复制集成员包括Primary主节点,secondary从节点 和投票节点。
复制集提供了数据的冗余备份,并在多个服务器上存储数据副本,提⾼了数据的可⽤性,保证数据的安全性。
1.5.3 分⽚集群 Shard Cluster
分⽚(sharding)是MongoDB⽤来将⼤型集合⽔平分割到不同服务器(或者复制集)上所采⽤的⽅法。
不需要功能强⼤的⼤型计算机就可以存储更多的数据,处理更⼤的负载。
1.6 MongoDB安全认证
MongoDB 默认是没有账号的,可以直接连接,⽆须身份验证。实际项⽬中肯定是要权限验证的,否则后果不堪设
想。从2016年开始 发⽣了多起MongoDB⿊客赎⾦事件,⼤部分MongoDB安全问题 暴露出了安全问题的短板其实
是⽤户,⾸先⽤户对于数据库的安全不重视,其次⽤户在使⽤过程中可能没有养成定期备份的好习惯,最后是企业
可能缺乏有经验和技术的专业⼈员。所以对MongoDB进⾏安全认证是必须要做的。
1.6.1 ⽤户相关操作
1.6.1.1 切换到admin数据库对⽤户的添加
use admin;
db.createUser(userDocument):⽤于创建 MongoDB 登录⽤户以及分配权限的⽅法
1.6.1.2 修改密码
db.changeUserPassword( ‘root’ , ‘rootNew’ );
1.6.1.3 ⽤户添加⻆⾊
db.grantRolesToUser( ‘⽤户名’ , [{ role: ‘⻆⾊名’ , db: ‘数据库名’}])
1.6.1.4 以auth ⽅向启动mongod
./bin/mongod -f conf/mongo.conf --auth
(也可以在mongo.conf 中添加auth=true 参数)
1.6.1.5 验证⽤户
db.auth(“账号”,“密码”)
1.6.1.6 删除⽤户
db.dropUser(“⽤户名”)
1.6.2 ⻆⾊
1.6.2.1 数据库内置的⻆⾊
1.6.2.2 各个类型⽤户对应的⻆⾊
1.6.3 单机安全认证实现流程
1.6.4 分⽚集群安全认证