Mysql 主从复制、读写分离

news2024/11/26 3:25:34

目录

前言

一、主从复制原理

1.1 MySQL的复制类型

1.2 mysql主从复制的工作原理

1.3 MySQL主从复制延迟

1.4 MySQL四种同步方式

1.5 MySQL支持的复制类型

二、 MySQL应用场景

三、主从复制实验

3.1 MySQL主从服务器时间同步

3.1.1 安装ntp、修改配置文件

3.1.2 两台SLAVE服务器配置

3.2 配置主从同步

3.2.1 master服务器修改配置文件

 3.2.2 从服务器配置

3.3 测试数据同步

四、MySQL 读写分离

4.1 MySQL读写分离原理

4.2 读写分离存在意义

4.3 常见的两种 MySQL 读写分离分

4.3.1 基于程序代码内部实现

4.3.2 基于中间代理层实现 

4.3.3 Amoeba

4.4 MySQL读写分离原理

五、MySQL四种同步方式

5.1 异步复制(Async Replication)

5.2 同步复制(Sync Replication)

5.3 半同步复制(Semi-Sync Replication)

5.4 增强半同步复制(lossless Semi-Sync Replication、无损复制)

六、搭建 MySQL 读写分离  

6.1  Amoeba服务器配置

6.2 配置 Amoeba读写分离,两个 Slave 读负载均衡

 6.3 回到amoeba服务器配置amoeba服务

6.4 修改数据库配置文件 

6.5 测试读写分离 


前言

在企业应用中,成熟的业务通常数据量都比较大 单台MySQL在安全性、 高可用性和高并发方面都无法满足实际的需求 配置多台主从数据库服务器以实现读写分离

一、主从复制原理

1.1 MySQL的复制类型

  •  基于SQL语句的复制(STATEMENT默认)
  •  基于行的复制(ROW)
  •  混合类型的复制(MIXED)

1.2 mysql主从复制的工作原理

【两个日志,三个线程】

两个日志:Binary log:二进制日志;relay log:中继日志
三个线程:从服务器的I/O线程、SQL线程、主服务器的dump线程

Binary log:二进制日志;relay log:中继日志
主服务器会把数据写进二进制文件里面---》
然后从服务器的i/o线程向dump发出同步请求,dump把数据发送给i/o线程,然后i/o写入到本地的中继日志---》
然后通过mysql从服务器的sql线程来读取中继日志,实现`重放`的功能,同步到自己的数据库中
最终实现mysql主从复制同步
  • 主服务器 master 记录数据库通过 dump 线程将操作记录到 Binary log。
  • 从服务器开启 I/O 线程向主服务器发送同步日志请求。
  • 主服务器把二进制日志内容发送给从服务器。
  • 从服务器将二进制日志记录的操作同步到relay log (中继日志) (存在从服务器的缓存中)。
  • 从服务器中的sql线程将relay log日志记录的操作在从服务器执行后写入从服务器数据库。

  1. 首先client端(tomcat)将数据写入到master节点的数据库中,master节点会通知存储引擎提交事务,同时会将数据以(基于行、基于sql、基于混合)的方式保存在二进制日志中
  2. SLAVE节点会开启I/O线程,用于监听master的二进制日志的更新,一旦发生更新内容,则向master的dump线程发出同步请求
  3. master的dump线程在接收到SLAVE的I/O请求后,会读取二进制文件中更新的数据,并发送给SLAVE的I/O线程
  4. SLAVE的I/O线程接收到数据后,会保存在SLAVE节点的中继日志中
  5. 同时,SLAVE节点中的SQL线程,会读取中继日志中的数据,更新在本地的mysql数据库中
  6. 最终,完成slave——>复制master数据,达到主从同步的效果 

1.3 MySQL主从复制延迟

  1. master服务器高并发,形成大量事务
  2. 网络延迟
  3. 主从硬件设备导致 cpu主频、内存io、硬盘io
  4. 本来就不是同步复制、而是异步复制 从库优化Mysql参数。比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。
  5. 从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o方面性。 从库使用SSD磁盘 网络优化,避免跨机房实现同步

