【PostgreSQL使用】最新功能逻辑复制槽的failover,大数据下高可用再添利器
逻辑复制的failover
专栏内容:
- postgresql入门到进阶
- 手写数据库toadb
- 并发编程
个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.
✅ 🔥🔥🔥重大消息🔥🔥🔥 ❤️❤️❤️❤️ 关注公众号【开源无限】有更多数据库优质内容输出 ❤️❤️❤️❤️
一、概述
使用数据库除了存取数据快捷以外,还有一个非常重要的目的,就是它有一整套的机制来保障数据访问的高可用,持续性。
当然逻辑复制也不例外,当我们正在订阅的主库故障发生主备切换时,仍然希望数据库对象的变更订阅不会丢失,能持续收到发布者的消息。
这在以往的PostgreSQL版本中是没有的,最新的PostgreSQL 17版本终于完善了这一功能,逻辑复制支持了failover特性,提升了逻辑复制的高可用性。
本文通过搭建逻辑复制的failover部署,来试一试逻辑复制的failover倒底如何。
二、 热备集群部署
为了演示带failover的逻辑复制的高可用,首先需要部署一主一备的热备环境,采用流复制的方式对整个主库数据进行实时备份。如果要增加复制槽的备份,当然备库要相较于普通的流复制需要多一些配置,要采用复制槽方式,同时还要打开备份的反馈和复制槽同步开关。
为了有明显区分,在此之外第三个集簇,只对主库的一张表的变动进行订阅,这里采用了逻辑复制的方式,并使用了带有failover的逻辑复制槽。带有failover的逻辑复制槽会在主库创建,因为有自动同步机制,也会在备份被创建。
当主备环境发生切换时,主停机,而备切换为新主;此时订阅者,只需要将连接信息修改为新的主库即可,在此期间发布的变更数据不会丢失,都会被订阅者收到。这就是带failover的逻辑复制槽发挥的作用。
2.1 部署规划
这里我们部署在同一台机器上,所以区分主要是集簇目录和启动时的端口号。
集簇目录 | 端口号 | |
---|---|---|
主库 | pgA | 5432 (default) |
热备库 | pgAA1 | 5434 |
订阅库 | pgB | 5433 |
2.2 热备搭建
首先需要部署一套主备集群。
主库采用initdb
来初始化创建,而备库采用从主库的备份产生,使用pg_basebackup
命令直接进行备份。
- 初始化主库
[senllang@hatch postgres]$ /opt/postgres/bin/initdb -D pgA
- 配置主库参数
在启动主库之前,需要提前配置几个参数。
wal_level, 默认为replica, 因为需要使用逻辑复制,修改为 logical;
max_wal_senders, 默认为10,已经足够;
max_replication_slots , 因为用到复制槽,这里默认值为10,已经足够;
- 启动主库
然后,就可以启动主库。
[senllang@hatch postgres]$ /opt/postgres/bin/pg_ctl -D pgA/ -l logfile start
waiting for server to start.... done
server started
- 创建备份
使用pg_basebackup
命令,这个命令的好处是可以在线建立备份,在这里增加了-C -S slot_pri
参数,创建了一个物理复制槽,用于复制槽在主备之间同步,后面的步骤会使用到它,所以在这里提前创建,当然也可以手动创建。
[senllang@hatch postgres]$ /opt/postgres/bin/pg_basebackup -h 127.0.0.1 -U senllang --pgdata=./pgAA1 --progress --verbose -C -S slot_pri
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/2000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created replication slot "slot_pri"
23135/23135 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/2000158
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: renaming backup_manifest.tmp to backup_manifest
pg_basebackup: base backup completed
- 配置备库的参数
在备库上要配置主库的连接信息,同时要打开热备的开关,这样就可以在备库进行一些查询操作。
primary_conninfo = 'host=127.0.0.1 port=5432 dbname=postgres'
hot_standby = on
- 启动备库
在启动备库之前,先要创建standby信号文件,以standby模式启动备份集簇。
[senllang@hatch postgres]$ touch pgAA1/standby.signal
[senllang@hatch postgres]$ /opt/postgres/bin/pg_ctl -D pgAA1/ -o "-p 5434 " -l logfile start
这里备库启动时, 因为在同台机器上不能与其它产生冲突,指定了它的服务监听端口为5434
。
- 验证主备环境
在主库上创建两张表。
[senllang@hatch postgres]$ /opt/postgres/bin/psql -d postgres
psql (17.2)
Type "help" for help.postgres=# create table production(id int primary key, pname varchar, price int);
CREATE TABLE
postgres=# create table orders(o_id int primary key, p_id int references production(id), amount int);
CREATE TABLE
在备库查询,已经同步过来了。
[senllang@hatch ~]$ /opt/postgres/bin/psql -d postgres -p 5434
psql (17.2)
Type "help" for help.postgres=# \d
Did not find any relations.
postgres=# \dList of relationsSchema | Name | Type | Owner
--------+------------+-------+----------public | orders | table | senllangpublic | production | table | senllang
(2 rows)
主备模型已经部署完成。
三、带failover的逻辑复制部署
逻辑复制槽要达到failover的效果,要具备两方面的条件:
- 主备集群已经开启了复制槽的同步功能;
- 逻辑复制槽被指定了failover参数为true;也就是当复制槽为failover=true时,才可被备库同步;
这两个条件缺一不可,充分且必要,所以准备环节就这两个条件来对环境做分步的部署。
3.1 开启主备复制槽同步
首先要改造主备部署,让它支持复制槽的同步。
这一步必须是在使用带failover的复制槽之前,否则之前的复制槽不能被同步。
这里只需要修改备库参数即可。
配置复制槽的failover相关参数,在备份库pgAA1修改参数:
- hot_standby_feedback, 修改为 on, 备库可以反馈;
- sync_replication_slots, 修改为 on, 自动同步复制槽;
- primary_slot_name, 发送端的主复制槽,设置为备份时创建的复制槽 ‘slot_pri’;当然也可以手动添加;
[senllang@hatch postgres]$ /opt/postgres/bin/pg_ctl -D pgAA1/ -o "-p 5434 " -l logfile reload
server signaled
在修改完备库参数之后,使用reload
让参数生效。
3.2 准备订阅库
下面开始逻辑复制的搭建,步聚与之前介绍方法一样。
首先是创建集簇pgB,这与初始化主库的方法一样,使用initdb
初始化一个新的集簇,这里不再赘述。
- 订阅库
订阅库参数配置;
wal_level = logical
启动订阅库,这里指定订阅库监听端口为5433
。
[senllang@hatch postgres]$ /opt/postgres/bin/pg_ctl -D pgB -o "-p 5433 " -l logfile start
waiting for server to start.... done
server started
3.3 建立逻辑复制
当然就是熟悉的发布与订阅的机制了。
- 创建发布
在主库创建order表上的条件发布,这里用法更递进一些,只订阅产品号为2的订单信息,因为订阅者就是2号商品的厂家,其它信息与它没有意义。
postgres=# create publication pub_orders for table orders WHERE ( p_id = 2);
CREATE PUBLICATION
- 创建订阅表
厂家的分析员要收集所有一级代理商的订单信息,这里有一个订单表。
厂家的订单表,可不像代理商需要记录所有商口,所以此处没有外键,因为只有一种商品,甚至可以不用订阅此字段。
postgres=# create table orders(o_id int primary key, p_id int , amount int);
CREATE TABLE
- 订阅
登陆5433端口的订阅库,创建订阅;这里需要打开订阅时使用的逻辑复制槽的failover开关,默认是关闭的。
postgres=# create subscription orders_2 CONNECTION 'host=127.0.0.1 dbname=postgres port=5432' publication pub_orders with (failover = true);
NOTICE: created replication slot "orders_2" on publisher
CREATE SUBSCRIPTION
到此,在主备部署下,又带了一个发布订阅的逻辑复制,整体部署就结束了。
3.4 复制槽自动同步
我们在只读的备库上查询一下复制槽的同步情况。
[senllang@hatch ~]$ /opt/postgres/bin/psql -d postgres -p 5434
psql (17.2)
Type "help" for help.postgres=# select slot_name, failover from pg_replication_slots ;slot_name | failover
-----------+----------orders_2 | t
(1 row)
可以看到刚才创建的逻辑复制槽已经同步到了备库,同样也可以在主库查询,主库应该有两个复制槽,只有orders_2
打开了failover开关,所以才会被同步到了备库。
3.4 条件订阅
当代理商有新的订单产生时,厂家都会收到关于自己家商品的销售情况,进行实时分析,对产品生产计划做出实时调整,这一套流程成熟之后,可以应用AI来完成。不妙啊!又有岗位要被淘汰了。
赶紧看一下逻辑复制是否正常工作,主库模拟产生了两笔订单数据。
postgres=# insert into production values ( 1,'mobile phone'),(2,'labtop');
INSERT 0 2
postgres=# insert into orders values (1,2,200),(2,1,200);
INSERT 0 2
postgres=# select * from orders ;o_id | p_id | amount
------+------+--------1 | 2 | 2002 | 1 | 200
(2 rows)
然后在订阅库上查询,果然厂家立即就可以看到自己家的产品销售额。
postgres=# select * from orders ;o_id | p_id | amount
------+------+--------1 | 2 | 200
(1 row)
此时,备库上的数据与主库是保持完全一致的。
四、逻辑复制槽failover
到此,逻辑复制槽已经同步到了备库,理应整个演示要结束了。一般都会对于故障比较感兴趣,一定要眼见为实,下面就来看一下逻辑复制的failover。
- 主库故障
模拟主库发生了故障的情况,这里直接停止主库。
[senllang@hatch postgres]$ /opt/postgres/bin/pg_ctl -D pgA -l logfile stop
waiting for server to shut down.... done
server stopped
- 备库切换为新的主库
主备会先发生failover,因为是热备,所以直接将备库提升为新的主库,即可保障业务的连续运行。
[senllang@hatch postgres]$ /opt/postgres/bin/pg_ctl -D pgAA1/ -o "-p 5434 " -l logfile promote
waiting for server to promote.... done
server promoted
新主库拥有全量的用户数据,所以并不会发生数据的丢失情况。
- 逻辑复制failover
当主备发生切换之后,逻辑复制的订阅端也要切换订阅源了,因为逻辑复制信息以及逻辑复槽已经在新主库了,所以现在处理就比较简单了。
订阅库中修改订阅连接信息,更改为新主库的连接信息,端口为5434
。
postgres=# alter subscription orders_2 connection 'host=127.0.0.1 dbname=postgres port=5434';
ALTER SUBSCRIPTION
- 验证订阅
为了验证逻辑复制的有效性,继续在新的主库上模拟产生一笔订单数据。
postgres=# insert into orders values(3,2,500);
INSERT 0 1
postgres=# select * from orders ;o_id | p_id | amount
------+------+--------1 | 2 | 2002 | 1 | 2003 | 2 | 500
(3 rows)
在订阅库上查看本厂商口的销售情况。
postgres=# select * from orders ;o_id | p_id | amount
------+------+--------1 | 2 | 2003 | 2 | 500
(2 rows)
咦,又多了一笔销售数据,金额还不小。
五、总结
逻辑复制槽的failover功能是PostgreSQL 17版本新增的功能,这也完善了逻辑复制的故障场景的处理策略,避免此场景下的变更数据丢失情况。
各位小伙伴get到了吗,也记得点个赞再走哟~
结尾
非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!
作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。
注:未经同意,不得转载!
相关文章:
【PostgreSQL使用】最新功能逻辑复制槽的failover,大数据下高可用再添利器
逻辑复制的failover 专栏内容: postgresql入门到进阶手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. ✅ ὒ…...
MongoDB 创建用户、User、Role 相关 操作
创建用户 # db.createUser() Creates a new user.详细 查看 db.createUser() - MongoDB Manual v8.0 设置用户 Role(创建用户时也可以设置) # db.grantRolesToUser() Grants a role and its privileges to a user. 详细 查看 db.grantRolesToUser(…...
在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)
一、概述 记录时间 [2024-12-26] 本文讲述如何在 Vue3 项目中使用计时器组件。具体包括开发环境的配置,ViteVue 项目的创建,Element Plus 插件的使用,以及计时器组件的创建和使用。 想要直接实现计时器组件,查看文章的第四部分。…...
Redis单线程快的原因
基于内存操作:Redis将数据存储在内存中,使得数据的读写速度极快,这是其性能优势的主要原因。单线程避免上下文切换:在多线程环境下,CPU核数有限,线程上下文切换会带来性能损耗。Redis采用单线程,…...
基于SpringBoot的“在线BLOG网”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“在线BLOG网”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 在线BLOG网结构功能图 管理员登录功能界面 用户信息…...
重温设计模式--6、享元模式
文章目录 享元模式(Flyweight Pattern)概述享元模式的结构C 代码示例1应用场景C示例代码2 享元模式(Flyweight Pattern)概述 定义: 运用共享技术有效地支持大量细粒度的对象。 享元模式是一种结构型设计模式࿰…...
springboot-starter版本升级es版本问题
一、背景说明 版本漏洞处理,springboot版本升级,es版本暂不升级,但是pom引用中es版本一直为7.17.15高版本,不想显示声明版本,定位具体问题,最后还是重新定义了版本进行处理。 二、异常情况 这里看4.4.18是…...
嵌入式科普(25)Home Assistant米家集成意味着IOT的核心是智能设备
目录 一、概述 二、一张图说尽HA 三、HA的相关资料 四、米家集成划重点 五、总结 一、概述 小米Home Assistant 米家集成开源一周star近15k,迭代4个版本,12个贡献者 本文科普一下Home Assistant(简称HA)、米家集成ÿ…...
前端Python应用指南(四)Django实战:创建一个简单的博客系统
《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比(二)深入Flask:理解Flask的应用结构与模块化设计(三)Django vs Flask:哪种框架适…...
webrtc获取IceCandidate流程
在WebRTC(Web Real-Time Communication)中,ICECandidate是一个关键概念,它用于描述在建立点对点(P2P)连接时可以考虑的潜在通信端点。以下是关于WebRTC中ICECandidate的详细解释: 一、ICECandidate的定义 ICECandidate对象通常包含以下关键属性: foundation:用于唯一…...
快速入门Spring AI Alibaba
文章目录 前言一、环境准备二、获取API Key三、代码示例pomapplication.ymlcontroller 前言 Spring Cloud Alibaba AI 以 Spring AI 为基础,并在此基础上,基于 Spring AI 0.8.1 版本 API 完成同义系列大模型的接入实现阿里云同义系列大模型全面适配。 在…...
【mysql】MVCC及实现原理
【mysql】MVCC及实现原理 【一】介绍【1】什么是MVCC【2】什么是当前读和快照读【3】当前读,快照读和MVCC的关系【4】MVCC 能解决什么问题,好处(1)数据库并发场景有三种,分别为:(2)M…...
C++ —— 模板类与函数
C —— 模板类与函数 模板类可以用于函数的参数和返回值,有三种形式: 普通函数,参数和返回值是模板类的实例化版本。函数模板,参数和返回值是某种的模板类。函数模板,参数和返回值是任意类型(支持普通类和…...
【笔记】下载mysql5.7
MySQL5.7安装超详细步骤(保姆级教程)_mysql5.7下载安装-CSDN博客 下载与安装 初次登录以及改密码 MySQL 5.7 安装教程(全步骤图解教程)_mysql5.7的安装教程-CSDN博客...
让 AMD GPU 在大语言模型推理中崭露头角:机遇与挑战
在当今科技飞速发展的时代,大语言模型(LLM)的兴起彻底改变了人工智能领域的格局。从智能客服到文本生成,从知识问答到代码编写辅助,大语言模型的应用无处不在,深刻影响着我们的生活和工作。然而,…...
Linux运维常见命令
vi/vim快捷键使用 1)拷贝当前行 yy ,拷贝当前行向下的5行 5yy,并粘贴(输入p)。 2)删除当前行 dd ,删除当前行向下的5行5dd 3)在文件中查找某个单词 [命令行下 /关键字,回车查找 ,输入n就是查找下一个 ] 4)设置文件的行号&…...
前端真实面试题自用
一、写在前面 笔者,经过计算机学硕考研的失败后,想谋求一份前端工作实在是太难了。一方面,确实曾经学习过的东西很久没有拾起,另一方面,对于前端面经还是记忆不深刻,特地写此贴记录笔者在真实前端面试中遇…...
人工智能与云计算的结合:如何释放数据的无限潜力?
引言:数据时代的契机 在当今数字化社会,数据已成为推动经济与技术发展的核心资源,被誉为“21世纪的石油”。从个人消费行为到企业运营决策,再到城市管理与国家治理,每个环节都在生成和积累海量数据。然而,数…...
初始 ShellJS:一个 Node.js 命令行工具集合
一. 前言 Node.js 丰富的生态能赋予我们更强的能力,对于前端工程师来说,使用 Node.js 来编写复杂的 npm script 具有明显的 2 个优势:首先,编写简单的工具脚本对前端工程师来说额外的学习成本很低甚至可以忽略不计,其…...
benchmarksql5.0 测试工具如何在达梦上能够跑起来?
(1)添加驱动程序文件: lib文件夹下创建一个dm文件夹,并在dm文件夹下放置达梦数据库的驱动程序:DmJdbcDriver8.jar (2)引用驱动程序文件所在目录: 在文件benchmarksql-5.0/run/funcs.sh中的function setCP()函数中; 也就是在文件…...
amazon广告授权
amazon授权资料地址 Amazon Advertising Advanced Tools Center postman地址:Amazon Advertising Advanced Tools Center...
设计模式与游戏完美开发(2)
更多内容可以浏览本人博客:https://azureblog.cn/ 😊 该文章主体内容来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第四章 游戏主要类——外观模式(Facade) 一、游戏子功能的整合 一个游戏程序常常由内部数个不同的…...
WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue
WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...
VSCode调试
目录 C/C远程本地调试插件配置参考 C/C远程本地调试 测试源码:https://github.com/jrhee17/ssl-study 插件 Remote - SSH C/C 配置 .vscode/launch.json {"version": "0.2.0","configurations": [{"name": "afte…...
【ES6复习笔记】解构赋值(2)
介绍 解构赋值是一种非常方便的语法,可以让我们更简洁地从数组和对象中提取值,并且可以应用于很多实际开发场景中。 1. 数组的解构赋值 数组的解构赋值是按照一定模式从数组中提取值,然后对变量进行赋值。下面是一个例子: con…...
01 - 初识 Spring
初识Spring 企业级应用 企业级应用是指那些为商业组织、⼤型企业而创建并部署的解决⽅案及应用。这些⼤型的企业级应用结构复 杂、涉及的外部资源众多,事务密集,数据规模⼤,用户数量多,有较强的安全性考虑和较⾼的性能要求。 …...
重装荣耀X14笔记本电脑踩坑记
这几天趁着有国补搞了台荣耀 X14笔记本电脑。到手后第一件事情对我来说当然是要重装成Windows 11 LTSC版。所以按以往的经验做了个USB启动安装盘,但发现上电后按F12能进入启动设备选择,可是USB分类下没有任何设备。重启按F2进入设置界面,关闭…...
华为管理变革之道:奋斗文化与活力
目录 企业文化是什么? 为什么活下去是华为的文化? 活下来,是华为公司的最低纲领,也是华为公司的最高纲领! 资源终会枯竭,唯有文化才能生生不息 企业文化之一:以客户为中心 企业文化之二&a…...
代码随想录算法训练营第十五天-二叉树-110.平衡二叉树
所谓平衡二叉树是指任意子树的高度差不超过1目前所学习的有关二叉树的问题,都是基于二叉树的遍历顺序来实现的 #include <iostream> #include <sstream> #define LEN 10009struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(): val(0…...
各种网站(学习资源、常用工具及其他,持续更新中~)
欢迎围观笔者的个人博客~ 也欢迎通过RSS网址https://kangaroogao.github.io/atom.xml进行订阅~ 大学指南 上海交通大学生存手册中国科学技术大学人工智能与数据科学学院本科进阶指南USTC不完全入学指南大学生活质量指北科研论 信息搜集 AI信息搜集USTC飞跃网站计算机保研 技…...
【gunicorn -k gevent 参数gevent说明,主要CPU密集和I/O密集型】
CPU 密集型和I/O 密集型是两种不同的计算任务类别,它们的性能瓶颈来源不同: 1. CPU 密集型 定义 CPU 密集型任务是指主要消耗 CPU 计算资源 的任务。这类任务需要大量的计算操作,而很少涉及 I/O 操作(如网络或磁盘的读写&#x…...
快速理解24种设计模式
简单工厂模式 建立产品接口类,规定好要实现方法。 建立工厂类,根据传入的参数,实例化所需的类,实例化的类必须实现指定的产品类接口 创建型 单例模式Singleton 保证一个类只有一个实例,并提供一个访问他它的全局…...
5G -- 5G网络架构
5G组网场景 从4G到5G的网络演进: 1、UE -> 4G基站 -> 4G核心网 * 部署初中期,利用存量网络,引入5G基站,4G与5G基站并存 2、UE -> (4G基站、5G基站) -> 4G核心网 * 部署中后期,引入5G核心网&am…...
硬件开发笔记(三十二):TPS54331电源设计(五):原理图BOM表导出、元器件封装核对
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/144753092 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
UE5 崩溃问题汇总!!!
Using bundled DotNet SDK version: 6.0.302 ERROR: UnrealBuildTool.dll not found in "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" 在你遇到这种极奇崩溃的BUG ,难以解决的时候。 尝试了N种方法,都不行的解决方法。…...
美国站群服务器如何帮助实现有效的多域名管理?
国站群服务器以其丰富的IP资源、高性能硬件和灵活的配置选项,成为多域名管理的理想选择。特别是在需要针对不同域名实现SEO优化、业务分离或多站点运营的场景中,美国站群服务器提供了高效且实用的解决方案。以下是如何利用美国站群服务器实现有效的多域名…...
VMware的三种网络模式——在NAT模式下开放接口为局域网内其他主机提供服务
众所周知 VMware 有三种常用的网络通讯模式,分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式),它们各有不同的用法。 Bridged 桥接模式是与主机…...
【漏洞复现】灵当CRM datapdf.php 任意文件读取漏洞
免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作…...
MySql详细教程-从入门到进阶(超实用)
基础篇 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用…...
【C语言练习(17)—输出杨辉三角形】
C语言练习(17) 文章目录 C语言练习(17)前言题目题目解析整体代码 前言 杨辉三角形的输出可以分三步,第一步构建一个三角形、第二步根据规律将三角形内容填写、第三步将三角形以等腰的形式输出 题目 请输出一个十行的…...
服务器压力测试怎么做
在部署任何Web应用程序或服务之前,进行服务器压力测试(也称为负载测试)是确保系统能够处理预期用户流量的关键步骤。通过模拟大量并发请求,可以评估服务器的性能、稳定性和响应时间,识别潜在瓶颈,并优化资源…...
深度学习中的正则化
深度学习中的正则化(regularization)旨在防止过拟合并提高模型对未知数据的泛化能力。正则化是一种通过在给定的训练集上适当地拟合函数并避免过度拟合来减少误差的技术。 通过对模型参数添加约束,正则化鼓励模型学习更简单、更稳健的模式,从而降低其对噪…...
深入了解 React:从入门到高级应用
深入了解 React:从入门到高级应用 React 是由 Facebook 开发并维护的一个开源 JavaScript 库,用于构建用户界面。自2013年发布以来,React 在前端开发领域迅速崛起,成为最受欢迎的 UI 构建工具之一。无论是小型的单页应用…...
华为云环境下LVS/DR架构的故障诊断优化
本文作者:刘涛 文章目录 前言1.LVS/DR集群的问题2.华为云环境3.问题排查3.1 检查LVS/DR模式配置3.1.1 RS服务器3.1.2 DS服务器 3.2 继续分析抓包结果3.2.1 调整tcpdump抓包过滤条件3.2.2 client向集群VIP发包3.2.3 DS服务器arp消息 3.3 查看丢包3.3.1 监控DS和RS服…...
Effective C++ 条款 22:将成员变量声明为 private
文章目录 条款 22:将成员变量声明为 private核心思想示例代码注意事项结论 条款 22:将成员变量声明为 private 核心思想 成员变量的封装性 将成员变量声明为 private 是面向对象设计的重要原则,有助于保持封装性。 为何使用 private&#x…...
ShardingSphere(分库分表)
ShardingSphere 高性能架构模式 读写分离架构: 基本原理是将数据库读写操作分散到不同的节点上,主库负责处理事务性的增删改操作,从库负责处理查询操作。避免由数据更新导致的行锁,来提升性能。 一主一从:可以将查…...
Visual Studio Code(VS Code)配置C/C++环境
一、Visual Studio Code安装 Visual Studio Code,下文中简称为VS Code的详细安装方法请参考VSCode安装教程(超详细)-CSDN博客 二、MinGW编译器下载与配置 1、MinGW介绍 MinGW(Minimalist GNU for Windows)是一款用于Windows 平台的轻…...
使用 OpenCV 在图像中添加文字
在图像处理任务中,我们经常需要将文本添加到图像中。OpenCV 提供了 cv2.putText() 函数,可以很方便地在图像上绘制文本,支持多种字体、颜色、大小和位置等参数。 本文将详细介绍如何使用 OpenCV 在图像中添加文字,介绍 cv2.putTe…...
高校网络安全_网络安全之道
需要对学校的网络进行安全防护,主要有这么几个痛点: 传统本地化产品难以及时更新情报库,应对新型攻击。 近年来,黑客和黑产团伙攻击手 段呈现多样化实战化,除传统僵木蠕外,各类新型、复杂甚至未知威胁高发…...
『大模型笔记』评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释
评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释 文章目录 一. ELO Rating大模型的elo得分如何理解1. Elo评分的基本原理2. 示例说明3. 大模型中的Elo得分总结3个模型之间如何比较计算,给出示例进行解释1. 基本原理扩展到三方2. 示例计算第一场: A A…...