个人主页:SueWakeup
系列专栏:为祖国的科技进步添砖Java
个性签名:保留赤子之心也许是种幸运吧
凯楠📸 - 不夜长安
目录
MongoDB 相关
数据库排行榜单
MongoDB 中文官网
菜鸟教程 MongoDB
MongoDB 官方认证
什么是 MongoDB
编辑发展历程
编辑分布式
编辑NoSQL
什么是分布式
分布式文件存储概述
CAP 定理
CAP理论的核心
什么是 NoSQL
NoSQL概述
ACID vs BASE
BASE理论的核心思想
为什么使用 MongoDB
MongoDB 的特点
解决 MySQL 的 “三高” 问题
MongoDB 的应用场景
MongoDB 的实际应用
如何使用 MongoDB
安装 MongoDB
编辑rpm 安装
1. 点击下方网址找到相应的系统安装 rpm 软件包。
2. 创建空目录/opt/mongodb用来存放安装包,使用 Xftp 或者 FinShell 将软件包上传。
3. 使用 rpm –ivh [软件包名] 依次下载 mongos、server、shell。
编辑
编辑rpm 卸载
1. 使用 systemctl stop mongod 停止 MongoDB 服务。
2. 使用 rpm –qa |grep mongodb 查找安装的包。
3. 分别使用 rpm –e mongodb-org-shell(mongos、server)删除关于MongoDB 的包。
4. 使用 rm -r /var/lib/mongo 删除 MongoDB 的数据目录。(注:系统会多次提示是否删除,可使用 rm –f 命令强制删除,不会弹出多次询问,谨慎使用)
5. 使用 rm -r /var/log/mongodb 删除 MongoDB 的日志记录。
6. 使用 rm /etc/mongod.conf 删除 MongoDB 的配置文件,前两条命令会将文件移至 /etc 目录下,如下图所示。
7. 使用 systemctl status mongod 检验成果。
编辑yum 安装
1. 使用 rpm --import https://www.mongodb.org/static/pgp/server-4.4.asc 导入 MongoDB 的 GPA 公钥,确保下载的安装包是官方的。
2. 使用 vi /etc/yum.repos.d/mongodb-org-4.4.repo 编辑MongoDB 4.4 版本的仓库配置。
3. 使用 yum install -y mongodb-org 安装 MongoDB。
编辑4. 安装成功后使用 systemctl start mongod 启动服务并使用 systemctl status mongod 查看服务状态。
编辑yum 卸载
1. 使用 systemctl stop mongod 停止服务。
2. 使用 yum remove mongodb-org* 卸载之前安装的包。
3. 分别使用 rm -r /var/lib/mongodb 和 rm -r /var/log/mongodb 删除 MongoDB 的数据目录和日志记录。
4. 卸载完成后使用 systemctl status mongod 检查成果。编辑
编辑docker 安装
1. 使用 systemctl start docker 启动 Docker。
2. 使用 docker pull mongo:4.4 或 latest 拉取 MongoDB 镜像。
3. 使用 docker run --name 【容器名】 -d mongo 运行 MongoDB 容器。
4. 使用 docker exec -it 【容器名】 mongo 进入 MongoDB 的 Shell。
编辑docker 卸载
1. 使用 docker ps 查看当前正在运行的容器。
2. 使用 docker stop 【容器名】停止容器的运行。
3. 使用 docker rm 【容器名】删除容器。
4. 使用 docker ps –-all 查看所有容器。
配置 MongoDB
1. 使用 systemctl start mongod.service 启动服务。默认无认证登录方式。
2. 使用 systemctl status mongod.service 查看服务状态。
3. 使用 mongo admin 进入 MongoDB 的 【admin】数据库。没有指定数据库,MongoDB 会使用一个名为【test】的默认数据库,该数据库存储在 data 目录中。
4. 进入成功后在最后一行使用 “>”表示命令行光标起始位置。
5. 输入db.createUser({user:'mongoAdmin',pwd:'123456',roles:[{role:'userAdminAnyDatabase',db:'admin'},'readWriteAnyDatabase']})创建用户
6. “user”是新用户的名称,“pwd”是密码。
7. “role”是权限,“db”是数据库名。如“role”:“readWrite”,“db”:“myDatabase”是对“myDatabase”数据库具有读写权限。
8. 常见的 db:admin(管理用户和角色)、local(存储本地集合)、config(存储分片集群的配置信息)。
9. 使用 db.getUsers() 查看当前系统上的所有用户信息。
10. 使用 db.auth(‘用户名’,‘密码’)进行认证,成功返回“1”。注:开启登录认证后,需要使用 mongo admin 进入【admin】数据库才可以使用 db.auth 命令进行登录。
11. 使用 ctrl + c 退出 MongoDB 进程。
12. 删除用户命令:db.dropUser(‘用户名’)
开启登录认证与远程登录
1. 在 Linux 命令行输入 vi /etc/mongod.conf 进入 MongoDB 的配置文件。
2. 找到 network 配置与 security 配置,配置效果如下图所示。
3. 保存后,使用 systemctl restart mongod.service、systemctl status mongod.service 重启 mongoDB服务
4. 开启登录认证后的成功案例,认证后使用 db.getUsers() 验证是否登录。
5. 失败案例,提示权限不足。
编辑docker 配置 MongoDB
使用环境变量配置
使用配置文件 mongod.conf
GUI 可视化界面
远程登录说明
1. 使用上方网址下载图形界面化软件。
2. 在 Linux 系统中已经配置好 MongoDB 的网络接口和登录认证。
3. Linux 的网卡配置中有仅主机模式。
MongoDB 的 CURD
MongoDB 概念解析
Create 创建
Update 更新
Read 读取
Delete 删除
Java 连接 MongoDB
1. 添加 Maven 仓库依赖坐标
2. 创建 MondoDBConn.java 工具类
手机端浏览本文章可能会出现 “目录”无法有效展示的情况,还请谅解!
MongoDB 相关
数据库排行榜单
===》》》数据库排行榜单《《《===https://db-engines.com/en/ranking
MongoDB 中文官网
===》》》MongoDB 中文官网《《《===https://mongodb.net.cn/manual/tutorial/insert-documents/
菜鸟教程 MongoDB
===》》》菜鸟教程 MongoDB《《《===https://www.runoob.com/mongodb/mongodb-intro.html
MongoDB 官方认证
===》》》官方认证《《《===
===》》》关于认证的那些事《《《===
什么是 MongoDB
发展历程
- 2007年10月,MongoDB由10gen团队所发展。2009年2月首度推出。
- 2012年06月06日,MongoDB 2.0.6 发布,分布式文档数据库。
- 截至2024年4月23日,MongoDB 社区版的最新版本为 7.0.8 。
分布式
- 由C++语言编写,基于分布式文件存储的数据库。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
NoSQL
- MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
什么是分布式
分布式文件存储概述
- 分布式系统是由多个独立计算机(通常是网络上的计算机)组成的系统,这些计算机通过网络进行通信和协作,以共同完成某个任务或提供某种服务。
- 分布式文件存储是分布式系统的一种应用,与传统的集中式文件系统相比,分布式文件存储具有更高的可扩展性和容错性。
一文读懂分布式架构知识体系(内含超全核心知识大图)https://developer.aliyun.com/article/721007#slide-1
SueWakeup - 神马是分布式?
CAP 定理
CAP 定理又称布鲁尔定理,对于一个分布式系统而言,不可能同时满足以下三点:
- 一致性(Consistency):所有节点在同一时间具有相同的数据。
- 可用性(Availability):保证每个请求不管成功或者失败都有响应。
- 分区容错性(Partition tolerance):系统中任意信息的丢失或失败不会影响系统的继续运作。
CAP理论的核心
- 一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
w3resource - NoSQLhttps://www.w3resource.com/mongodb/nosql.php
什么是 NoSQL
NoSQL概述
- NoSQL,指的是非关系型的数据库。也可认作是 Not Only SQL 的缩写,意为不仅限于 SQL。
- 2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是" select fun, profit from real_world where relational=false; "。因此,对NoSQL最普遍的解释是"非关联型的",强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。
ACID vs BASE
ACID | BASE |
原子性(Atomicity) | 基本可用(Basically Available) |
一致性(Consistency) | 软状态/柔性事务(Soft state) |
隔离性(Isolation) | 最终一致性 (Eventual consistency) |
持久性 (Durable) |
- 原子性:事务是数据库的最小执行单元,事务的原子性确保数据库操作过程中的所有步骤全部成功或者全部失败
- 一致性:数据修改前和修改后的状态保持一致
- 隔离性:一个事务的执行不会被其他事务干扰,一个事务内部的操作和使用的数据,在并发中对其他事务是隔离的
- 持久性:事务一旦被提交,将对数据库中的数据的改变是永久性的
BASE理论的核心思想
在分布式系统中,由于网络延迟、节点故障等因素,数据的一致性可能无法实时保证,但是可以保证数据的最终一致性。
为什么使用 MongoDB
MongoDB 的特点
- 业务并发访问量大
- 存储的数据格式灵活,不固定,或属于半结构化数据
- TB级以上的海量数据存储,且数据量不断增加
- 无需要跨文档或跨表的事务及复杂的join查询支持
解决 MySQL 的 “三高” 问题
- 对数据库高并发写入需求
- 对海量数据高效率存储访问需求
- 对数据库高扩展和高可用的需求
MongoDB 的应用场景
- 社交场景,比如朋友圈,附近的人的地点的存储
- 游戏场景,比如用户当前装备,得分等
- 物流场景,比如快递的位置,状态,途径
- 视频场景,比如直播中的点赞数和互动留言等
MongoDB 的实际应用
- 纽约时报,领先的在线新闻门户网站之一
- CERN,著名的粒子物理研究所,欧洲核子研究中心大型强子对撞机的数据使用 MongoDB。
- spike.com,一个音乐电视网络的联营公司, spike.com使用的 MongoDB。
如何使用 MongoDB
安装 MongoDB
- Linux CentOS 7 操作系统下的三种安装方式
rpm 安装
- 预先编译好的二进制软件包,不会自动处理软件包之间的依赖关系,会报错,提示缺少依赖需手动安装依赖项,过程繁琐。
1. 点击下方网址找到相应的系统安装 rpm 软件包。
MongoDB官方下载https://www.mongodb.com/try/download/community
2. 创建空目录/opt/mongodb用来存放安装包,使用 Xftp 或者 FinShell 将软件包上传。
3. 使用 rpm –ivh [软件包名] 依次下载 mongos、server、shell。
rpm 卸载
1. 使用 systemctl stop mongod 停止 MongoDB 服务。
2. 使用 rpm –qa |grep mongodb 查找安装的包。
3. 分别使用 rpm –e mongodb-org-shell(mongos、server)删除关于MongoDB 的包。
4. 使用 rm -r /var/lib/mongo 删除 MongoDB 的数据目录。(注:系统会多次提示是否删除,可使用 rm –f 命令强制删除,不会弹出多次询问,谨慎使用)
5. 使用 rm -r /var/log/mongodb 删除 MongoDB 的日志记录。
6. 使用 rm /etc/mongod.conf 删除 MongoDB 的配置文件,前两条命令会将文件移至 /etc 目录下,如下图所示。
7. 使用 systemctl status mongod 检验成果。
yum 安装
- 自动化软件的安装、更新、配置和移除,无需担心依赖关系或手动下载和安装软件包。yum 保存的是 rpm 包。
1. 使用 rpm --import https://www.mongodb.org/static/pgp/server-4.4.asc 导入 MongoDB 的 GPA 公钥,确保下载的安装包是官方的。
2. 使用 vi /etc/yum.repos.d/mongodb-org-4.4.repo 编辑MongoDB 4.4 版本的仓库配置。
3. 使用 yum install -y mongodb-org 安装 MongoDB。
4. 安装成功后使用 systemctl start mongod 启动服务并使用 systemctl status mongod 查看服务状态。
yum 卸载
1. 使用 systemctl stop mongod 停止服务。
2. 使用 yum remove mongodb-org* 卸载之前安装的包。
3. 分别使用 rm -r /var/lib/mongodb 和 rm -r /var/log/mongodb 删除 MongoDB 的数据目录和日志记录。
4. 卸载完成后使用 systemctl status mongod 检查成果。
docker 安装
- 侧重于整个应用环境的管理,以容器的形式封装、部署应用程序。docker 镜像仓库保存的是 docker 镜像。
1. 使用 systemctl start docker 启动 Docker。
2. 使用 docker pull mongo:4.4 或 latest 拉取 MongoDB 镜像。
3. 使用 docker run --name 【容器名】 -d mongo 运行 MongoDB 容器。
4. 使用 docker exec -it 【容器名】 mongo 进入 MongoDB 的 Shell。
docker 卸载
1. 使用 docker ps 查看当前正在运行的容器。
2. 使用 docker stop 【容器名】停止容器的运行。
3. 使用 docker rm 【容器名】删除容器。
4. 使用 docker ps –-all 查看所有容器。
配置 MongoDB
- 不同的配方,同样的味道~
1. 使用 systemctl start mongod.service 启动服务。默认无认证登录方式。
2. 使用 systemctl status mongod.service 查看服务状态。
3. 使用 mongo admin 进入 MongoDB 的 【admin】数据库。没有指定数据库,MongoDB 会使用一个名为【test】的默认数据库,该数据库存储在 data 目录中。
4. 进入成功后在最后一行使用 “>”表示命令行光标起始位置。
5. 输入db.createUser({user:'mongoAdmin',pwd:'123456',roles:[{role:'userAdminAnyDatabase',db:'admin'},'readWriteAnyDatabase']})
创建用户
6. “user”是新用户的名称,“pwd”是密码。
7. “role”是权限,“db”是数据库名。如“role”:“readWrite”,“db”:“myDatabase”是对“myDatabase”数据库具有读写权限。
8. 常见的 db:admin(管理用户和角色)、local(存储本地集合)、config(存储分片集群的配置信息)。
9. 使用 db.getUsers() 查看当前系统上的所有用户信息。
10. 使用 db.auth(‘用户名’,‘密码’)进行认证,成功返回“1”。注:开启登录认证后,需要使用
mongo admin 进入【admin】数据库才可以使用 db.auth 命令进行登录。
11. 使用 ctrl + c 退出 MongoDB 进程。
12. 删除用户命令:db.dropUser(‘用户名’)
开启登录认证与远程登录
1. 在 Linux 命令行输入 vi /etc/mongod.conf 进入 MongoDB 的配置文件。
2. 找到 network 配置与 security 配置,配置效果如下图所示。
3. 保存后,使用 systemctl restart mongod.service、systemctl status mongod.service 重启 mongoDB服务
4. 开启登录认证后的成功案例,认证后使用 db.getUsers() 验证是否登录。
5. 失败案例,提示权限不足。
docker 配置 MongoDB
使用环境变量配置
- 设置初始的 root 用户、密码、数据库
docker run --name some-mongo -d \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=password \
-e MONGO_INITDB_DATABASE=mydatabase \
mongo
使用配置文件 mongod.conf
- 挂载自定义的 mongod.conf 到容器中实现配置
docker run --name some-mongo -d \
-v /etc/mongo/mongod.conf:/etc/mongo/mongod.conf \
-v /data/db:/data/db \
mongo --config /etc/mongo/mongod.conf
GUI 可视化界面
- 充分展现与 SQL 的不同
远程登录说明
studio3t官方下载https://studio3t.com/
1. 使用上方网址下载图形界面化软件。
2. 在 Linux 系统中已经配置好 MongoDB 的网络接口和登录认证。
3. Linux 的网卡配置中有仅主机模式。
MongoDB 的 CURD
- 常用语法
MongoDB 概念解析
MongoDB 与 MySQL 比较
- 文档的数据结构和 JSON 基本一样。
- 所有存储在集合中的数据都是 BSON 格式。
- BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
Create 创建
创建数据库:use dbname
如果数据库不存在,则创建数据库,否则切换到指定数据库。
在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档
(记录),集合才会真正创建。
通过 db 来查看当前使用的数据库
创建集合:db.createCollection(“集合名”)
插入文档:db.集合名.insert(document) || db.集合名.save(document)
Update 更新
更新文档:db.集合名.update({查询条件},{$set:{更新内容}},
{
upsert: <boolean>,
multi: <boolean>,
}
)
upsert: 默认为false ,如果查询不到数据,则把跟新输入插入
multi:默认为false,默认只改一条,true,更改多条
Read 读取
查看所有数据库:show dbs
admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
查看集合:show collections / show tables
删除文档:db.集合名称.remove( , { justOne: } )
非结构化显示所有文档:db.collection.find(query)
格式化显示所有文档:db.col.find().pretty()
Delete 删除
删除当前数据库:db.dropDatabase()
删除集合:db.集合名.drop()
删除文档:db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。
Java 连接 MongoDB
1. 添加 Maven 仓库依赖坐标
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mongodb/bson -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>4.2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
2. 创建 MondoDBConn.java 工具类
- 类似于 JDBC 连接 MySQL 数据库
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
public class MongoConn {
public static MongoClient mc =null;
public static MongoDatabase db = null;
//测试用例
public static void main(String[] args) {
GetConn();
//获取库中集合
MongoIterable<String> collist = db.listCollectionNames();
for(String s:collist) {
System.out.println("mongo数据库中的集合:"+s);
}
ConnClose();
}
//连接数据库
public static void GetConn() {
mc =new MongoClient("localhost",27017);
db = mc.getDatabase("Device");
}
//关闭连接
public static void ConnClose() {
mc.close();
}
}