【MySQL】事务及其隔离性/隔离级别

 目录

一、事务的概念

1、事务的四种特性

2、事务的作用

3、存储引擎对事务的支持

4、事务的提交方式

二、事务的启动、回滚与提交

1、准备工作:调整MySQL的默认隔离级别为最低/创建测试表

2、事务的启动、回滚与提交

3、启动事务后未commit,但是客户端崩了,MySQL会自动回滚

三、事务的隔离级别

1、隔离性

2、隔离级别

3、隔离性的查看和设置

3.1隔离性的查看

3.2设置隔离级别

4、四种隔离级别详解

4.1读未提交【Read Uncommitted】

4.2读提交【Read Committed】

4.3可重复读【Repeatable Read】

4.4串行化【Serializable】

一、事务的概念
1、事务的四种特性
事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。例如银行转账操作,上层看来是一个单纯的转账操作,但是下层却需要一条或多条SQL语句来完成转账操作,这一组SQL是一个整体,被称为事务。事务还规定不同的客户端看到的数据是不相同的。

一个 MySQL 数据库,可不止你一个事务在运行,同一时刻,有大量的请求被包装成事务,向 MySQL 服务器发起事务处理请求。如果多名用户都访问同样的表数据,在不加保护的情况,绝对会出现问题。并且事务由多条 SQL 构成,也会存在执行到一半出错或者不想再执行的情况,那么已经执行的怎么办呢?

所以一个完整的事务,绝对不是简单的 sql 集合,还需要满足如下四个属性:

原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 原子性、隔离性、持久性是因,一致性是果。

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交( Read uncommitted )、读提交( read committed )、可重复读( repeatable read )和串行化( Serializable )

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

上面四个属性,可以简称为 ACID 。

原子性(Atomicity,或称不可分割性)

一致性(Consistency)

隔离性(Isolation,又称独立性)

持久性(Durability)。

2、事务的作用
当程序员在编写上层代码逻辑访问数据库时,事务能够简化编程时需要考虑的多种细节问题,例如我们在使用事务时,要么提交要么回滚,不用去担心网络异常、服务器宕机等问题。

3、存储引擎对事务的支持


在 MySQL 中只有Innodb支持事务,而MyISAM不支持。

4、事务的提交方式
事务的提交方式分为自动提交和手动提交。

自动提交:

--查看MySQL事务的提交方式发现是自动提交
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.02 sec)
使用set改变MySQL的事务提交方式: 

--将MySQL的事务提交方式修改为禁止自动提交
mysql> set autocommit=0;
Query OK, 0 rows affected (0.01 sec)
 
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.00 sec)
 
--将MySQL的事务提交方式修改为开启自动提交
mysql> set autocommit=1;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)

二、事务的启动、回滚与提交
1、准备工作:调整MySQL的默认隔离级别为最低/创建测试表
为了看到演示现象,先将MySQL的默认隔离级别设置成读未提交(最低)后退出重启:

mysql> set global transaction isolation level read uncommitted;
Query OK, 0 rows affected (0.00 sec)
--修改默认隔离级别生效
mysql> select @@tx_isolation;
+------------------+
| @@tx_isolation   |
+------------------+
| READ-UNCOMMITTED |
+------------------+
1 row in set, 1 warning (0.00 sec)
创建测试表:

create table if not exists account(
id int primary key,
name varchar(50) not null default '',
blance decimal(10,2) not null default 0.0
)ENGINE=InnoDB DEFAULT CHARSET=UTF8;
2、事务的启动、回滚与提交
使用者:jly

