MongoDB

本文深入介绍了MongoDB,包括其NoSQL体系结构、BSON数据格式、命令操作、数据 CRUD、聚合操作、索引原理、安全认证以及高可用性设置。讨论了MongoDB在不同场景下的适用性,提供了SpringBoot访问MongoDB的两种方式,并强调了安全性,特别是用户认证和集群安全。此外,还概述了MongoDB在主从复制和分片集群中的角色,以提升数据冗余和可用性。
摘要由CSDN通过智能技术生成

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 分⽚集群安全认证


在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值