当前位置: 首页 > news >正文

【数据库系统概论】并发控制--复习

1. 并发控制概述

并发控制是数据库系统处理多个事务同时执行时,保证数据一致性和事务隔离性的关键技术。

1.1并发操作的特点

  • 数据库系统允许多个用户并发访问。
  • 典型应用场景:
    • 飞机订票系统
    • 银行数据库系统
    • 网上购物系统

1.2并发操作可能带来的问题

并发事务可能导致数据的不一致性:

  1. 丢失修改

    • 多个事务同时修改同一数据,一个事务的结果可能覆盖另一个事务的结果。
    • 例子:两个售票点同时读取和修改机票余额,实际减少两张票,但余额只减少了一张票。
  2. 脏读

    • 一个事务读到了另一个未提交事务的修改,导致数据不一致。
  3. 不可重复读

    • 一个事务读取某数据后,另一个事务对其进行了修改,导致再次读取时数据不同。
  4. 幻读

    • 一个事务按条件查询得到的数据记录集,另一个事务插入或删除了相关记录,导致查询结果不同。

1.3并发控制的任务

  • 防止数据不一致,保证:
    1. 事务的隔离性
    2. 数据库的一致性

2. 事务的隔离级别

SQL标准定义了四种隔离级别,用来防止并发导致的数据不一致。

2.1隔离级别由低到高依次为:

  1. 读未提交

    • 允许读取未提交事务的数据。
    • 可能导致脏读、不可重复读和幻读。
  2. 读已提交

    • 只能读取已提交事务的数据。
    • 避免了脏读,但仍可能出现不可重复读和幻读。
  3. 可重复读

    • 一个事务开始后,其他事务不能修改它已读取的数据。
    • 避免了脏读和不可重复读,但不能避免幻读。
    • MySQL默认级别
  4. 可串行化

    • 最高隔离级别,所有事务按顺序执行。
    • 避免了所有问题,但性能较低。

3. 封锁

封锁是实现并发控制的核心技术。

3.1基本封锁类型

  1. 共享锁(S锁)

    • 允许多个事务读取同一数据,但不允许修改。
    • 适用于“读”操作。
  2. 排它锁(X锁)

    • 一个事务对数据加X锁后,其他事务不能再读或修改。
    • 适用于“写”操作。

3.2锁的相容性矩阵

S锁X锁
S锁YN
X锁NN
  • Y:相容,多个事务可以同时加锁。
  • N:不相容,必须等待锁释放。

4. 封锁协议

封锁协议是使用S锁和X锁时的规则。

4.1三级封锁协议

  1. 一级封锁协议

    • 修改数据前必须加X锁,事务结束后释放。
    • 防止丢失修改。
  2. 二级封锁协议

    • 读取数据前加S锁,修改数据前加X锁,事务结束后释放。
    • 防止脏读。
  3. 三级封锁协议

    • 读、写前分别加S锁和X锁,事务结束后释放。
    • 防止不可重复读。

5. 活锁与死锁

5.1活锁

  • 一个事务因优先级低总是得不到锁,处于无限等待状态。
  • 解决方法:先来先服务

5.2死锁

  • 两个事务循环等待对方持有的锁。
  • 解决方法:
    1. 超时法:等待超时后回滚事务。
    2. 等待图法:通过检测图中的循环回路识别死锁。

6. 并发调度的可串行性

6.1可串行化调度

  • 并发事务的执行结果与某种顺序的串行执行结果相同。
  • 可串行性是判断并发调度正确性的标准。

6.2两段锁协议(2PL)

  • 两阶段锁定:
    1. 扩展阶段:只加锁不释放。
    2. 收缩阶段:只释放锁不加锁。
  • 优点:保证调度的可串行化。
  • 缺点:可能导致死锁。

7. 封锁粒度

7.1粒度的选择

  • 粒度大:减少开销,但降低并发性。
  • 粒度小:提高并发性,但增加系统开销。

7.2多粒度封锁

  • 支持同时对数据库的不同层级加锁(如表、元组等)。
  • 引入意向锁(IS锁、IX锁):
    • 提高加锁效率,避免冲突。