--1、查看当前MySQL在线用户
mysql> show processlist;--开始一个事务也可以用begin
+-----+------+-----------+------------------+---------+------+----------+------------------+
| Id  | User | Host      | db               | Command | Time | State    | Info             |
+-----+------+-----------+------------------+---------+------+----------+------------------+
| 474 | jly  | localhost | transaction_data | Query   |    0 | starting | show processlist |
| 475 | jly  | localhost | NULL             | Sleep   |  132 |          | NULL             |
| 476 | root | localhost | NULL             | Sleep   |    5 |          | NULL             |
+-----+------+-----------+------------------+---------+------+----------+------------------+
3 rows in set (0.00 sec)
--2、先确认事务的提交方式为自动提交
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.02 sec)
--3、开始一个事务,start transaction执行之后,后方的SQL将处于同一个事务
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
--4、创建一个保存节点save1
mysql> savepoint save1;
Query OK, 0 rows affected (0.00 sec)
--5、在当前表中插入一条数据
mysql> insert into account values(1,'张三',1234.5);
Query OK, 1 row affected (0.00 sec)
--6、创建一个保存节点save2
mysql> savepoint save2;
Query OK, 0 rows affected (0.00 sec)
--7、在当前表中再次插入一条数据
mysql> insert into account values(2,'李四',998.561);
Query OK, 1 row affected, 1 warning (0.00 sec)
--8、创建一个保存节点save3
mysql> savepoint save3;
Query OK, 0 rows affected (0.00 sec)
--9、在当前表中再次插入一条数据
mysql> insert into account values(3,'王五',653.25);
Query OK, 1 row affected (0.00 sec)
--10、回滚到保存点save3
mysql> rollback to save3;--如果全部回滚,可以直接rollback;
Query OK, 0 rows affected (0.00 sec)
--11、提交以结束本次事务
mysql> commit;
Query OK, 0 rows affected (0.00 sec)

使用者:root

--当上方用户执行完第三步时,让另一个用户开始一个事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
--当上方用户执行完第五步时,root用户查看表发现表中存在一条数据
mysql> select* from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   | 1234.50 |
+----+--------+---------+
1 row in set (0.00 sec)
--当上方用户执行完第九步时,root用户查看表发现表中存在三条数据
mysql> select* from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   | 1234.50 |
|  2 | 李四   |  998.56 |
|  3 | 王五   |  653.25 |
+----+--------+---------+
3 rows in set (0.00 sec)
--当上方用户执行完第十步时,root用户查看表发现王五没了
mysql> select* from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   | 1234.50 |
|  2 | 李四   |  998.56 |
+----+--------+---------+
2 rows in set (0.00 sec)
--提交以结束本次事务
mysql> commit;
Query OK, 0 rows affected (0.00 sec)

1、如果在一个事务中,用户最终commit提交了本次事务,那么本次事务发生的数据修改将被MySQL持久化,想回滚已经没机会了。

2、如果从save3回滚到save1,发现滚过头了,是不能再从save1往前滚到save3的,MySQL会提示SAVEPOINT s3 does not exist。

3、启动事务后未commit,但是客户端崩了,MySQL会自动回滚
使用者:jly

--1、启动事务并插入数据
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select* from account;
Empty set (0.01 sec)
mysql> insert into account values(1,'张三',1234.5);
Query OK, 1 row affected (0.01 sec)
mysql> insert into account values(2,'李四',998.561);
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql> insert into account values(3,'王五',653.25);
Query OK, 1 row affected (0.00 sec)
--2、未commit,使用ctrl+\终止MySQL
mysql> Aborted
使用者:root

--1、启动事务
mysql> begin;
--当上方用户执行完第一步时,查看表
mysql> select* from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   | 1234.50 |
|  2 | 李四   |  998.56 |
|  3 | 王五   |  653.25 |
+----+--------+---------+
3 rows in set (0.00 sec)
--当上方用户执行完第二步时,查看表,发现数据回退
mysql> select* from account;
Empty set (0.00 sec)
启动事务后未commit,但是客户端崩了或者自己强行关闭客户端,MySQL会自动回滚

1、autocommit并不会影响begin后启动的事务的提交,使用begin后必须输入commit才能使数据持久化。

2、单句SQL本质就是事务,它的持久化和autocommit有关,autocommit为ON,表示单SQL无需手动commit自动提交,否则需要手动commit令数据持久化。(select有特殊情况,因为MySQL 有 MVCC )