问题解决方法

  • 半同步复制- 解决数据丢失的问题
  • 并行复制---解决从库复制延迟的问题

1.4 MySQL四种同步方式

异步复制(asynchronous)

  • 搭建简单,使用非常广泛,从mysql诞生之初,就产生了这种架构,性能非常好,可为非常成熟。但是这种架构数据是异步的,所以有丢书数据库的风险。
主服务器不需要等待从服务器是否把二进制文件拷入到中继日志中,就开始读取新的请求了。


同步复制(sync replication)

  • 同步复制提供了最佳安全性,保证数据安全,不丢数据,损失性能
主服务器需要等待从服务器把二进制文件拷入到中继日志中,并且还要从库中执行完成,主服务器才能开始读取新的请求了。

半同步复制(Semi synchronous)

  • 性能、功能都介于异步和全同步之间。从mysql5.5开始诞生,目的是为了折中上述两种架构性能已优缺点。
主服务器需要等待从服务器是否把二进制文件拷入到中继日志中,不管你是否在从库中执行完成,就开始读取新的请求了。


增强版的半同步复制(lossless replication)

数据零丢失,无损复制,性能好,mysql5.7诞生

1.5 MySQL支持的复制类型

  1. STATEMENT:基于语句的复制在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制。
  2. ROW:基于行的复制,把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
  3. MIXED:混合类型的复制,默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行复制。

二、 MySQL应用场景

  • mysql 数据库 主要的性能是读和写,一般场景来说读请求更多。
  • 根据主从复制可以演变成读写分离,因为读写分离基于主从复制,使用读写分离从而解决高并发的问题。

mysql架构演变的方向:

  1. 单台mysql有单点故障 集群---》
  2. 主从复制
  3. 主从复制渡河写的压力不均衡
  4. 读写分离
  5. 读写分离的基础是主从复制
  6. mysql的高可用架构MHA(master HA高可用) MGR MMM

三、主从复制实验

主机操作系统IP地址所需工具/软件/安装包
MasterCentOS7192.168.19.3ntp 、 mysql-boost-5.7.20.tar.gz
Slave1CentOS7192.168.19.6ntp 、ntpdate 、mysql-boost-5.7.20.tar.gz
Slave2CentOS7192.168.19.7ntp 、ntpdate 、 mysql-boost-5.7.20.tar.gz
AmoebaCentOS7192.168.19.4jdk-6u14-linux-x64.bin、amoeba-mysql-binary-2.2.0.tar.gz
客户端CentOS7192.168.19.5

3.1 MySQL主从服务器时间同步

3.1.1 安装ntp、修改配置文件


yum -y install ntp
vim /etc/ntp.conf

末尾添加 

server 127.127.19.0              #设置本地是时钟源,注意修改网段
fudge 127.127.19.0 stratum 10         #设置时间层级为10(限制在15内)

 

3.1.2 两台SLAVE服务器配置

yum install ntp ntpdate -y
ntpdate 192.168.19.3
crontable -e
*/10 * * * * /usr/sbin/ntpdate 192.168.19.3

两台从服务器配置相同

 

 

3.2 配置主从同步

3.2.1 master服务器修改配置文件

 vim /etc/my.cnf
#在mysqld模块下修改一下内容
#开启二进制日志文件(之后生成的日志名为master-bin)
log_bin=master-bin
#开启从服务器日志同步
log_slave-updates=true
#主服务器id为1(不可重复)
server_id = 1
--------》wq

重启服务

 

配置规则
mysql -uroot -p
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.19.%' IDENTIFIED BY '123456';
刷新权限表
flush privileges;
查看master数据库状态
show master status;

 

3.2.2 从服务器配置

vim /etc/my.cnf
server-id = 2           #修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin           #添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index   #添加,定义中继日志文件的位置和名称
relay_log_recovery = 1                       #选配项
#当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay-log,并且重新从 master 上获取日志,这样就保证了relay-log 的完整性。默认情况下该功能是关闭的,将 relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。
 
systemctl restart mysqld
 
