5 MySQL-主从复制&分库分表

5.1mysql 主从复制

5.1.1. 概述

主从复制是将主数据库的DDL和DML操作通过二进制日志(binlog文件)传送到从库服务器,然后在从库上对这些日志重新执行,从而使得主库和从库的数据保持同步。

MySQL支持一台主库同时向多台从库进行复制,从库也可以从其他从库复制。(主从,从从等模式)。
在这里插入图片描述

MySQL复制的优点包含以下几个方面:

  1. 主库出现问题,可以快速切换到从库提供服务。
  2. 实现读写分离,降低主库的访问压力。(增删改操作在主库,读取在从库)
  3. 可以在从库中执行备份(因为加了全局锁,锁了库),以避免备份期间影响主库服务。

5.1.2. 原理

基于binlog实现主从模式。
从库有两组线程,IO Thread和SQL Thread

IO Thread复制连接到主库,并且读取主库的binlog日志,并且将其保存到从节点的中继日志,即relay日志。SQL Thread复制读取relay日志,并且执行。
在这里插入图片描述

5.1.3. 搭建

基于Docker实现MySQL主从复制(全网最详细!!!)_docker mysql-CSDN博客

5.1.3.1. 搭建主节点

在这里插入图片描述


docker run -d \
--name mysql_master \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /usr/local/dlh/mysql_master/data:/var/lib/mysql \
-v /usr/local/dlh/mysql_master/conf:/etc/mysql \
-v /usr/local/dlh/mysql_master/mysql-files:/var/lib/mysql-files \
-v /usr/local/dlh/mysql_master/log:/var/log/mysql \
mysql:8.0.23

!注意修改MYSQL的配置文件!

[mysqld]
# 服务器唯一id,保证主从集群环境中唯一,取值范围:1~(2^32-1),默认为1
server-id=1
# 是否只读,1代表只读,0代表读写
read-only=0
# 二进制日志名,默认binlog
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
# binlog-do-db=mytestdb
# 设置不需要复制的数据库
# binlog-ignore-db=mysql
# binlog-ignore-db=infomation_schema
skip-name-resolve
5.1.3.1.1. 创建主从用户
登录mysql,创建远程连接的账号,并授予主从复制权限。
docker exec -it mysql_master /bin/bash
mysql -uroot -p123456
# 创建remote_user用户,并且指定其密码
# 该用户可以在任意的主机连接该MYSQL服务
create user 'remote_user'@'%' 
identified with mysql_native_password by 'Root@123456';或者:
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'Root@123456';# 给'remote_user'@'%' 用户分配主从复制权限
grant replication slave on *.* to 'remote_user'@'%';

查看二进制日志坐标(binlog和offset):

show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 |      673 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
  • file:从哪个日志文件开始推送日志文件
  • position:文件日志偏移量
5.1.3.2. 搭建从节点
docker run -d \
--name mysql_slave \
-p 3308:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /usr/local/dlh/mysql_slave/log:/var/log/mysql \
-v /usr/local/dlh/mysql_slave/data:/var/lib/mysql \
-v /usr/local/dlh/mysql_slave/conf:/etc/mysql \
-v /usr/local/dlh/mysql_slave/mysql-files:/var/lib/mysql-files \
mysql:8.0.23

添加从节点配置文件。

[mysqld]
# 服务器唯一id,保证主从集群环境中唯一,取值范围:1~(2^32-1),默认为1
server-id=2
# 是否只读,1代表只读,0代表读写
read-only=1
# 二进制日志名,默认binlog
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
# binlog-do-db=mytestdb
# 设置不需要复制的数据库
# binlog-ignore-db=mysql
# binlog-ignore-db=infomation_schema
skip-name-resolve
5.1.3.2.1. 从库关联到主库
#进入从库
docker exec -it mysql_slave /bin/bash
mysql -uroot -p123456#与主库连接
CHANGE MASTER TO MASTER_HOST='192.168.171.108', 
MASTER_USER='remote_user',MASTER_PASSWORD='Root@123456', MASTER_PORT=3307,
MASTER_LOG_FILE='binlog.000005',MASTER_LOG_POS=673; 

在这里插入图片描述

5.1.3.2.2. 开启主从同步
start replica; 