3、事务可以手动回滚,同时,当操作异常,MySQL会自动回滚

4、我们能看到事务本身的原子性(rollback),持久性(commit)

三、事务的隔离级别
1、隔离性
1、MySQL服务可能会同时被多个客户端进程(线程)访问,访问的方式以事务方式进行。

2、一个事务可能由多条SQL构成,也就意味着,任何一个事务,都有执行前,执行中,执行后的阶段。而所谓的原子性,其实就是让用户层,要么看到执行前,要么看到执行后。执行中出现问题,可以随时回滚。所以单个事务,对用户表现出来的特性,就是原子性。

3、但是所有事务都要有个执行过程,那么在多个事务各自执行多个SQL的时候,就还是有可能会出现互相影响的情况。比如:多个事务同时访问同一张表,甚至同一行数据。

4、数据库中,为了保证事务执行过程中尽量不受干扰,就有了一个重要特征:隔离性 。

5、数据库中,允许事务受不同程度的干扰,就有了一种重要特征:隔离级别。

2、隔离级别
这四点都是关于读写并发的情况:

读未提交【Read Uncommitted】: 在该隔离级别,所有的事务都可以看到其他事务没有提交的执行结果。(实际生产中不可能使用这种隔离级别的),但是相当于没有任何隔离性,也会有很多并发问题,如脏读,幻读,不可重复读等,我们上面为了做实验方便,用的就是这个隔离性。

读提交【Read Committed】:该隔离级别是大多数数据库的默认的隔离级别(不是 MySQL 默认的)。它满足了隔离的简单定义:一个事务只能看到其他的已经提交的事务所做的改变。这种隔离级别会引起不可重复读,即一个事务执行时,如果多次 select,可能得到不同的结果。

可重复读【Repeatable Read】: 这是 MySQL 默认的隔离级别,它确保同一个事务,在执行中,多次读取操作数据时,会看到同样的数据行。但是有的数据库会有幻读问题。(MySQL不会)

串行化【Serializable】: 这是事务的最高隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决了幻读的问题。它在每个读的数据行上面加上共享锁,。但是可能会导致超时和锁竞争(这种隔离级别太极端,实际生产基本不使用)

隔离级别如何实现:隔离,基本都是通过锁实现的,不同的隔离级别,锁的使用是不同的。常见有,表锁,行锁,读锁,写锁,间隙锁(GAP),Next-Key锁(GAP+行锁)等。 

3、隔离性的查看和设置
3.1隔离性的查看
--查看全局的隔离级别
mysql> select @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| READ-UNCOMMITTED      |
+-----------------------+
1 row in set, 1 warning (0.02 sec)
 
--查看当前会话的隔离级别
mysql> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| READ-UNCOMMITTED       |
+------------------------+
1 row in set, 1 warning (0.00 sec)
 
--默认同上
mysql> select @@tx_isolation;
+------------------+
| @@tx_isolation   |
+------------------+
| READ-UNCOMMITTED |
+------------------+
1 row in set, 1 warning (0.00 sec)

当前会话的session的隔离级别是根据全局global的隔离级别来的。 

3.2设置隔离级别
语法:

--设置当前会话 or 全局隔离级别语法
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ
COMMITTED | REPEATABLE READ | SERIALIZABLE}
设置会话的隔离级别为读提交: 

mysql> set session transaction isolation level read committed;
Query OK, 0 rows affected (0.00 sec)
--修改后,全局隔离级别没有变,会话隔离级别被修改为读提交
mysql> select @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| READ-UNCOMMITTED      |
+-----------------------+
1 row in set, 1 warning (0.00 sec)
 
mysql> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| READ-COMMITTED         |
+------------------------+
1 row in set, 1 warning (0.00 sec)

将隔离级别修改为读提交,此时其他用户的隔离级别是不会被修改的,这修改的仅仅是当前用户的的隔离级别。

重新登录后,会话的隔离级别会按照全局隔离级别重新配置。

