MongoDB备份与还原
备份恢复工具介绍
1)mongoexport/mongoimport
2)mongodump/mongorestore
备份工具区别
mongoexport/mongoimport 导入/导出的是JSON格式或者CSV格式
mongodump/mongorestore 导入/导出的是BSON格式。二进制方式,速度快
1)JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
2)在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。
3)JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。
应用场景
mongoexport/mongoimport:json csv
1)异构平台迁移 mysql <---> mongodb
2)同平台,跨大版本:mongodb 3 ----> mongodb 4
mongodump/mongorestore
日常备份恢复时使用
导出工具mongoexport
Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。
可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。
1)版本差异较大
2)异构平台数据迁移
mongoexport具体用法如下:
mongoexport --help
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-f:指明要导出那些列
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
--authenticationDatabase admin
导入工具mongoimport
Mongodb中的mongoimport工具可以把一个特定格式文件中的内容导入到指定的collection中。该工具可以导入JSON格式数据,也可以导入CSV格式数据。
mongoimport具体用法如下:
mongoimport --help
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-f:指明要导入那些列
-j:并行多开线程,默认4个
实验环境

192.168.8.5安装好MongoDB
192.168.8.6安装好MySQL
实验步骤
1、安装备份工具(MongoDB)
将mongodb-database-tools-rhel70-x86_64-100.3.1.tgz包拖入/root目录
tar xf mongodb-database-tools-rhel70-x86_64-100.3.1.tgz
cd mongodb-database-tools-rhel70-x86_64-100.3.1/bin/
cp * /mongodb/bin/
chown -R mongod.mongod /mongodb/
2、创建超级管理员root用户(MongoDB)
su - mongod
mongo
use admin

db.createUser(
{
user: "root",
pwd: "root123",
roles: [ { role: "root",db: "admin" } ]
}
)

3、创建haha库和log集合并写入一万行数据(MongoDB)
use haha
db.createCollection("log")
for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mysql","age":6,"date":new Date()})}
db.log.count()

4、将log集合备份成json格式文件(MongoDB)
mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d haha -c log -o /mongodb/log.json

注:备份文件的名字可以自定义,默认导出了JSON格式的数据。
5、恢复json格式备份文件“log.json”到log1集合中(MongoDB)
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d haha -c log1 /mongodb/log.json

登录查看数据
mongo --port 27017 admin
use haha

show tables

db.log1.count()

db.log1.find()

6、将log集合备份成csv格式文件(csv格式适合跨平台迁移,迁移到MySQL)(MongoDB)
如果需要导出CSV格式的数据,则需要使用--type=csv参数指定导入格式
mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d haha -c log --type=csv -f uid,name,age,date -o /mongodb/log.csv

7、恢复csv格式备份文件(MongoDB)
如果要导入CSV格式文件中的内容,则需要使用--type=csv参数指定导入格式
方法1:
恢复csv格式备份文件“log.csv”到log2集合中
注意:csv格式的文件头行,有列名字
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d haha -c log2 --type=csv --headerline --file /mongodb/log.csv
--headerline:指明第一行是列名,不需要导入。

登录查看数据
mongo --port 27017 admin
use haha

show tables

db.log2.count()

db.log2.find()

方法2:
恢复csv格式备份文件“log1.csv”到log3集合中
注意:csv格式的文件头行,有列名字
备份导出的csv格式的数据备份文件
cd /mongodb/
cp log.csv log1.csv
vim log1.csv
删除第一行红线部分内容:

mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d haha -c log3 --type=csv -f id,name,age,date --file /mongodb/log1.csv
这时就不用指定--headerline参数指明第一行是列名,不需要导入,需要指定导入的列名

登录查看数据
mongo --port 27017 admin
use haha

show tables

db.log3.count()

db.log3.find()

异构平台迁移数据
MySQL ----> MongoDB
1、修改MySQL配置文件,开启安全路径(MySQL)
vim /etc/my.cnf
添加:
secure-file-priv=/tmp
限制文件的读取和写入只能在设定的文件夹中