8. 多版本并发控制(MVCC)

8.1特点

  • 维护数据的多个版本,避免读写冲突。
  • 适用场景:事务读写并发较高的情况下。
  • 优点:提高性能,减少事务等待。
  • 缺点:产生大量无效版本。

8.2 改进方法(MV2PL)

  • 读事务:使用多版本机制。
  • 写事务:使用两阶段锁协议。
  • 引入验证锁(Certify-Lock):在事务提交时验证数据一致性。

9.总结:并发控制技术

  1. 主要技术

    • 封锁(S锁、X锁)
    • 时间戳方法
    • 乐观方法
    • 多版本并发控制(MVCC)
  2. 核心目标

    • 保证事务隔离性和数据一致性。
  3. 优化方向

    • 平衡隔离级别与性能需求。
    • 选择适合应用场景的并发控制机制。

关于更详细的笔记,等考完试再出哈。

相关文章:

【数据库系统概论】并发控制--复习

1. 并发控制概述 并发控制是数据库系统处理多个事务同时执行时,保证数据一致性和事务隔离性的关键技术。 1.1并发操作的特点 数据库系统允许多个用户并发访问。典型应用场景: 飞机订票系统银行数据库系统网上购物系统 1.2并发操作可能带来的问题 并…...

MySQL(六)MySQL 案例

1. MySQL 案例 1.1. 设计数据库 1、首先根据相关业务需求(主要参考输出输入条件)规划出表的基本结构   2、根据业务规则进行状态字段设计   3、预估相关表的数据量进行容量规划   4、确定主键   5、根据对相关处理语句的分析对数据结构进行相应的变更。   设计表的时…...

DDcGAN_多分辨率图像融合的双鉴别条件生成对抗网络_y译文马佳义

摘要: 在本文中,我们提出了一种新的端到端模型,称为双鉴别条件生成对抗网络(DDcGAN),用于融合不同分辨率的红外和可见光图像。我们的方法建立了一个生成器和两个鉴别器之间的对抗博弈。生成器的目的是基于特…...

[读书日志]从零开始学习Chisel 第一篇:书籍介绍,Scala与Chisel概述,Scala安装运行(敏捷硬件开发语言Chisel与数字系统设计)

简介:从20世纪90年代开始,利用硬件描述语言和综合技术设计实现复杂数字系统的方法已经在集成电路设计领域得到普及。随着集成电路集成度的不断提高,传统硬件描述语言和设计方法的开发效率低下的问题越来越明显。近年来逐渐崭露头角的敏捷化设…...

二、用例图

二、用例图 (一)、用例图的基本概念 1、用例图的定义: 用例图是表示一个系统中用例与参与者关系之间的图。它描述了系统中相关的用户和系统对不同用户提供的功能和服务。 用例图相当于从用户的视角来描述和建模整个系统,分析系统的功能与…...

LWIP之一:使用STM32CubeMX搭建基于FreeRTOS的LWIP工程并分析协议栈初始化过程

工程搭建及LWIP协议栈初始化过程 一、使用STM32CubeMX快速生成工程二、修改测试三、LWIP协议栈初始化过程分析3.1 tcpip_init()3.1.1 lwip_init()3.1.1.1 sys_init()3.1.1.2 mem_init()3.1.1.3 memp_init()3.1.1.4 netif_init()3.1.1.5 udp_init()3.1.1.6 tcp_init()3.1.1.7 ig…...

个性化电影推荐系统|Java|SSM|JSP|

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...

UE5AI感知组件

官方解释: AI感知系统为Pawn提供了一种从环境中接收数据的方式,例如噪音的来源、AI是否遭到破坏、或AI是否看到了什么。 AI感知组件(AIPerception Component)是用于实现游戏中的非玩家角色(NPC)对环境和其…...

每日一学——日志管理工具(ELK Stack)