设置全局的隔离级别为串行化:

mysql> set global transaction isolation level SERIALIZABLE;
Query OK, 0 rows affected (0.01 sec)
 
--修改全局的隔离级别只影响全局的,当前会话和默认的隔离级别不变
mysql> select @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| SERIALIZABLE          |
+-----------------------+
1 row in set, 1 warning (0.00 sec)
 
mysql> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| READ-COMMITTED         |
+------------------------+
1 row in set, 1 warning (0.00 sec)
 
mysql> select @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set, 1 warning (0.00 sec)

当一个会话修改了全局隔离级别,将会同时修改其他所有会话的全局隔离级别。

后续登录时,会话和默认的隔离级别将会引用全局隔离级别的设置。

尽量保证隔离级别一致,闲的没事不要改事务的隔离级别。

4、四种隔离级别详解
4.1读未提交【Read Uncommitted】
--先设置当前的全局隔离级别为读未提交,再退出MySQL重新登录一下让其生效
mysql> set global transaction isolation level read uncommitted;
Query OK, 0 rows affected (0.01 sec)
本文第二章就是用读未提交来举例的。

在多个并行的会话中启动事务,一个事务在改动数据库哪怕没有commit提交,其他事务也是能够实时的看到它修改的数据。一个事务在执行中,读到另一个执行中事务的更新(或其他操作)但是未commit的数据,这种不合理的现象叫做脏读(dirty read)

读未提交的其他不合理现象还有不可重复读、幻读

读未提交几乎没有加锁,虽然效率高,但是问题太多,严重不建议采用。

4.2读提交【Read Committed】
使用者:jly

--1、先设置当前的全局隔离级别为读提交,再退出MySQL重新登录一下让其生效
mysql> set global transaction isolation level read committed;
Query OK, 0 rows affected (0.00 sec)
--2、开始事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
--3、插入一条数据
mysql> insert into account values (4,'赵六',123);
Query OK, 1 row affected (0.01 sec)
--4、提交
mysql> commit;
Query OK, 0 rows affected (0.02 sec)
使用者:root

--开始事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
--当上方用户执行完第3步时,查看表数据,并没有看到插入的赵六的信息
mysql> select* from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   | 1234.50 |
|  2 | 李四   |  998.56 |
|  3 | 王五   |  653.25 |
+----+--------+---------+
3 rows in set (0.01 sec)
--当上方用户执行完第4步时,查看表数据,能够看到赵六的信息
mysql> select* from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   | 1234.50 |
|  2 | 李四   |  998.56 |
|  3 | 王五   |  653.25 |
|  4 | 赵六   |  123.00 |
+----+--------+---------+
4 rows in set (0.02 sec)

通过试验可以发现读提交级别,事务A在commit提交事务之前,所做的修改是不会被其他事务看到的,一旦事务A发起commit之后,其他事务就能看到事务A对数据的修改。这就造成了其他事务在不同的时间点select查看数据库时,会查到不同的数据。这种现象叫不可重复读。(事务中的读取不是原子的)

4.3可重复读【Repeatable Read】
可重复读是MySQL默认的隔离级别。

使用者:jly

--1、重启MySQL
systemctl restart mysqld
--2、重启后查看默认的隔离级别为读提交
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set, 1 warning (0.00 sec)
--3、启动事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
--4、将id为2的名字(李四)修改为张三
mysql> update account set name='张三' where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select* from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   | 1234.50 |
|  2 | 张三   |  998.56 |
|  3 | 王五   |  653.25 |
|  4 | 赵六   |  123.00 |
+----+--------+---------+
4 rows in set (0.01 sec)
--5、提交事务
mysql> commit;
Query OK, 0 rows affected (0.00 sec)

使用者:root