重启MySQL
systemctl restart mysqld
2、导入world.sql数据库(MySQL)
将world.sql文件拖入/root目录
登录MySQL导入world数据库
source /root/world.sql
3、导出csv格式的world库中的city表,导出文件为city.csv(MySQL)
MySQL导出csv格式语法:
select * from world.city
into outfile '/tmp/city.csv'
fields terminated by ',' ——定义字段间以“,”分隔
optionally enclosed by '"' ——定义字符串使用双引号括起来
escaped by '"' ——定义字段中使用的转义符为“””
lines terminated by '\r\n'; ——定义行分隔符为换行符
select * from world.city into outfile '/tmp/city.csv' fields terminated by ',';
fields terminated by ',' :字段间以“,”分隔

4、将数据备份文件city.csv拷贝到MongoDB(MySQL)
scp /tmp/city.csv root@192.168.8.5:/tmp/
5、查看city表结构,MongoDB导入数据使用(MySQL)
desc world.city;

6、在MongoDB导入数据备份文件city.csv(MongoDB)
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -c city --type=csv -f ID,Name,CountryCode,District,Population --file /tmp/city.csv
必须指定列名

7、登录查看数据(MongoDB)
mongo --port 27017
show dbs

use world
show tables

db.city.count()

db.city.find()

当MySQL需要迁移到MongoDB的表太多时,使用下面语句生成库中所有表的备份文件(MySQL)
select concat("select * from ",table_schema,".",table_name ," into outfile '/tmp/",table_schema,"_",table_name,".csv' fields terminated by ',';") from information_schema.tables where table_schema ='world';

将MongoDB中以csv格式备份的表导入MySQL中
1、将MongoDB的数据备份文件log.csv拷贝到MySQL(MongoDB)
scp /mongodb/log.csv root@192.168.8.6:/tmp/
2、查看log.csv文件(MySQL)
vim /tmp/log.csv
删除第一行内容

第一行内容为列名,在备份csv格式时会记录列名,在导入MySQL时需要删除
3、必须先创建相应的库和表(MySQL)
create database haha;
use haha;
创表时需要和备份文件中的列名相同
create table log(uid int,name varchar(10),age int,date varchar(30));

4、导入log.csv文件(MySQL)
MySQL导入csv格式语法:
load data infile '/tmp/log.csv'
into table log
fields terminated by ',' ——定义字段间以“,”分隔
optionally enclosed by '"' ——定义字符串使用双引号括起来
escaped by '"' ——定义字段中使用的转义符为“””
lines terminated by '\r\n'; ——定义行分隔符为换行符
load data infile '/tmp/log.csv' into table log fields terminated by ',';

查看数据
select * from log;

mongodump和mongorestore介绍
mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。但使用mongodump产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,则备份出来的文件可能不完全和Mongodb实时数据相等。另外在备份时可能会对其它客户端性能产生不利的影响。
mongodump用法如下:
mongodump --help
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
-j:并行备份的线程数默认是4
--oplog 备份的同时备份oplog
mongodump和mongorestore基本使用
1、创建备份文件存放目录(MongoDB)
mkdir /mongodb/backup /mongodb/backup{1..5}
2、全库备份(MongoDB)
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup

查看备份文件

3、备份单库world库(MongoDB)
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -o /mongodb/backup1

查看备份文件

4、备份haha库下的log集合(MongoDB)
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d haha -c log -o /mongodb/backup2

查看备份文件

5、压缩备份全库(MongoDB)
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup3 --gzip

对比全库备份和压缩全库备份的占用大小


压缩备份后占用空间更小
6、压缩备份单库haha库(MongoDB)
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d haha -o /mongodb/backup4 --gzip

7、压缩备份单表,world库中的city集合(MongoDB)
mongodump -uroot -p root123 --port 27017 --authenticationDatabase admin -d world -c city -o /mongodb/backup5 --gzip