输入后,查看从库状态。

show replica status\G# 输出:
******************** 1. row ***************************Replica_IO_State: Waiting for master to send eventSource_Host: 192.168.171.108Source_User: remote_userSource_Port: 3307Connect_Retry: 60Source_Log_File: binlog.000002Read_Source_Log_Pos: 673Relay_Log_File: 1edd24b6c96d-relay-bin.000002Relay_Log_Pos: 321Relay_Source_Log_File: binlog.000002Replica_IO_Running: YesReplica_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Source_Log_Pos: 673Relay_Log_Space: 537Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Source_SSL_Allowed: NoSource_SSL_CA_File: Source_SSL_CA_Path: Source_SSL_Cert: Source_SSL_Cipher: Source_SSL_Key: Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Source_Server_Id: 1Source_UUID: 26e38018-4127-11f0-ab8e-0242ac110002Source_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLReplica_SQL_Running_State: Slave has read all relay log; waiting for more updatesSource_Retry_Count: 86400Source_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Source_SSL_Crl: Source_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Source_TLS_Version: Source_public_key_path: Get_Source_public_key: 0Network_Namespace: 

注意:如果发现IO线程或者SQL线程未启用;可执行以下命令重试:

在从库上执行 STOP SLAVE;
使用 RESET SLAVE; 命令清除现有的复制信息。
然后重新设置从库的主库信息,使用 CHANGE MASTER TO ... 命令,并提供正确的日志文件名和位置。
最后,执行 START SLAVE; 尝试重新开始复制。

5.1.4. shadingSphere实战演示

官网:shardingsphere官网

5.1.4.1简介

ShardingSphere 是一个开源的分布式数据库中间件,提供数据分片、分布式事务和数据库治理功能。其核心原理包括 SQL 解析、路由、改写、执行和归并等多个步骤。
在这里插入图片描述

详细可参考文档:ShardingSphere内核原理及核心源码剖析

5.1.4.2 Springboot集成shadingSphere实现读写分离
spring.application.name=sharding# 数据库名
spring.shardingsphere.datasource.names = mysql_master,mysql_slave
# 数据库详细信息
spring.shardingsphere.datasource.mysql_master.type = com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.mysql_master.driver-class-name = com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.mysql_master.url = jdbc:mysql://192.168.171.108:3307/test?characterEncoding=UTF-8&useSSL=false
spring.shardingsphere.datasource.mysql_master.username = root
spring.shardingsphere.datasource.mysql_master.password = 123456spring.shardingsphere.datasource.mysql_slave.type = com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.mysql_slave.driver-class-name = com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.mysql_slave.url = jdbc:mysql://192.168.171.108:3308/test?characterEncoding=UTF-8&useSSL=false
spring.shardingsphere.datasource.mysql_slave.username = root
spring.shardingsphere.datasource.mysql_slave.password = 123456# 路由规则
spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.write-data-source-name = mysql_master
spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.read-data-source-names = mysql_master,mysql_slave# 打印sql
spring.shardingsphere.props.sql-show=true
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dlh</groupId><artifactId>sharding</artifactId><version>1.0-SNAPSHOT</version><name>sharding</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.7</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>11</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.2.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.7</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.33</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

5.1.4. 总结

在这里插入图片描述

5.2分库&分表

5.2.1介绍

在这里插入图片描述

如果大数据量进行数据存储,存在以下性能瓶颈:

  1. IO瓶颈:请求太多,导致大量的磁盘IO,效率太低。请求的数据太多,带宽不够,网络IO平静。
  2. CPU瓶颈:排序,分组,连接查询,聚合统计等SQL会消耗大量的CPU资源,请求数太多,CPU出现瓶颈。

5.2.2拆分策略

分库分表只是粒度层面的不同,垂直拆分和水平拆分只是在拆分维度上的区别。

  1. 分库就是将一个数据库分成多个数据库。
  2. 分表就是将一个表拆分成多个表。
5.2.2.1垂直分库&垂直分表

在这里插入图片描述


5.2.2.2水平拆分

在这里插入图片描述


5.2.3垂直分库

5.2.3.1搭建docker环境

在这里插入图片描述


搭建mysql_server1