mysql -u root -p
change master to master_host='192.168.19.3' , master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1311;
#配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致,这里的是例子,每个人的都不一样
 
start slave;            #启动同步,如有报错执行 reset slave;
show slave status\G         #查看 Slave 状态
//确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes       #负责与主机的io通信
Slave_SQL_Running: Yes        #负责自己的slave mysql进程

 

 

3.3 测试数据同步

在主服务器上创建一个数据库

在两台从服务器上直接查看数据库列表

 

 

四、MySQL 读写分离

4.1 MySQL读写分离原理

  • 读写分离基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

4.2 读写分离存在意义

  • 因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。
  • 但是数据库的“读”(读10000条数据可能只要5秒钟)。
  • 所以读写分离,解决的是,数据库的写入,影响了查询的效率

4.3 常见的两种 MySQL 读写分离分

4.3.1 基于程序代码内部实现

  • 在代码中根据 select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。
  • 优点是性能较好,因为在程序代码中实现,不需要增加额外的设备为硬件开支;缺点是需要开发人员来实现,运维人员无从下手。
  • 但是并不是所有的应用都适合在程序代码中实现读写分离,像一些大型复杂的Java应用,如果在程序代码中实现读写分离对代码改动就较大。

4.3.2 基于中间代理层实现 

  • 代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有以下代表性程序:
  • MySQL-Proxy。MySQL-Proxy 为 MySQL 开源项目,通过其自带的 lua 脚本进行SQL 判断。
  • Atlas。是由奇虎360的Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。支持事物以及存储过程。

4.3.3 Amoeba

  • 读取请求发送给从服务器是,采用轮询调度算法
  • amoeba使用的java语言编写,配置文件为xml
  • amoeba主要负责对外的一个代理IP
  • 访问这个IP时,发送的请求为“写”请求,则会转给主服务器
  • 当发送的请求为读时,会通过调度转发给从服务器,使用轮询算法,轮流分配给两台从服务器
  • amoeba可以视为调度器,如果主服务器挂掉(单点故障),则会有MHA解决这个问题
  • 由于使用MySQL Proxy需要写大量的Lua脚本,这些Lua脚本不是现成的,而需要自己编写,这对于并不熟悉MySQL Proxy内置变量和MySQL Protocol的人来说是非常困难的。Amoeba是一个非常容易使用,可移植性非常强的软件,因此它在生产环境中被广泛用于数据库的代理层。

4.4 MySQL读写分离原理

  • 读写分离就是只在主服务器上写,只在从服务器上读。
  • 基本的原理是让主数据库处理事务性查询,而从数据库处理 select 查询。
  • 数据库复制被用来把主数据库上事务性查询导致的变更同步到集群中的从数据库。
  • 数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询(select)多的情况下会考虑使用。利用数据库主从同步,再通过读写分离可以分担数据库压力,提高性能。

五、MySQL四种同步方式


5.1 异步复制(Async Replication)

  • 默认同步方式是异步复制。主库将更新写入Binlog日志文件后,不需要等待数据更新是否已经复制到从库中,就可以继续处理更多的请求。Master将事件写入binlog,但并不知道Slave是否或何时已经接收且已处理。在异步复制的机制的情况下,如果Master宕机,事务在Master上已提交,但很可能这些事务没有传到任何的Slave上。假设有Master->Salve故障转移的机制,此时Slave也可能会丢失事务。MySQL复制默认是异步复制,异步复制提供了最佳性能。

5.2 同步复制(Sync Replication)

  • 主库将更新写入Binlog日志文件后,需要等待数据更新已经复制到从库中,并且已经在从库执行成功,然后才能返回继续处理其它的请求。同步复制提供了最佳安全性,保证数据安全,数据不会丢失,但对性能有一定的影响。