8、恢复world库(MongoDB)
先删除world库
mongo --port 27017 admin
show dbs

use world
db.dropDatabase()

show dbs

恢复
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d world /mongodb/backup/world/

查看数据库
mongo --port 27017 admin
show dbs

9、恢复压缩备份haha库下的log集合(MongoDB)
删除haha库下的log集合
use haha
show tables
db.log.drop()
show tables

恢复
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d haha -c log --gzip /mongodb/backup3/haha/log.bson.gz

查看数据
mongo --port 27017 admin
use haha
show tables

mongodump和mongorestore高级企业应用(oplog)
注意:这是replica set或者master/slave模式专用
oplog介绍
在replica set中oplog是一个定容集合(capped collection),它的默认大小是磁盘空间的5%(可以通过--oplogSizeMB参数修改),位于local库的db.oplog.rs,有兴趣可以看看里面到底有些什么内容。其中记录的是整个mongod实例一段时间内数据库的所有变更(插入/更新/删除)操作。当空间用完时新记录自动覆盖最老的记录。其覆盖范围被称作oplog时间窗口。需要注意的是,因为oplog是一个定容集合,所以时间窗口能覆盖的范围会因为你单位时间内的更新次数不同而变化。
实验环境
三台MongoDB或者实例,本人使用三个实例分别为(28017、28018、28019)
实验步骤
1、创建多实例MongoDB目录(MongoDB)
mkdir -p /mongodb/280{17..19}/{conf,data,log}
2、创建配置文件(MongoDB)
cat > /mongodb/28017/conf/mongod.conf <<EOF
systemLog:
destination: file
path: /mongodb/28017/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /mongodb/28017/data
directoryPerDB: true
#engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
net:
bindIp: 192.168.8.5,127.0.0.1
port: 28017
replication:
oplogSizeMB: 2048
replSetName: my_repl
EOF
cp /mongodb/28017/conf/mongod.conf /mongodb/28018/conf/
cp /mongodb/28017/conf/mongod.conf /mongodb/28019/conf/
sed 's#28017#28018#g' /mongodb/28018/conf/mongod.conf -i
sed 's#28017#28019#g' /mongodb/28019/conf/mongod.conf -i
3、启动MongoDB多实例(MongoDB)
mongod -f /mongodb/28017/conf/mongod.conf
mongod -f /mongodb/28018/conf/mongod.conf
mongod -f /mongodb/28019/conf/mongod.conf
netstat -anpt | grep mongod

4、配置复制集(1主2从)(MongoDB)
mongo -port 28017 admin
config = {_id: 'my_repl', members: [
{_id: 0, host: '192.168.8.5:28017'},
{_id: 1, host: '192.168.8.5:28018'},
{_id: 2, host: '192.168.8.5:28019'}]
}

初始化副本集
rs.initiate(config)

自动选择主从
输入命令前面变成复制集的状态,一开始是SECONARY等待变成PRIMARY

查看复制集状态
rs.status()



5、查看操作日志(MongoDB)
use local
db.oplog.rs.find().pretty()
6、查看当前oplog时间窗口预计值(MongoDB)
rs.printReplicationInfo()

oplog 配合mongodump实现热备
背景:
每天0点全备,oplog恢复窗口为48小时。某天,上午10点base.c1业务表被误删除。
恢复思路:
1.停应用
2.找测试库
3.恢复昨天晚上全备
4.截取全备之后到base.c1误删除时间点的oplog,并恢复到测试库
5.将误删除表导出,恢复到生产库
1、先写入原始数据(MongoDB)
mongo --port 28017
use base
for(var i = 1;i < 20;i++) { db.c1.insert({a:i});}

查看数据
show tables

db.c1.count()

2、进行全备(MongoDB)
创建备份目录
mkdir /mongodb/oplog
mongodump --port 28017 --oplog -o /mongodb/oplog/
--oplog功能:在备份同时将备份过程中产生的日志进行备份