--启动事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
--当上方用户执行完第4步时,查看表数据,李四并没有被修改为张三
mysql> select *from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   | 1234.50 |
|  2 | 李四   |  998.56 |
|  3 | 王五   |  653.25 |
|  4 | 赵六   |  123.00 |
+----+--------+---------+
4 rows in set (0.00 sec)
--提交事务
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
--当上方用户执行完第5步时,查看表数据,李四被修改为张三
mysql> select *from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   | 1234.50 |
|  2 | 张三   |  998.56 |
|  3 | 王五   |  653.25 |
|  4 | 赵六   |  123.00 |
+----+--------+---------+
4 rows in set (0.00 sec)

在该隔离级别下,MySQL的一个事务在commit提交前,不会影响到另一个事务的读取,该隔离级别被称为可重复读。

一般的数据库在可重复读情况的时候,无法屏蔽其他事务insert的数据,因为隔离性实现是对数据加锁完成的,而insert待插入的数据因为并不存在,那么一般加锁无法屏蔽这类问题,这会造成大部分内容虽然是可重复读的,但是insert的数据在可重复读情况被读取出来,导致多次查找时,会多查找出来新的记录,就如同产生了幻觉。这种现象,叫做幻读(phantom read,主要针对插入场景)。很明显,MySQL在RR级别的时候,是解决了幻读问题的(解决的方式是用Next-Key锁 (GAP+行锁)解决的。) 

4.4串行化【Serializable】
串行化就是对所有事务进行加锁,事务的执行全部挨个排队,这就导致了效率低下问题。

开启事务A和事务B,两个事务同时select读取将使用共享锁,不会串行化;事务A中有更新等操作,会阻塞A,直到事务B提交。如果事务A阻塞时间过长,将会由于锁等待超时退出当前事务。

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

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

相关文章

MVP产品设计与数据指标

MVP(minimum viable product,最小化可行产品)概念最早由埃里克莱斯提出,刊载于哈弗商业评论,并有出版物《精益创业》 和常规产品不同,MVP更侧重于对未知市场的勘测,用最小的代价接触客户的方法…

学习Nginx(一):基础

介绍 Nginx是一个高性能的HTTP和反向代理的web服务器,它的设计重点是高并发、高性能和低内存消耗。它常被用于提供静态内容、负载均衡和作为Web服务器。 Nginx具有以下功能和特点: 静态文件服务:作为一个Web服务器,Nginx可以处…

GPT-4o可以用了

方法:挂日本/新加坡的梯子就可以了,打开就会弹出以下的弹窗。不过不知道可以用多久呢? 2024/5/15

木里风景文化|基于SSM+vue的木里风景文化管理平台的设计与实现(源码+数据库+文档)

木里风景文化管理平台 目录 基于SSM+vue的木里风景文化管理平台的设计与实现 一、前言 二、系统设计 三、系统功能设计 1 系统功能模块 2 管理员功能模块 3 用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源…

全知人工智能的黎明:OpenAI 革命性的 GPT-4o 揭晓

全知人工智能的黎明:OpenAI 革命性的 GPT-4o 揭晓 在一项突破性的公告中,OpenAI 推出了其最新的旗舰人工智能模型 GPT-4o,该模型有望彻底改变我们与人工智能交互的方式。这种无所不知的人工智能模型拥有前所未有的能力,从实时翻译…

Redis-持久化操作-AOF

持久化操作-AOF AOF是什么? 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只允许加文 件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之…

Axure10_win安装教程(安装、汉化、授权码,去弹窗)

1.下载Axure10 链接:https://pan.baidu.com/s/1fc8Bgyic8Ct__1IOv-afUg 提取码:9qew 2.安装Axure10 因为我的电脑是Windows操作系统,所以我下载的AxureRP-Setup-Beta v10.0.0.3816 (Win).exe 一直点下一步就行 3.Axure10中文 打开Axure…

LangChain-Chatchat 实践

目录 1. 说明 相关路径: 安装环境: 2. 安装 2.1 工具准备 2.2 资料准备 2.3 执行 3. 测试 3.1 LLM对话 3.2 知识库 3.3 API 接口 参考 1. 说明 比较了几个AI LLM的集成应用工具(比如Quivr, Dify, one-api), 还是LangChain-Chatchat更符合我的需要: 支持私有化部署…

