4.2.3 MYSQL事务原理分析
文章目录
- 4.2.3 MYSQL事务原理分析
- 1. 事务
- 1. 前提:并发连接访问
- 2. 事务定义
- 3. 事务语句:
- 4. acid特性
- 5. undolog-回滚日志
- 6. redolog-重做日志
- 2. 隔离级别
- 1. 四种隔离级别
- 2. 并发问题解释
- 3. 隔离级别设置
- 3. MVCC(Multiversion Concurrency Control,多版本并发控制)(重点)
- 1. read view
- 2. 不同隔离级别下MVCC行为
- 3. 快照读 VS 当前读
- 4. redo/undo
- 4. 锁
- 1. 锁的粒度
- 2. 锁类型
- 1. 全局锁
- 2. 表级锁
- 3. 行级锁
- 3. 锁的算法
- 5. 死锁
- 1. 相反加锁顺序死锁
- 2. 锁冲突死锁
- 3. 查看死锁
- 3. 如何避免死锁
4.2.3 MYSQL事务原理分析
1. 事务
1. 前提:并发连接访问
在数据库中,多个连接同时访问(并发),容易引发数据混乱,需要事务来保证操作的完整性和正确性
2. 事务定义
是用户定义一系列操作,这些操作要不然都做,要不然都不做,不可分割,告诉mysql这是不可分割的一系列整体
3. 事务语句:
-- 显示开启事务
START TRANSACTION
-- 提交事务,并使得已对数据库做的所有修改持久化
COMMIT
-- 回滚事务,结束用户的事务,并撤销正在进行的所有未提交的修改
ROLLBACK
-- 创建一个保存点,一个事务可以有多个保存点
SAVEPOINT identifier
-- 删除一个保存点
RELEASE SAVEPOINT identifier
-- 事务回滚到保存点
ROLLBACK TO [SAVEPOINT] identifier
4. acid特性
特性 | 解释 | 备注 |
---|---|---|
A - Atomicity(原子性) | 事务中的操作要么全部成功,要么全部失败 | 通过 undo log 支持回滚 |
C - Consistency(一致性) | 事务执行前后,数据保持一致 | 依靠约束、外键等规则 |
I - Isolation(隔离性) | 多个事务之间互不干扰 | MVCC支持非锁定一致性读 |
D - Durability(持久性) | 提交后的数据永久保存,即使系统宕机 | 依靠 redo log |
5. undolog-回滚日志
- 用于回滚数据
- 当事务执行过程中出现错误或被用户取消,undo log 记录修改前的旧值,可以通过它恢复原状
- 存在于 InnoDB 引擎中
6. redolog-重做日志
- 用于恢复数据
- 事务提交前,会先把修改写入 redo log,防止崩溃丢失
- 提交时再持久化到磁盘数据页,确保事务的持久性(D)
- InnoDB 特有,保证即使宕机也能恢复到提交状态
2. 隔离级别
- 并发访问时,如果没有控制好,事务之间互相干扰,可能会产生各种脏读、不可重复读、幻读等问题。
- 隔离级别就是用来平衡:并发性能 vs. 数据正确性(隔离得越严格,性能越低,但数据越安全)
1. 四种隔离级别
隔离级别 | 描述 | 可能出现的问题 |
---|---|---|
READ UNCOMMITTED(读未提交) | 可以读到别的事务未提交的数据 | 脏读、不可重复读、幻读 |
READ COMMITTED(读已提交) | 只能读到别的事务已提交的数据 | 不可重复读、幻读 |
REPEATABLE READ(可重复读)(MySQL默认) | 同一事务中,多次读取同一数据结果一致 | 幻读(MySQL用Gap锁避免了) |
SERIALIZABLE(可串行化) | 强制事务串行执行,完全隔离 | 无任何并发问题,但性能最低 |
2. 并发问题解释
- 脏读:读到了未提交事务修改的数据。
- 不可重复读:同一事务中两次读到的数据不一样(因为别的事务提交了修改)。
- 幻读:同一事务中,查询时发现新增了数据行
3. 隔离级别设置
-- 查看当前隔离级别
SELECT @@tx_isolation;--临时修改当前会话隔离级别(只影响当前连接)
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;--修改全局隔离级别(需要重启或新连接生效)
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
3. MVCC(Multiversion Concurrency Control,多版本并发控制)(重点)
-
提高并发性能,保证读一致性(不加锁也能读到合理数据)。用来实现一致性的非锁定读;非锁定读是指不需要等待访问的行上X锁的释放
-
原理:对每条记录保存多个版本(通过undo log),不同事务读取时根据自己的Read View判断可见性
1. read view
项目 | 作用 |
---|---|
m_ids | 当前活跃的事务ID集合(还未提交的事务) |
min_trx_id | 当前活跃事务中最小的事务ID |
max_trx_id | 下一个即将分配的事务ID |
creat_trx_id | 每一行数据的创建事务ID(trx_id字段) |
- trx_id < min_trx_id ;说明该记录在创建 read_view 之前已经提交,所以对当前事务可见;
- trx_id >= max_trx_id ;说明该记录是在创建 read_view 之后启动事务生成的,所以对当前事务
不可见; - min_trx_id <= trx_id < max_trx_id ;此时需要判断是否在 m_ids 列表中;
- 在列表中;生成该版本记录的事务仍处于活跃状态,该版本记录对当前事务不可见;
- 不在列表中;生成该版本记录的事务已经提交,该版本记录对当前事务可见;
2. 不同隔离级别下MVCC行为
在 read committed 和 read repeatable 隔离级别下,MVCC 采用 read view 来实现的,它们的区别在于创建 read view 时机不同
隔离级别 | MVCC处理 | 说明 |
---|---|---|
READ COMMITTED(读已提交) | 每次查询都生成新的 Read View | 读到别人刚提交的数据(变化的快照) |
REPEATABLE READ(可重复读) | 整个事务期间共用同一个 Read View | 保证事务内读到的数据不变 |
3. 快照读 VS 当前读
类型 | 说明 | 举例 |
---|---|---|
快照读(Snapshot Read) | 非锁定读,走MVCC快照 | SELECT * FROM table WHERE id = 1; |
当前读(Current Read) | 加锁读,拿最新版本 | SELECT * FROM table WHERE id = 1 FOR UPDATE; |
4. redo/undo
日志 | 作用 | 何时使用 |
---|---|---|
Redo Log | 用来恢复已提交事务的修改(崩溃恢复) | crash后根据redo log恢复 |
Undo Log | 保存数据的旧版本,供回滚或MVCC快照读使用 | 回滚或快照读时用 |
undo log 会随着事务提交后被清理掉(并不是永久保存)
4. 锁
在 MySQL 中,锁是并发控制的核心机制,主要包括不同粒度的锁(行、页、表)和不同类型的锁(共享锁、排他锁、意向锁等)。
1. 锁的粒度
MySQL 中事务使用的是粒度锁(Granular Locking),主要体现在以下三个层次:
- 表级锁(Table-Level Lock):作用于整张表,开销小,加锁快,但并发性低。
- 页级锁(Page-Level Lock):作用于数据页(主要用于 MyISAM 的索引缓存,InnoDB 不使用)。
3。 行级锁(Row-Level Lock):作用于某一行记录,开销大,加锁慢,但并发性好,InnoDB 支持。
2. 锁类型
1. 全局锁
- 全局只读锁:使用 FLUSH TABLES WITH READ LOCK,可用于做一致性备份,防止其他事务对数据进行修改。
- 全局写锁:使用 LOCK TABLES,可用于做表结构变更。
注意:
- 全局锁会锁定整个数据库,其他事务无法进行读写操作。
2. 表级锁
- 意向共享锁(IS Lock):事务打算对表中某些记录加共享锁
- 意向排他锁(IX Lock):事务打算对表中某些记录加排他锁
意向锁不会阻塞其他意向锁,但会与表级的共享或排他锁发生冲突
3. 行级锁
- 共享锁(S Lock):又称读锁,允许其他事务也获得该行的共享锁(读读并发)
- 排他锁(X Lock):又称写锁,阻止其他事务获得该行的任何锁(独占写)
InnoDB 使用MVCC + 行锁结合实现高并发控制
3. 锁的算法
InnoDB 使用多种行锁算法来保证事务隔离性
- 记录锁(Record Lock)
定义:锁定索引上的某一行记录。
作用:防止其他事务对该记录进行修改或删除。
示例:
SELECT * FROM user WHERE id = 5 FOR UPDATE;
若 id 有索引,这条语句会对 id=5 的那一条记录加记录锁
- 间隙锁(Gap Lock)
定义:锁定某一范围之间的间隙,不锁定已有记录。
作用:防止其他事务在该范围内插入新记录,避免“幻读”。
特点:仅适用于 范围查询,例如 <, >, BETWEEN。
示例:
SELECT * FROM user WHERE id < 5 FOR UPDATE;
会锁住 (5, ∞) 范围的间隙,阻止插入 id > 5 的新记录。
- 临键锁(Next-Key Lock)
定义:记录锁 + 前一个间隙锁的组合。
作用:锁定某一条记录及其前面的间隙。
目的:在可重复读(RR)隔离级别下防止幻读。
示例:
SELECT * FROM user WHERE id BETWEEN 5 AND 10 FOR UPDATE;
会加多个临键锁,如:
(4, 5],锁住 id=5
(5, 6],锁住 id=6
…
(9, 10],锁住 id=10
5. 死锁
死锁是指两个或多个事务在执行过程中因争夺资源而互相等待,导致程序无法继续执行下去的现象。在 InnoDB 中,死锁一旦被检测到,会自动回滚其中一个事务来解除死锁
1. 相反加锁顺序死锁
两个事务以不同顺序获取相同资源,互相等待对方释放。
示例:
-- 事务A
LOCK row 1;
LOCK row 2;-- 事务B
LOCK row 2;
LOCK row 1; -- 等待A释放,造成死锁
2. 锁冲突死锁
一个事务未能及时释放锁,另一个事务等待同一资源,导致互相阻塞。常见于高并发写操作 + 高隔离级别(如可重复读)
解决建议:
- 降低隔离级别至 Read Committed,避免不必要的间隙锁。
- 减小锁粒度,避免大范围更新或范围查询
3. 查看死锁
SHOW ENGINE INNODB STATUS; -- 查看死锁信息SELECT * FROM information_schema.INNODB_LOCKS;-- 查看当前锁信息
SELECT * FROM information_schema.INNODB_LOCK_WAITS;
3. 如何避免死锁
方法 | 说明 |
---|---|
统一加锁顺序 | 所有事务访问资源时使用一致的顺序加锁,避免环形等待 |
控制事务粒度与范围 | 缩小每个事务锁定的数据范围和执行时间 |
减少范围查询 | 减少 BETWEEN / < / > 查询,避免间隙锁干扰 |
合理设置索引 | 避免全表扫描导致不必要的行锁或表锁 |
设置死锁重试机制(代码层) | 捕获错误码 1213 ,程序自动重试一次事务操作 |
适当降低隔离级别 | 如使用 Read Committed 替代 Repeatable Read |
相关文章:
4.2.3 MYSQL事务原理分析
文章目录 4.2.3 MYSQL事务原理分析1. 事务1. 前提:并发连接访问2. 事务定义3. 事务语句:4. acid特性5. undolog-回滚日志6. redolog-重做日志 2. 隔离级别1. 四种隔离级别2. 并发问题解释3. 隔离级别设置 3. MVCC(Multiversion Concurrency Control&…...
极狐GitLab 如何使用文件导出迁移项目和群组?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 用文件导出迁移项目和群组 (FREE ALL) 推荐使用 直接传输 迁移群组和项目。然而,在某些情况下,您可能…...
Linux/AndroidOS中进程间的通信线程间的同步 - 管道和FIFO
前言 管道是 UNIX 系统上最古老的 IPC 方法,它在 20 世纪 70 年代早期 UNIX 的第三个版本上就出现了。管道为一个常见需求提供了一个优雅的解决方案:给定两个运行不同程序的进程,在 shell 中如何让一个进程的输出作为另一个进程的输入呢&…...
第十六届蓝桥杯 2025 C/C++组 破解信息
目录 题目: 题目描述: 题目链接: 思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: P12344 [蓝桥杯 2025 省 B/Python B 第二场] 破解信息…...
[FPGA Video IP] VDMA
Xilinx AXI Video Direct Memory Access IP (PG020) 详细介绍 概述 Xilinx AXI Video Direct Memory Access (AXI VDMA) LogiCORE™ IP 核(PG020)是一个软核 IP,专为视频应用设计,提供在内存与 AXI4-Stream 视频外设之间的高带宽…...
Ubuntu如何查看硬盘的使用情况,以及挂载情况。
在Ubuntu中查看硬盘使用情况及挂载情况,可通过以下命令实现: 一、查看硬盘使用情况 df -h 显示所有挂载文件系统的磁盘空间使用情况(含总容量、已用空间、可用空间等),输出结果以易读格式(如GB、MB&#x…...
第十六届蓝桥杯 2025 C/C++组 脉冲强度之和
目录 题目: 题目描述: 题目链接: 思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: P12338 [蓝桥杯 2025 省 B/Python B 第二场] 脉冲强度…...
23种设计模式-行为型模式之中介者模式(Java版本)
Java 中介者模式(Mediator Pattern)详解 🧠 什么是中介者模式? 中介者模式是一种行为型设计模式,它通过定义一个中介者对象来封装一组对象之间的交互。中介者使得各个对象不需要显式地知道彼此之间的关系,…...
集群与存储-lvs-nat实验
一、实验目的 1、熟练掌握ipvsadm 指令的使用 2、理解lvs 负载均衡的原理 3. 熟练掌握lvs-netnfs的配置 二、实验内容 1.拓扑图 2.实验步骤 #在节点服务器中添加网卡,选择仅主机模式 #查看网卡 #启用网卡 nmcli device up ens224 ip a #修改虚拟地址的网关 #…...
Android——Serializable和Parcelable
在Android中传递对象的方式 在 Android 开发中,Parcelable 和 Serializable 是两种用于对象序列化的接口 Serializable public class Student implements Serializable {public int id;public String name;public int age;public Student(int id, String name, i…...
python:sklearn 决策树(Decision Tree)
5. 决策树(Decision Tree) - 第5章 算法思想:基于信息增益(ID3)或基尼不纯度(CART)递归划分特征。 编写 test_dtree_1.py 如下 # -*- coding: utf-8 -*- """ 5. 决策树&…...
0-1背包难题哪家强:回溯法 VS 动态规划 VS 贪心算法
回溯法、动态规划和贪心算法是三种常见的算法设计思想,他们都可以用来解决0-1背包问题,但它们在解决问题的思路、适用条件和效率上存在显著差异。以下从多个维度进行对比分析: 相关系列文章链接: 《贪心算法 vs 动态规划:“急性子…...
JavaSE第12篇:接口interface
一、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings(ignore) import ssl ssl._create_default_https_con…...
一文掌握 npm 基础与常用指令
初学前端?npm 常用指令不熟?想了解 pnpm、yarn、cnpm 有什么不同? 这篇文章将带你从入门到精通,全面掌握 npm 的使用方法,以及选择适合自己项目的包管理工具! 文章目录 一、什么是 npm?二、npm …...
OpenObserve API Usage Guide for Log Management
OpenObserve API Usage Guide for Audit Log Management 1. 概述 1.1 目标 本文档旨在详细介绍 OpenObserve 的 API 使用方法,帮助用户通过 API 实现日志管理功能,包括日志摄入、查询、模糊匹配(类似 SQL 的 LIKE)、stream 管理…...
机器学习实操 第一部分 机器学习基础 第5章 支持向量机(SVM)
机器学习实操 第一部分 机器学习基础 第5章 支持向量机(SVM) 内容概要 第5章深入介绍了支持向量机(SVM),这是一种功能强大且应用广泛的机器学习模型。SVM适用于线性或非线性分类、回归以及 novelty detection。本章详…...
CSRF(cross-site request forgery)跨域请求访问
CSRF 当我们在成功登录一个网站后,会将后端返回的cookie数据进行存放,每一次访问该域名都会将cookie存放在请求头,也就相当于用户登录凭证, 但这种同域自动携带cookie存在一种问题 那就是当恶意网站也进去请求时,同样…...
Kafka的Rebalance机制可能引发什么问题?如何优化?怎么减少不必要的Rebalance
Rebalance机制的核心目的是确保每个消费者都能处理适当数量的分区,以实现负载均衡和高可用性。 一般是消费者组发生变化的时候,比如订阅主题,消费者数量等等发生变化,可能会导致rebalance,rebalance会导致消费者组短时…...
【和春笋一起学C++】函数——C++的编程模块
目录 1. 原型句法 2. 函数分类 3. 函数参数之按值传递 4. 数组作为函数参数 在C中,要使用函数,必须要有这三个方面: 函数原型,函数原型描述了函数到编译器的接口,函数原型一般放在include文件中。函数原型告诉编译…...
Java高频面试之并发编程-11
hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:父子线程如何共享数据? 在Java中,父子线程共享数据可以通过以下几种方式实现,具体…...
LangChain入门(四) 部署应用程序
1、使用LangServe部署应用程序 安装langserve pip install langserve[all] 代码示例 from fastapi import FastAPI from langchain.chat_models import init_chat_model from langchain_core.messages import SystemMessage, HumanMessage from langchain_core.output_parser…...
精益数据分析(31/126):电商关键指标深度解析与实战策略
精益数据分析(31/126):电商关键指标深度解析与实战策略 在创业和数据分析的探索之路上,每一次深入学习都像是解锁了新的技能,让我们离成功更近一步。今天,我依旧带着和大家共同进步的想法,深入…...
【MongoDB篇】MongoDB的集合操作!
目录 引言第一节:集合的“诞生”——自动出现还是手动打造?🤔第二节:集合的“查阅”——看看这个数据库里有哪些柜子?📂👀第三节:集合的“重命名”——给文件柜换个名字!…...
antd中的表格穿梭框(Transfer)如何使用
穿梭框是什么?怎么使用? 需求如下: 有一组端口需要分配给具体接口 功能要求: 1. 需要展示当前端口名称及其所属的接口 2. 需支持搜索功能可对端口名或接口名进行筛选便于分配 3. 分配端口时,需检测当前接口内的端口是否满足此接口最低要求 4. 提供Select下拉框,可供查…...
联邦学习与安全多方计算的结合是隐私保护机器学习领域
联邦学习(Federated Learning, FL)与安全多方计算(Secure Multi-Party Computation, MPC)的结合是隐私保护机器学习领域的前沿方向,其框架设计需兼顾计算效率、安全性和可扩展性。以下是结合两者的框架设计与实现流程的详细解析: 一、框架设计核心目标 隐私保护:确保多…...
mongoose的介绍,连接数据库
Mongoose 是一个基于 Node.js 的 MongoDB ODM(Object Data Modeling)库,用于在 MongoDB 和 Node.js 应用之间提供结构化的模型层,帮助你更优雅、安全地操作数据库。 🧾 一、Mongoose 简介 📦 功能ÿ…...
Pytest中的fixture装饰器详解
pytest是Python生态中最流行的自动化测试框架,它通过简洁的语法、强大的功能(如fixture、参数化、插件扩展等)和丰富的插件生态,帮助开发者高效完成单元测试、集成测试和端到端测试。fixture是pytest框架中最核心、最强大的功能之一,它提供了…...
Linux系统配置JDK
目录 一、xftp传输JDK包 1、新建xftp会话并连接到我们的服务器 2、上传jdk包 二、配置环境变量 为了方便javaweb项目的建立,我们需要在搭建好的linux环境下配置安装JDK环境 一、xftp传输JDK包 因为jdk包文件比较大了,这时候不能使用简单的linux上传…...
通义千问最新一代大语言模型Qwen3发布了
通义千问Qwen3全面解析:最强开源大模型Ollama本地运行实战 🔥 最新重大好消息! 经过漫长的等待,今天凌晨阿里云正式发布了Qwen3大语言模型!本次更新带来了0.6b 1.7b 4b 8b 14b 30b 32b 235b超大参数模型,更…...
想做博闻强记的自己
2025年4月29日,13~25℃,还好 待办: 冶金《物理》期末测试 阅卷(冶金《物理》期末测试试卷) 重修《物理》《物理2》电子材料归档 规则变更,《高等数学2》期末试卷推倒重来 遇见:直播画面。 感受…...
爱普生SG2520HHN晶振数据中心服务器的理想解决方案
在当今数字化时代,数据中心作为海量数据存储、处理与传输的核心枢纽,其服务器的高效稳定运行至关重要。服务器作为其核心设备,对时钟信号的精度和稳定性提出了严苛要求——微小的时序误差可能导致数据传输失败或系统宕机。爱普生 SG2520HHN 差…...
【Prometheus-MySQL Exporter安装配置指南,开机自启】
目录 1. 创建 MySQL 监控用户2. 配置 MySQL 认证文件3. 安装 mysqld_exporter4. 配置 Systemd 服务5. 启动并验证服务6. 修改Prometheus配置常见错误排查错误现象排查步骤 6. 验证监控数据关键注意事项 1. 创建 MySQL 监控用户 mysql -uroot -p123456 # 登录MySQL-- 1. 创建监…...
Linux 服务管理两种方式service和systemctl
Linux 服务管理两种方式service和systemctl 确定当前系统使用的哪种命令用来启动服务 SysV init 或者 systemd 使用下面的命令: ps -p 1例如,输出: PID TTY TIME CMD1 ? 00:00:02 systemdSysV init service命令用于对系统…...
P1494 [国家集训队] 小 Z 的袜子 Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),有 q q q 次查询,每次查询给定 ( l , r ) (l,r) (l,r). 你需要求出 2 ∑ i ≤ i < j ≤ r [ a i a j ] ( r − l ) ( r − l 1 ) \dfrac{2\sum…...
(开源)视频画面增强模型:Ev-DeblurVSR (可以解决视频画面不清晰的问题)
在计算机视觉领域,模糊视频超分辨率(BVSR)是一个复杂且具有挑战性的任务,目标是从低分辨率(LR)和模糊的输入生成高分辨率(HR)视频。传统方法常常因缺乏足够运动信息和高频细节而表现…...
探索豆包WEB/PC超能创意1.0:创意新利器的全面解析
在当今数字化创意蓬勃发展的时代,新工具不断涌现,为创作者们带来了更多的可能性。豆包WEB/PC超能创意1.0便是其中一款备受瞩目的产品,它的出现为创意工作者和爱好者们打开了一扇充满无限可能的大门。 一、体验信息:探索创意新领域…...
五、UI自动化测试05--PyTest框架
目录 一、PyTest 框架2. 特点2. 安装步骤3. 基本使⽤3.1 测试函数形式3.2 执⾏⽅式3.3 测试类形式3.4 执⾏⽅式3.5 另⼀种执⾏⽅式: 主函数执⾏3.6 特殊⽅法: 函数级别3.7 特殊⽅法: 类级别3.8 特殊⽅法: 函数级别和类级别同时使⽤ 4. pytest 配置⽂件4.1 选项字段获取4.2 编写…...
51LA使用方法与悟空统计,网站数据分析的双重选择
在网站运营与数据分析领域,51LA作为国内较早的流量统计工具,曾为许多用户提供基础的访问数据监测服务。然而,随着技术的发展和用户需求的升级,越来越多的企业开始寻求功能更全面、体验更优的统计工具。小编今天将给大家介绍一款更…...
MongoDB的下载安装与启动
MongoDB的下载安装与启动, 一、MongoDB下载安装 1. 官网下载 打开官网:https://www.mongodb.com/try/download/community选择: 版本(Version):选最新版或者根据需要选旧版。平台(OS࿰…...
解决ktransformers v0.3 docker镜像中 operator torchvision::nms does not exist 问题
问题背景 更新ktransformers docker镜像到v0.3版本后(之前为v0.2.4post1),使用更新前启动命令无法正确启动服务,提示以下错误: Traceback (most recent call last):File "/workspace/ktransformers/ktransforme…...
MySQL事务隔离级别的实现原理MVCC
一、什么是MVCC? MVCC(Multi-Version Concurrency Control),即多版本并发控制,是并发读写场景下,数据库层面提供的一种解决方案。 数据库的并发场景有以下三种: 读读 当多个事务同时进行读取操作时,它们之间不存在…...
EtherCAT 分布式时钟(DC)补偿技术解析
一、技术定义 EtherCAT 分布式时钟(Distributed Clock, DC)是一种基于硬件的高精度同步机制,旨在解决工业自动化系统中多设备协同控制的时间同步问题。其核心功能包括: 初始偏移补偿:消除从站本地时钟与主站系统时间的初始偏差,确保所有设备在启动阶段的时间基准一致。…...
7.进程概念(三)
一、进程优先级 是什么? 进程得到CPU资源的先后顺序。 为什么要有进程优先级? 目标资源稀缺,导致要通过优先级确定谁先谁后。 如何比较和分配? 进程优先级也是一种数字,int,task_struct 值越低,…...
MATLAB小试牛刀系列(2)
问题描述 捷运公司在下一年度 1 - 4 月的 4 个月内拟租用仓库堆放物资。已知各月所需仓库面积列于表 1.1。仓库租借费用随合同期而定,期限越长,折扣越大,具体数字见表 1.1。租借合同每月初都可办理,每份合同具体规定租用面积和期…...
一个SciPy图像处理案例的全过程
本文利用SciPy进行图像处理,并记录图像处理的全过程,处理过程包含高斯模糊、腐蚀等操作。 代码 import matplotlib.pyplot as plt import numpy as np from scipy import ndimage# 设置图像的大小为 128x128,即 128x128 的逻辑像素 l 128 …...
修改输入框选择框颜色
项目场景: 提示:这里简述项目相关背景: 有时候需要改写element原来输入框/选择框的颜色 问题描述 提示:这里描述项目中遇到的问题: 输入框的话需要hover时边框颜色修改,选择值的时候边框颜色修改以及选…...
rust 全栈应用框架dioxus
逛github时发现了一个号称全栈应用框架dioxus,适用于web / desktop / mobile。零配置、集成了热启动和基于信号的状态管理。是由rust编写的,所以也就不受平台限制。 既然说的这么好,那就来试试构建一下三种平台的应用,构建的应用编译成web 、…...
电子电器框架 --- 数据连接性和云集成在增强电气/电子架构方面的作用
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
Nvidia 可能会发布具有增强内存配置的 RTX 5080 和 5070 Super
距离英伟达正式发布RTX 50系列显卡仅过去数月,有关"Super"系列升级版显卡的传闻已甚嚣尘上。据硬件爆料平台Chiphell论坛(该消息源可靠性参差不齐)用户透露,英伟达可能正在研发配备24GB显存的RTX 5080 Super和16GB显存的…...
预留库存的实现
1. 实体类 import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data;import java.sql.Timestamp;Data TableName("products") public class Product {private Long id;private String name;private int stock; }Data TableName("shopping_c…...