5.3 半同步复制(Semi-Sync Replication)

  • 主库提交更新写入二进制日志文件后,等待数据更新写入了从服务器中继日志中,然后才能再继续处理其它请求。该功能确保至少有1个从库接收完主库传递过来的binlog内容已经写入到自己的relay log里面了,才会通知主库上面的等待线程,该操作完毕。
  • 半同步复制,是最佳安全性与最佳性能之间的一个折中。
  • MySQL 5.5版本之后引入了半同步复制功能,主从服务器必须安装半同步复制插件,才能开启该复制功能。如果等待超时,超过rpl_semi_sync_master_timeout参数设置时间(默认值为10000,表示10秒),则关闭半同步复制,并自动转换为异步复制模式。当master dump线程发送完一个事务的所有事件之后,如果在rpl_semi_sync_master_timeout内,收到了从库的响应,则主从又重新恢复为增强半同步复制。
  • ACK (Acknowledge character)即是确认字符。

5.4 增强半同步复制(lossless Semi-Sync Replication、无损复制)

  • 增强半同步是在MySQL 5.7引入,其实半同步可以看成是一个过渡功能,因为默认的配置就是增强半同步,所以,大家一般说的半同步复制其实就是增强的半同步复制,也就是无损复制。
  • 增强半同步和半同步不同的是,等待ACK时间不同
  • rpl_semi_sync_master_wait_point = AFTER_SYNC(默认)
  • 半同步的问题是因为等待ACK的点是Commit之后,此时Master已经完成数据变更,用户已经可以看到最新数据,当Binlog还未同步到Slave时,发生主从切换,那么此时从库是没有这个最新数据的,用户看到的是老数据。
  • 增强半同步将等待ACK的点放在提交Commit之前,此时数据还未被提交,外界看不到数据变更,此时如果发送主从切换,新库依然还是老数据,不存在数据不一致的问题。

六、搭建 MySQL 读写分离  

6.1  Amoeba服务器配置

Amoeba(192.168.19.4)

因为 Amoeba 基于是 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用。
将jdk-6u14-linux-x64.bin 和 amoeba-mysql-binary-2.2.0.tar.gz.0 上传到/opt目录下。
 
cd /opt/
cp jdk-6u14-linux-x64.bin /usr/local/
 
cd /usr/local/
chmod +x jdk-6u14-linux-x64.bin 
./jdk-6u14-linux-x64.bin
按空格到最后一行
按yes,按enter
 
mv jdk1.6.0_14/ /usr/local/jdk1.6
 
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
 
source /etc/profile
java -version
 
##安装 Amoeba软件##
mkdir /usr/local/amoeba
tar zxvf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
//如显示amoeba start|stop 说明安装成功

 

   

 

 

 

6.2 配置 Amoeba读写分离,两个 Slave 读负载均衡

 

 

6.3 回到amoeba服务器配置amoeba服务

cd /usr/local/amoeba/conf/
 
cp amoeba.xml amoeba.xml.bak
vim amoeba.xml                  #修改amoeba配置文件
 
30修改
<property name="user">amoeba</property>
32修改
<property name="password">123456</property>
115修改
<property name="defaultPool">master</property>
117去掉注释–
<property name="writePool">master</property>
<property name="readPool">slaves</property>

 

 

6.4 修改数据库配置文件 

cp dbServers.xml dbServers.xml.bak
 
vim dbServers.xml               #修改数据库配置文件
 
23注释掉
作用:默认进入test库 以防mysql中没有test库时,会报错
<!-- mysql schema 
<property name="schema">test</property>
-->
26修改
<!-- mysql user -->
<property name="user">test</property>
28-30去掉注释
<property name="password">123456</property>
45修改,设置主服务器的名Master
<dbServer name="master"  parent="abstractServer">
48修改,设置主服务器的地址
<property name="ipAddress">192.168.223.10</property>
52修改,设置从服务器的名slave1
<dbServer name="slave1"  parent="abstractServer">
55修改,设置从服务器1的地址
<property name="ipAddress">192.168.223.9</property>
58复制上面6行粘贴,设置从服务器2的名slave2和地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.223.11</property>
65修改
<dbServer name="slaves" virtual="true">
71修改
<property name="poolNames">slave1,slave2</property>
 
/usr/local/amoeba/bin/amoeba start&         #启动Amoeba软件,按ctrl+c 返回
netstat -anpt | grep java             #查看8066端口是否开启,默认端口为TCP 8066

 

 

 

 

 