docker run -d \
--name mysql_server1 \
-p 3309:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /usr/local/dlh/mysql_server1/data:/var/lib/mysql \
-v /usr/local/dlh/mysql_server1/conf:/etc/mysql \
-v /usr/local/dlh/mysql_server1/mysql-files:/var/lib/mysql-files \
-v /usr/local/dlh/mysql_server1/log:/var/log/mysql \
mysql:8.0.23

搭建mysql_server2

docker run -d \
--name mysql_server2 \
-p 3310:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /usr/local/dlh/mysql_server2/data:/var/lib/mysql \
-v /usr/local/dlh/mysql_server2/conf:/etc/mysql \
-v /usr/local/dlh/mysql_server2/mysql-files:/var/lib/mysql-files \
-v /usr/local/dlh/mysql_server2/log:/var/log/mysql \
mysql:8.0.23

在mysql-server1 服务器上, 创建数据库 payorder_db,并创建表 pay_order

CREATE DATABASE msb_payorder_db CHARACTER SET 'utf8';CREATE TABLE pay_order (order_id bigint(20) NOT NULL AUTO_INCREMENT,user_id int(11) DEFAULT NULL, -- 表关联product_name varchar(128) DEFAULT NULL,COUNT int(11) DEFAULT NULL,PRIMARY KEY (order_id)
) ENGINE=InnoDB AUTO_INCREMENT=12345679 DEFAULT CHARSET=utf8

在mysql-server2 服务器上, 创建数据库 msb_user_db,并创建表users