查看备份文件

oplog.bson是自动备份的日志
3、再次写入数据(MongoDB)
mongo --port 28017
use base
for(var i = 1;i < 20;i++) { db.c1.insert({a:i});}

查看数据
db.c1.count()

4、模拟上午10点误删除c1表(MongoDB)
db.c1.drop()

5、备份oplog.rs表(MongoDB)
mongodump --port 28017 -d local -c oplog.rs -o /mongodb/oplog/

6、截取oplog(MongoDB)
mongo --port 28017
use local
查看oplog日志中的其他操作“i”是insert操作,“u”是update操作,“d”是delete操作,“c”是其他操作
db.oplog.rs.find({op:"c"}).pretty()

获取到oplog误删除时间点位置“1736930382”
7、恢复全备+oplog日志(MongoDB)
cd /mongodb/oplog/local/
cp oplog.rs.bson ../oplog.bson

mongorestore --port 28017 --oplogReplay --oplogLimit "1736930382:1" --drop /mongodb/oplog/

8、查看数据(MongoDB)
mongo --port 28017
use base
show tables
db.c1.count()

误删除数据已恢复
分片集群的备份思路
1、你要备份什么?
config server
shard 节点
复制集单独进行备份
2、备份有什么困难和问题
1)chunk迁移的问题
人为控制在备份的时候,避开迁移的时间窗口
2)shard节点之间的数据不在同一时间点。
选业务量较少的时候
Ops Manager 收费软件:监控免费,备份收费
相关文章:
MongoDB备份与还原
备份恢复工具介绍 1)mongoexport/mongoimport 2)mongodump/mongorestore 备份工具区别 mongoexport/mongoimport 导入/导出的是JSON格式或者CSV格式 mongodump/mongorestore 导入/导出的是BSON格式。二进制方式,速度快 1)…...
计算机:基于深度学习的Web应用安全漏洞检测与扫描
目录 前言 课题背景和意义 实现技术思路 一、算法理论基础 1.1 网络爬虫 1.2 漏洞检测 二、 数据集 三、实验及结果分析 3.1 实验环境搭建 3.2 模型训练 最后 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,…...
postgresql14编译安装脚本
#!/bin/bash####################################readme################################### #先上传postgresql源码包,再配置yum源,然后执行脚本 #备份官方yum源配置文件: #cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS…...
Java 大视界 -- Java 大数据在智能安防视频摘要与检索技术中的应用(128)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
部署项目至服务器:响应时间太长,无法访问此页面?
在我们部署项目到服务器上的时候,一顿操作猛如虎,打开页面..... 这里记录一下这种情况是怎么回事。一般就是服务器上的安全组没有放行端口。 因为我是用宝塔进行项目部署的。所以遇到这种情况,要去操作两边(宝塔and服务器所属平台…...
如何搭建一个适配微信小程序,h5,app的uni-app项目
在vscode搭建 uni-app 项目(Vue 3 Vite Pinia uView Plus) 一、环境准备 1. 安装 Node.js 确保已安装 Node.js(需≥14版本),可通过以下命令检查版本: node -v2. 安装 VSCode 从 VSCode 官网 下载并…...
【数据结构】List介绍
目录 1. 什么是List 2. 常见接口介绍 3. List的使用 1. 什么是List 在集合框架中,List是一个接口,继承自Collection。此时extends意为拓展 Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示&…...
vs2022用git插件重置--删除更改(--hard)后恢复删除的内容
1、先到项目工程中打开需要恢复的分支。 2、进入代码管理根目录文件夹。 3、在根目录文件夹点右键,点git bash here 正常情况下如果git目录权限足够,是可以如上图所示显示当前分支和当前目录的。 在git权限不足的情况下会出现如下提示: …...
【C++】【数据结构】链表与线性表
线性表和链表优缺点及适用场景 线性表(以数组为例) 优点:随机访问效率高,可通过下标直接访问元素,时间复杂度为 O (1);存储密度大,内存连续存储,空间利用率高。缺点:插入…...
vscode接入DeepSeek 免费送2000 万 Tokens 解决DeepSeek无法充值问题
1. 在vscode中安装插件 Cline 2.打开硅基流动官网 3. 注册并登陆,邀请码 WpcqcXMs 4.登录后新建秘钥 5. 在vscode中配置cline (1) API Provider 选择 OpenAI Compatible ; (2) Base URL设置为 https://api.siliconflow.cn](https://api.siliconfl…...
【MySQL】用户管理和权限
欢迎拜访:雾里看山-CSDN博客 本篇主题:【MySQL】用户管理和权限 发布时间:2025.3.12 隶属专栏:MySQL 目录 引言用户用户信息创建用户语法案例 修改用户密码语法案例 删除用户语法案例 权限权限列表查看和刷新用户的权限给用户授权…...
3ds Max 快捷键分类指南(按功能划分)
以下整理了 3ds Max 常用快捷键,按核心功能模块分类,适用于 建模、动画、渲染 等全流程操作。 一、视图操作 快捷键功能Alt W最大化当前视图G隐藏/显示栅格F3线框/实体显示切换F4显示边面(实体线框)Z聚焦选中对象到视图中心Ctrl…...
npm、pnpm、cnpm、yarn、npx之间的区别
文章目录 区别特点pnpmyarncnpm 关键解读如何选择代码示例安装依赖运行命令 区别 特性npmyarnpnpmcnpmnpx核心定位Node.js 默认包管理增强稳定性与性能高效存储与严格隔离国内镜像加速工具临时执行包命令依赖存储方式扁平化 node_modules扁平化 lock 文件全局硬链接 符号链接…...
指令微调 (Instruction Tuning) 与 Prompt 工程
引言 预训练语言模型 (PLMs) 在通用语言能力方面展现出强大的潜力。然而,如何有效地引导 PLMs 遵循人类指令, 并输出符合人类意图的响应, 成为释放 PLMs 价值的关键挑战。 指令微调 (Instruction Tuning) 和 Prompt 工程 (Prompt Engineerin…...
Linux学习(十五)(故障排除(ICMP,Ping,Traceroute,网络统计,数据包分析))
故障排除是任何 Linux 用户或管理员的基本技能。这涉及识别和解决 Linux 系统中的问题。这些问题的范围包括常见的系统错误、硬件或软件问题、网络连接问题以及系统资源的管理。Linux 中的故障排除过程通常涉及使用命令行工具、检查系统和应用程序日志文件、了解系统进程&#…...
【大模型】硅基流动对接DeepSeek使用详解
目录 一、前言 二、硅基流动介绍 2.1 硅基流动平台介绍 2.1.1 平台是做什么的 2.2 主要特点与功能 2.2.1 适用场景 三、硅基流动快速使用 3.1 账户注册 3.2 token获取 3.2.1 获取token技巧 四、Cherry-Studio对接DeepSeek 4.1 获取 Cherry-Studio 4.2 Cherry-Stud…...
UE5.5 Niagara 发射器粒子更新模块
Particle State (粒子状态)模块 Particle State 主要用于控制粒子的生存状态,包括死亡、消失、响应事件等。 Particle State Kill Particles When Lifetime Has Elapsed 当粒子的生命周期结束时,销毁这些粒子。 Lifetime &…...
机器学习(吴恩达)
一, 机器学习 机器学习定义: 计算机能够在没有明确的编程情况下学习 特征: 特征是描述样本的属性或变量,是模型用来学习和预测的基础。如: 房屋面积, 地理位置 标签: 监督学习中需要预测的目标变量,是模型的输出目标。如: 房屋价格 样本: 如: {面积100㎡…...
JavaWeb-servlet6中request和response的使用
HttpServletRequest HttpServletRequest 继承自 ServletRequest。客户端浏览器发出的请求被封装成为一个 HttpServletRequest对象。 对象包含了客户端请求信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统…...
Django与视图
我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲视图 在web应用的MVC结构中,视图一般包含模板和表单,用来给浏览器生成响应。在实际处理过程当中,视图会根据请求的参数从数据源当中找到数据…...
RabbitMQ从入门到实战-2
文章目录 Java客户端快速入门WorkQueue(多消费)能者多劳配置 交换机fanout交换机案例 Direct交换机Topic交互机 声明队列和交互机(IDEA中)基于Bean声明队列和交换机基于注解声明(推) 消息转换器配置Json消息转换器 业务改造&#…...
【每日八股】计算机网络篇(四):HTTP
目录 HTTP 与 HTTPS 的区别?HTTPS 加密与认证的过程?ClientHelloServerHello客户端回应服务端回应 HTTPS 一定安全可靠吗?HTTPS 状态码的含义?HTTP 缓存有哪些实现方式?HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的区…...
Mac 配置 Maven JDK
不使用 Homebrew,创建指定版本 JDK 1、官网下载指定版本并安装……省略 2、vi ~/.zshrc 同时要检查 bash_profile 是否存在。 if [ -f ~/.bash_profile ] ; thensource ~/.bash_profile fiJAVA_HOME_11/Library/Java/JavaVirtualMachines/jdk-11.0.1…...
测试大语言模型在嵌入式设备部署的可能性-ollama本地部署测试
前言 当今各种大语言模型百花齐放,为了方便使用者更加自由的使用大模型,将大模型变成如同棒球棍一样每个人都能用,并且顺手方便的工具,本地私有化具有重要意义。 本次测试使用ollama完成模型下载,过程简单快捷。 1、进…...
Ubuntu通过Ollama部署deepseek和千问
一、准备文件 本地服务器是Ubuntu20.04,输入命令uname -a即可查看 部署方式有多样,点击Ollama访问官网 可复制命令直接粘贴下载,但是过程比较慢,所以我推荐下面这种方式 从githubReleases ollama/ollama GitHub上下载ollama的…...
责任链模式的C++实现示例
核心思想 责任链模式是一种行为设计模式,允许多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合。请求沿着处理链传递,直到某个对象处理它为止。 解决的问题 解耦请求发送者与处理者:请求的发送者无需知道具…...
微服务新手入门
一、微服务概念 微服务是一种软件架构风格,ta是以专注于单一职责的很多小型项目为基础,组合出复杂的大型应用。 微服务 - 服务拆分 - 远程调用 - 服务治理 - 请求路由 - 身份认证 - 配置管理 - 服务保护 - 分布式事务 - 异步通信 - 消息可靠性 - 延迟消…...
第十一届蓝桥杯单片机国赛
什么?4T模拟赛和省赛做起来轻轻松松?不妨来挑战一下第十一届国赛,这一届的国赛居然没考超声波、串口通信!只要你正确地理解了题目的意思,规避出题人挖的坑,拿个国一轻轻松松。 附件:第十一届蓝桥…...
【eNSP实战】MSTP与VRRP配合使用
拓扑图 要求: PC1划分在vlan10;PC2划分在vlan20;主机IP和网关如图所示,这里不做展示LSW1配置vlan10的根交换机,vlan20的备根交换机;LSW2配置vlan20的根交换机,vlan10的备根交换机LSW1配置vlan…...
【每日学点HarmonyOS Next知识】tab拦截、组件方法做参数、自定义组件链式调用、多次观察者监听、横竖屏切换
1、HarmonyOS Tab组件里的tabBar点击如何拦截,根据情况判断是否允许切换tab? Tab组件里的tabBar点击如何拦截,根据情况判断是否允许切换tab 暂时没有tabBar点击拦截功能实现,可以使用TabsController自定义页签以及并在其中添加事…...