5.1 ELK Stack 5.1.1 Elasticsearch索引机制 嘿,小伙伴们!今天我们要聊聊ELK Stack——一套由Elasticsearch、Logstash和Kibana组成的强大日志管理工具集。通过这套工具,我们可以轻松地收集、存储、搜索和可视化日志数据。首先,…...

“智能筛查新助手:AI智能筛查分析软件系统如何改变我们的生活

嘿,朋友们!今天咱们来聊聊一个特别厉害的工具——AI智能筛查分析软件系统。想象一下,如果你有一个超级聪明的小助手,不仅能帮你快速找出问题的关键所在,还能提供精准的解决方案,是不是感觉工作和生活都变得…...

DeepSeek v3为何爆火?如何用其集成Milvus搭建RAG?

最近,DeepSeek v3(一个MoE模型,拥有671B参数,其中37B参数被激活)模型全球爆火。 作为一款能与Claude 3.5 Sonnet,GPT-4o等模型匹敌的开源模型DeepSeek v3不仅将其算法开源,还放出一份扎实的技术…...

linux-centos-安装miniconda3

参考: 最新保姆级Linux下安装与使用conda:从下载配置到使用全流程_linux conda-CSDN博客 https://blog.csdn.net/qq_51566832/article/details/144113661 Linux上删除Anaconda或Miniconda的步骤_linux 删除anaconda-CSDN博客 https://blog.csdn.net/m0_…...

html+css+js网页设计 美食 好厨艺西餐美食企业网站模板6个页面

htmlcssjs网页设计 美食 好厨艺西餐美食企业网站模板6个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 …...

QT-窗口嵌入外部exe

窗口类&#xff1a; #pragma once #include <QApplication> #include <QWidget> #include <QVBoxLayout> #include <QProcess> #include <QTimer> #include <QDebug> #include <Windows.h> #include <QWindow> #include <…...

C#中使用系统默认应用程序打开文件

有时您可能希望程序使用默认应用程序打开文件。 例如&#xff0c;您可能希望显示 PDF 文件、网页或互联网上的 URL。 System.Diagnostics.Process类的Start方法启动系统与文件关联的应用程序。 例如&#xff0c;如果文件扩展名为.txt&#xff0c;则系统会在 NotePad、WordPa…...

如何在 Ubuntu 22.04 上配置 Logrotate 高级教程

简介 本教程将教你如何在 Ubuntu 22.04 上进行 Logrotate 的高级配置。 日志管理对于维护系统性能和确保你的日志不会占用太多磁盘空间至关重要。在 Ubuntu 上&#xff0c;logrotate 是一个强大的工具&#xff0c;它可以通过轮转、压缩和删除旧日志来自动管理日志文件。在本教…...

java项目之校园管理系统的设计与实现(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; springboot校园…...

关于 webservice 日志中 源IP是node IP的问题,是否能解决换成 真实的客户端IP呢

本篇目录 1. 问题背景2. 部署gitlab 17.52.1 添加repo源2.2 添加repo源 下载17.5.0的charts包2.3 修改values文件2.3.1 hosts修改如下2.3.2 appConfig修改如下2.3.3 gitlab下的sidekiq配置2.3.4 certmanager修改如下2.3.5 nginx-ingress修改如下2.3.6 <可选> prometheus修…...

Serializable接口

最近写项目的时候&#xff0c;发现有一些类要实现Serializable接口&#xff0c;一开始只是粗略的知道实现了Serializable接口&#xff0c;这个类的对象可以被序列化&#xff0c;但我比较轴&#xff0c;想知道这个接口到底有什么作用。 我点开这个接口发现什么方法都没有实现&am…...

如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈

如何操作github&#xff0c;gitee&#xff0c;gitcode三个git平台建立镜像仓库机制&#xff0c;这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈 问题背景 由于我司最早期19年使用的是gitee&#xff0c;因此大部分仓库都在gitee有几百个库的代码&#xff0c;…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

门静脉高压——表现

一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构&#xff1a;由肠系膜上静脉和脾静脉汇合构成&#xff0c;是肝脏血液供应的主要来源。淤血后果&#xff1a;门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血&#xff0c;引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...