CREATE DATABASE user_db CHARACTER SET 'utf8';CREATE TABLE users (id int(11) NOT NULL,username varchar(255) NOT NULL COMMENT '用户昵称',phone varchar(255) NOT NULL COMMENT '注册手机',PASSWORD varchar(255) DEFAULT NULL COMMENT '用户密码',PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表'
5.2.3.2配置文件

使用sharding-jdbc 对数据库中水平拆分的表进行操作,通过sharding-jdbc对分库分表的规则进行配置,配置内容包括:数据源、主键生成策略、分片策略等。

spring.application.name=sharding_2# 定义多个数据源
spring.shardingsphere.datasource.names = mysql-server1,mysql-server2
# datasource 1
spring.shardingsphere.datasource.mysql-server1.type = com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.mysql-server1.driver-class-name = com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.mysql-server1.url = jdbc:mysql://192.168.31.145:3309/payorder_db?characterEncoding=UTF-8&useSSL=false
spring.shardingsphere.datasource.mysql-server1.username = root
spring.shardingsphere.datasource.mysql-server1.password = 123456
# datasource 2
spring.shardingsphere.datasource.mysql-server2.type = com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.mysql-server2.driver-class-name = com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.mysql-server2.url = jdbc:mysql://192.168.31.145:3310/user_db?characterEncoding=UTF-8&useSSL=false
spring.shardingsphere.datasource.mysql-server2.username = root
spring.shardingsphere.datasource.mysql-server2.password = 123456
# 配置规则
spring.shardingsphere.rules.sharding.tables.pay_order.actual-data-nodes=mysql-server1.pay_order
spring.shardingsphere.rules.sharding.tables.users.actual-data-nodes=mysql-server2.users# print sql
spring.shardingsphere.props.sql-show=true

配置规则格式:
在这里插入图片描述

测试是否垂直分库成功。

@SpringBootTest
class Sharding2ApplicationTests {@Resourceprivate PayOrderMapper payOrderMapper;@Resourceprivate UsersMapper usersMapper;@Testpublic void testInsert(){Users user = new Users();user.setId(1002);user.setUsername("大远哥");user.setPhone("15612344321");user.setPassword("123456");usersMapper.insert(user);PayOrder payOrder = new PayOrder();payOrder.setOrderId(12345679L);payOrder.setProductName("猕猴桃");payOrder.setUserId(user.getId());payOrder.setCount(2);payOrderMapper.insert(payOrder);}
}

5.2.4水平分表

如果单表数据量越来越多的时候,对一张表的操作性能将会下降。所以我们将一张表水平拆分成多个表,分散在不同的数据库中存储。

场景:用户订单表pay_order中数据量太多,如何实现水平分表?

5.2.4.1数据准备
docker run -d \
--name mysql_server3 \
-p 3311:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /usr/local/dlh/sharding/mysql_server3/log:/var/log/mysql \
-v /usr/local/dlh/sharding/mysql_server3/data:/var/lib/mysql \
-v /usr/local/dlh/sharding/mysql_server3/conf:/etc/mysql \
-v /usr/local/dlh/sharding/mysql_server3/mysql-files:/var/lib/mysql-files \
mysql:8.0.23

在这里插入图片描述

需求说明:

  1. 在mysql-server3服务器上, 创建数据库 course_db
  2. 创建表 t_course_1 、 t_course_2
  3. 约定规则:如果添加的课程 id 为偶数添加到 t_course_1 中,奇数添加到 t_course_2 中。

水平分片的id需要在业务层实现,不能依赖数据库的主键自增

CREATE TABLE t_course_1 (`cid` BIGINT(20) NOT NULL,`user_id` BIGINT(20) DEFAULT NULL,`cname` VARCHAR(50) DEFAULT NULL,`brief` VARCHAR(50) DEFAULT NULL,`price` DOUBLE DEFAULT NULL,`status` INT(11) DEFAULT NULL,PRIMARY KEY (`cid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8CREATE TABLE t_course_2 (`cid` BIGINT(20) NOT NULL,`user_id` BIGINT(20) DEFAULT NULL,`cname` VARCHAR(50) DEFAULT NULL,`brief` VARCHAR(50) DEFAULT NULL,                                 `price` DOUBLE DEFAULT NULL,`status` INT(11) DEFAULT NULL,PRIMARY KEY (`cid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
5.2.4.2修改配置文件
spring.shardingsphere.datasource.names = mysql-server3spring.shardingsphere.datasource.mysql-server3.type = com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.mysql-server3.driver-class-name = com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.mysql-server3.url = jdbc:mysql://192.168.31.145:3309/course_db?characterEncoding=UTF-8&useSSL=false
spring.shardingsphere.datasource.mysql-server3.username = root
spring.shardingsphere.datasource.mysql-server3.password = 123456
5.2.4.3数据节点配置

修改t_course表的实际节点映射。(即表在哪个节点上)

spring.shardingsphere.rules.sharding.tables.t_course.actual-data-nodes=master-server3.t_course_1
spring.shardingsphere.rules.sharding.tables.t_course.actual-data-nodes=master-server3.t_course_2

如果实际节点太多,那么将会写很多次。可以用下面的方式简化。
行表达式的使用: 行表达式

spring.shardingsphere.rules.sharding.tables.t_course.actual-data-nodes=mysql-server3.t_course_$->{1..2}
spring.shardingsphere.rules.sharding.tables.t_course.actual-data-nodes=master-server3.t_course_$->{1..2}

表达式 db1.t_course_$->{1..2}

$ 会被 大括号中的 {1..2} 所替换, ${begin..end} 表示范围区间
会有两种选择: master-server3.t_course_1 和 master-server3.t_course_2

5.2.4.4 配置分片策略

分片策略包括分片键和分片算法.
分片规则,约定cid值为偶数时,添加到t_course_1表,如果cid是奇数则添加到t_course_2表
分片算法比如取模,hash等。
在这里插入图片描述

#1.配置数据节点
#指定course表的分布情况(配置表在哪个数据库,表名是什么)
spring.shardingsphere.rules.sharding.tables.t_course.actual-data-nodes=db1.t_course_$->{1..2}
##2.配置分片策略(分片策略包括分片键和分片算法)
#2.1 分片键名称: cid
spring.shardingsphere.rules.sharding.tables.t_course.table-strategy.standard.sharding-column=cid
#2.2 分片算法名称
spring.shardingsphere.rules.sharding.tables.t_course.table-strategy.standard.sharding-algorithm-name=table-inline
#2.3 分片算法类型: 行表达式分片算法(标准分片算法下包含->行表达式分片算法)
spring.shardingsphere.rules.sharding.sharding-algorithms.table-inline.type=INLINE
#2.4 分片算法属性配置
spring.shardingsphere.rules.sharding.sharding-algorithms.table-inline.props.algorithm-expression=t_course_$->{cid % 2 + 1}
5.2.4.5 测试

测试插入:

@Test
public void testInsertCourse(){for (int i = 1; i < 10; i++) {Course course = new Course();course.setCid(1L+i);course.setUserId(1L+i);course.setCname("Java经典面试题讲解");course.setBrief("课程涵盖目前最容易被问到的10000道Java面试题");course.setPrice(100.0);course.setStatus(1);courseMapper.insert(course);}
}

测试查询:

@Test
public void test3(){List<Course> courses = courseMapper.selectList(null);for (Course cours : courses) {System.out.println(cours);}
}

测试分页查询:

@Test
public void test4() {//全量如何分页?List<Course> courses1 = courseMapper.selestectPage(1, 5);for (Course c : courses1) {System.out.println(c);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88746.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88746.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/88746.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7.6.平衡二叉树(英文缩写为AVL树)

一.平衡二叉树的定义&#xff1a; 1.平衡二叉树简称平衡树(AVL树&#xff0c;该缩写来源于平衡二叉树的发明人的名字简称)&#xff1b; 2.结点的平衡因子左子树高-右子树高&#xff1b; 3.以上述图片左下角的二叉树为例&#xff0c;结点50的左子树的高度为2&#xff0c;右子树…

OpenCV CUDA模块设备层-----将指向共享内存(shared memory)的指针封装成一个 tuple函数smem_tuple()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 OpenCV的cv::cudev模块中的一个用于 CUDA 编程的辅助函数&#xff0c;用于将指向共享内存&#xff08;shared memory&#xff09;的指针封装成一…

paddlepaddle在RTX40系安装注意事项

1 安装简介 1.1 安装注意事项 显卡型号&#xff1a;RTX4090 驱动版本&#xff1a;550.54.14 宿主机cuda版本&#xff1a;12.4 安装方式&#xff1a;conda 注意cuda和cudnn的搭配 最初安装是为了使用PaddleOCR&#xff0c;根据官网提示需要安装cuda和cudnn。这里最关键的就是针…

车载以太网-组播

目录 车载以太网中的组播:从原理到车载应用**一、组播的核心概念与车载网络价值****二、车载以太网组播的关键协议与机制**1. **组播IP地址管理(IGMP协议)**2. **组播数据链路层实现(MAC地址映射)****三、车载以太网组播的典型应用场景**1. **自动驾驶与传感器数据分发**2…

【雅思播客013】what do you do

【dialog】 A: Oh, look, there’s Veronica and her boyfriend.She’s always going on about him at the office. Oh, great, they saw us. They’re coming this way. B: Oh, man... C: Jessica! Arthur! Hi! I’d like you to meet my boyfriend Greg, he’s the VP. of q…

Freebsd 14.2系统下 wifi网卡硬件驱动软件配置调试大全

Freebsd 14.2系统下&#xff0c;网卡是AX200 先检查网卡sysctl net.wlan.devices sysctl net.wlan.devices 能识别出已经安装的 sysctl net.wlan.devices net.wlan.devices: iwlwifi0配置wlan0 # ifconfig wlan0 create wlandev iwlwifi0 # ifconfig wlan0 up # ifconfig …

Python打卡:Day39

知识点回顾 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 浙大疏锦行

使用 GcExcel .NET 将 Excel 导出为 PDF

引言 在企业级应用开发中&#xff0c;经常需要将Excel数据导出为PDF格式以便于共享和打印。GrapeCity Documents for Excel&#xff08;简称GcExcel&#xff09;作为一款高性能的.NET Excel组件&#xff0c;提供了强大的PDF导出功能。本文将详细介绍如何使用GcExcel .NET实现E…

每日算法刷题Day39 6.26:leetcode前缀和2道题,用时1h20min

8. 2055.蜡烛之间的盘子(中等,学习替换查询区间) 2055. 蜡烛之间的盘子 - 力扣&#xff08;LeetCode&#xff09; 思想 1.给你一个长桌子&#xff0c;桌子上盘子和蜡烛排成一列。给你一个下标从 0 开始的字符串 s &#xff0c;它只包含字符 * 和 | &#xff0c;其中 * 表示一…

jrebel 下载,安装,激活步骤

参考地址&#xff1a; [笔记] 最新版 - JRebel 插件激活与配置教程 : 高效开发的必备指南_jrebel激活-CSDN博客https://blog.csdn.net/LuChangQiu/article/details/145547828 1、下载 2、激活地址&#xff1a; http://42.193.18.168:8088 ### 捡个便宜 - 交朋友吧 ###https://…

uniapp使用plus调取蓝牙/usb打印

安卓使用usb调取打印机 /*** 安卓usb调取打印机*param { string | bytes[] } html 传入的打印内容*传入一段文本或一个bytes数组* returns*/ export const printUsb (html) > {return new Promise((resolve, reject) > {if (!window.plus) return reject(new Error(&qu…

区块链数据结构:区块与链式结构编码

目录 区块链数据结构:区块与链式结构编码引言:区块链的骨架1. 区块链数据结构解析1.1 区块结构组成1.2 区块链可视化结构2. 区块核心组件详解2.1 区块头字段说明2.2 Merkle树结构2.3 工作量证明机制3. Python实现区块链数据结构3.1 区块类实现3.2 区块链类实现3.3 区块链演示…

阿里推出 R1-Omni:将强化学习与可验证奖励(RLVR)应用于全模态大语言模型

从视频中识别情感涉及许多细微的挑战。仅依赖视觉或音频信号的模型&#xff0c;往往无法准确捕捉这两种模态之间的复杂相互作用&#xff0c;从而导致对情感内容的误解。一个关键难题在于可靠地结合视觉线索&#xff08;如面部表情或肢体语言&#xff09;与听觉信号&#xff08;…

【江科大】STM32F103C8T6 + TB6612 + N20编码器减速电机《03-增量式PID定速控制》(增量式PID,定时器输入捕获,定时器编码器)

STM32F103C8T6单片机+N20减速电机带霍尔编码器版PID闭环控制实验演示 STM32F103C8T6 实现的电机转速控制系统,基于 PWM 输出驱动、编码器采样反馈、以及增量式 PID 算法进行控制。 /*** @file Encoder.c* @brief 增量式编码器驱动程序* @details 使用TIM3定时器的编码器…

【论文阅读35】-PINN review(2021)

这篇综述全面回顾了物理信息机器学习 的原理、应用、软件实现、理论进展与未来发展趋势&#xff0c;这样即使数据稀疏、带噪&#xff0c;也能保证预测结果符合物理规律&#xff0c;适合解决偏微分方程正问题、反问题、非线性动力学和多物理耦合系统等科学计算场景。 作者信息&…

深度学习初探:聚焦 Transformer 与 LLM 的核心世界

文章目录 前言一、神经网络基础&#xff1a;智能的基石二、Transformer 架构&#xff1a;AI 新纪元的基石Transformer 的核心特性Transformer 的关键组件 三、 大语言模型概览总结 前言 人工智能的浪潮正以前所未有的力量重塑世界&#xff0c;而这场变革的核心引擎之一&#x…

【开发杂谈】Auto Caption:使用 Electron 和 Python 开发实时字幕显示软件

项目已开源到 GitHub&#xff0c;项目地址&#xff1a;HiMeditator/auto-captionhttps://github.com/HiMeditator/auto-caption 软件下载(Windows平台)&#xff1a;Releases HiMeditator/auto-captionhttps://github.com/HiMeditator/auto-caption/releases 你是否遇到过看外…

临床项目范围管理:确保项目聚焦与成功交付

一、核心目标 1.1 清晰定义项目边界 1.1.1 明确项目目标 明确项目具体目标、可交付成果、研究活动、纳入/排除标准、数据收集范围等,为项目规划、执行、监控和控制奠定基础。 1.1.2 防止范围蔓延 严格控制未经批准的变更,避免项目目标、活动或可交付成果超出最初约定,导致…

opi是什么

是的&#xff0c;当然可以&#xff01;您提出了一个非常好的问题。 opi 远不止是一个 NVIDIA 驱动安装器&#xff0c;它是一个非常强大的、专为 openSUSE 设计的**“超级安装助手”**或“智能搜索工具”。 它的主要目的就是为了解决一个常见问题&#xff1a;“我想安装一个软…

【Go语言-Day 9】指针基础:深入理解内存地址与值传递

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…