RS485和RS232区别

RS485和RS232接口在物理外观上的区别主要在于连接器的类型和接线方式上。这两种串行通讯接口虽然在功能上有所不同,但外观上也有一些显著的特点。 连接器类型: RS232 接口通常使用DB9或DB25类型的连接器。DB9是较为常见的,拥有9个针脚&#x…

Adaboost集成学习 | Matlab实现基于CNN-BiLSTM-Adaboost集成学习时间序列预测(股票价格预测)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习 | Matlab实现基于CNN-BiLSTM-Adaboost集成学习时间序列预测(股票价格预测) 模型设计 融合Adaboost的CNN-BiLSTM模型的时间序列预测,下面是一个基本的框架。 数据准备: 收集并整理用于时…

卷积神经网络CNN的运行过程、常见术语与问题

目录 一、CNN运行过程 1、卷积(Convolution) 2、激活函数(activation function) 3、池化(pooling) 3.1 池化操作 3.2 池化过程 3.3 池化后结果 4、Flatten 5、全连接层 Flatten层的操作 全连接层…

语义分割——高分卫星土地覆盖数据集

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …

2.3 应用集成技术

第2章 信息技术知识 2.3 应用集成技术 2.3.1 数据库与数据仓库技术 数据库 以单一的数据源即数据库为中心进行事务处理、批处理、决策分析等各种数据处理工作操作型处理也称事务处理,指的是对联机数据库的日常操作,通常是对数据库中记录的查询和修改…

Vitis HLS 学习笔记--资源绑定-使用URAM

目录 1. 简介 2. 代码解析 2.1 代码总览 2.2 优化指令 2.3 综合报告 3. 总结 1. 简介 Vivado IP 流程中的 AP_Memory,它用于与存储器资源(如 BRAM 和URAM)进行通信。不同于全局存储器(DDR),对此专用…

聊一聊Spring为什么需要三级缓存

写在文章开头 笔者在很早整理过一篇关于AOP的源码的文章,阅读起来晦涩难懂,在复盘时就有了想重构的想法,所以就借着这一话题重新聊一聊Spring中的三级缓存。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源项目 Java Guide …

Sketch总结

sketch禁用了lineGap https://www.sketch.com/docs/designing/text/ http://www.sketchcn.com/sketch-chinese-user-manual.html https://github.com/sketch-hq/sketch-document https://developer.sketch.com/file-format/ https://animaapp.github.io/sketch-web-viewer/ htt…

IP代理中的SOCKS5代理是什么?安全吗?

在互联网世界中,网络安全和个人隐私保护变得日益重要。SOCKS5代理作为一种安全高效的网络工具,不仅可以保护个人隐私安全,还可以提供更稳定、更快度的网络连接。本文将带大家深入了解SOCKS5代理在网络安全领域中的应用。 什么是SOCKS5代理 …

k8s的整体架构及其内部工作原理,以及创建一个pod的原理

一、k8s整体架构 二、k8s的作用,为什么要用k8s,以及服务器的发展历程 1、服务器:缺点容易浪费资源,且每个服务器都要装系统,且扩展迁移成本高 2、虚拟机很好地解决了服务器浪费资源的缺点,且部署快&#x…

TDesign:腾讯企业级设计体系的UI组件库详解

随着时代的快速发展,产品规模不断扩大,传统的研发模式已不能满足市场需求。如何在设计和研发工作中实现高效的协调已成为一个大问题。腾讯企业级设计系统TDesign大量开源,为产品体验设计提供了新的解决方案! TDesign是一套完整的…

JVM运行时内存整体结构一览

文章目录 Java 虚拟机 (JVM) 运行时内存由程序计时器, 堆, 方法区, 本地方法栈, 虚拟机栈,构成 Java 虚拟机 (JVM) 运行时内存布局主要包括以下几个部分: 程序计数器 (Program Counter Register): 每个线程都有一个程序计数器,它是当前线程执行的字节码…