6.5 测试读写分离 

在客户端服务器上进行测试:

使用yum快速安装MySQL虚拟客户端

通过amoeba服务器代理访问mysql ,在通过客户端连接mysql后写入的数据只有主服务会记录,然后同步给从服务器

在主服务器上:
use db_test;
create table test (id int(10),name varchar(10),address varchar(20));

 

在两台从服务器上:
stop slave;											#关闭同步
use db_test;
//在slave1上:
insert into test values('1','zhangsan','this_is_slave1');

//在slave2上:
insert into test values('2','lisi','this_is_slave2');

//在主服务器上:
insert into test values('3','wangwu','this_is_master');

//在客户端服务器上:
use db_test;
select * from test;		//客户端会分别向slave1和slave2读取数据,显示的只有在两个从服务器上添加的数据,没有在主服务器上添加的数据

insert into test values('4','qianqi','this_is_client');		//只有主服务器上有此数据

//在两个从服务器上执行 start slave; 即可实现同步在主服务器上添加的数据
start slave;

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何查看小程序的APPID和AppSecret

小程序APPID可以在手机上打开小程序后&#xff0c;点击右上角三点&#xff1a; 然后点击中间位置的小程序名称&#xff0c;进入小程序介绍页面&#xff1a; 点击“更多资料”后&#xff0c;进入页面就可以看到上方有APPID&#xff1a; 另一种方法&#xff1a; 在微信公众平台登…

安装:【vue】npm install -g @vue/cli出现错误

安装Vue脚手架&#xff0c;cli就是Command Line Interface 命令行接口 工具 进行到npm install -g vue/cli这一步出现错误&#xff0c;操作步骤如下&#xff1a; 1.通过 wins打开开始栏的搜索框&#xff0c;输入cmd&#xff0c;管理员身份运行 2.先下载node.js 不知道有没有…

数据库应用:Mycat+HAProxy+Keepalived实现高可用

目录 一、理论 1.高可用 2.部署高可用 二、实验 1.MycatHAProxyKeepalived实现高可用 三、问题 1.开启HA-Proxy失败 2. VMware 克隆linux 网卡UUID重复问题 3.keepalived状态报错 四、总结 一、理论 1.高可用 &#xff08;1&#xff09;概述 ①Mycat 在实际项目中…

蓝桥杯专题-真题版含答案-【加法变乘法】【三羊献瑞】【交换瓶子】【卡片换位】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【专题速递】多模态数字人、多模态媒体大模型以及AI与AIGC对音视频的影响

// 随着AIGC内容的兴起&#xff0c;多模态媒体大模型逐渐进入大家的视野&#xff0c;而LLM的发展又让人们对未来音视频工具产生了新的思考。7月29日LiveVideoStackCon2023上海站AIGC与内容生产专场&#xff0c;集齐当下最热门的AIGC话题&#xff0c;与您共享。 AIGC与内容生产…

华为云使用 helm 模板

登录华为云上的 cce 进入对应的集群&#xff0c;选择模板管理 注意&#xff1a;华为云上不能配置 helm 仓库&#xff0c;只提供手动上传模板&#xff0c;模板的后缀为 tgz 下载模板的方式有很多种&#xff0c;这里用 xxl-job 举例 添加 helm 仓库更新仓库下载模板 helm rep…

基于linux下的高并发服务器开发(第二章)- 2.24 信号集及相关函数

1.用户通过键盘 Ctrl C, 产生2号信号SIGINT (信号被创建) 2.信号产生但是没有被处理 &#xff08;未决&#xff09; - 在内核中将所有的没有被处理的信号存储在一个集合中 &#xff08;未决信号集&#xff09; - SIGINT信号状态被存储在第二个标志位上 - 这个…

概率论和随机过程的学习和整理--番外15,如何计算N合1的合成数量问题?

目录 1 目标问题&#xff1a;多阶2合1的合成问题 1.1 原始问题 1.2 合成问题要注意&#xff0c;合成的数量 1.3 合成问题不能用马尔科夫链来解决 2 方案1&#xff1a;用合成公式合成多次能解决吗&#xff1f; --不能&#xff0c;解决不了递归的问题 3 方案2&#xff0c;…

微分流形2:流形上的矢量场和张量场

来了来了&#xff0c;切向量&#xff0c;切空间。流形上的所有的线性泛函的集合&#xff0c;注意是函数的集合。然后取流形上的某点p&#xff0c;它的切向量为&#xff0c;线性泛函到实数的映射。没错&#xff0c;是函数到实数的映射&#xff0c;是不是想到了求导。我们要逐渐熟…

uni-app 微信小程序:启用组件按需注入

uni-app 微信小程序&#xff1a;启用组件按需注入 文章目录 uni-app 微信小程序&#xff1a;启用组件按需注入一、官方文档按需注入注意事项 二、HBuilder X 设置三、效果 一、官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ability/lazyload.html 按…

大数据面试题:HBase读写数据流程

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 参考答案&#xff1a; 1、写数据流程 1&#xff09;Client先访问zookeeper&#xff0c;获取hbase:meta表位于哪个Region Server。 2&#xff09;访…

MySQL的主从复制练习

基本原理图如下&#xff1a; 主从复制&#xff08;也称 AB 复制&#xff09;允许将来自一个MySQL数据库服务器&#xff08;主服务器&#xff09;的数据复制到一个或多个MySQL数据库服务器&#xff08;从服务器&#xff09;。当主库进行更新的时候&#xff0c;会自动将数据复制到…

【youcans动手学模型】目标检测之 RCNN 模型

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans动手学模型】目标检测之 RCNN 模型 1. R-CNN 目标检测1.1 论文摘要1.2 技术背景1.3 基本方法1.4 算法实现1.5 总结 2. 使用 PyTorch 实现 RCNN 目标检测2.1 训练 AlexNet 模型2.2 微调 Alex…

《个人理财》——第六章 理财规划计算工具与方法

考点1&#xff1a; 货币时间价值概述 货币时间价值 也叫资金的时间价值 • 货币在无风险条件下&#xff0c; 经历一定时间投资和再投资发生的增值 • 同等数量货币或现金流的未来价值更低 • 不同时间单位的货币不具有可比性 产生的原因• 现有货币用于投资&#xff0c; 可获得…

IDEA+SpringBoot +ssm+ Mybatis+easyui+Mysql求职招聘管理系统网站

IDEASpringBoot ssm MybatiseasyuiMysql求职招聘管理系统网站 一、系统介绍1.环境配置 二、系统展示1. 登录2.注册3.首页4.公司5.关于我们6.我的简历7.我投递的简历8.修改密码9. 管理员登录10.我的信息11.用户信息12.职位类别13. 职位列表14. 公司列表15. 日志列表 三、部分代码…

听GPT 讲K8s源代码--pkg(八)

k8s项目中 pkg/kubelet/envvars&#xff0c;pkg/kubelet/events&#xff0c;pkg/kubelet/eviction&#xff0c;pkg/kubelet/images&#xff0c;pkg/kubelet/kubeletconfig这些目录都是 kubelet 组件的不同功能模块所在的代码目录。 pkg/kubelet/envvars 目录中包含了与容器运行…

深度学习入门教学——神经网络

深度学习就是训练神经网络。 1、什么是神经网络&#xff1f; 举个最简单的例子&#xff0c;以下是一个使用线性回归来预测房屋价格的函数。这样一个用于预测房屋价格的函数被称作是一单个神经元。大一点的神经网络&#xff0c;就是将这些单个神经元叠加起来。例如&#xff1a…

Java基础之stream流最新版,stream流的基本操作

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

java 应用 cpu 过高故障排查

文章目录 一、前言二、测试代码 Test.java三、Linux 编译运行 Test.java 程序四、top 命令查看 cpu 使用情况五、查看进程下的线程详情 top -H -p 11748六、将线程 12240 的 pid 转为 16 进制 printf "0x%x\n" 12240七、jstack 查看进程的快照遗留 一、前言 前两天…