数据库系统原理与实践 笔记 #11

news2024/11/19 3:32:42

文章目录

  • 数据库系统原理与实践 笔记 #11
  • 事务管理和并发控制与恢复
    • 事务概念
      • 转账的例子
    • 事务ACID特性
      • ACID特性
      • 事务原子性和持久性
      • 事务隔离性
      • 调度
      • SQL中的事务定义
    • 可串行化
      • 事务的简化视图
      • 冲突的指令
      • 冲突可串行化
    • 可恢复性
      • 级联回滚
      • 无级联调度

数据库系统原理与实践 笔记 #11

事务管理和并发控制与恢复

事务概念

  • 事务是构成单一逻辑工作单元的操作集合
  • 事务是访问并可能个您各种数据项的一个程序执行单元
  • 事务由事务开始(begin trasaction)与实务结束(end transaction)之间执行的全体操作组成
  • 事务管理处理的两个主要问题
    • 各类故障恢复,如硬件故障,系统崩溃等
    • 多个事务的并发执行

转账的例子

  • 从账户A过户$50到账户B的事务:
    • 1.read(A)
    • 2.A := A - 50
    • 3.write(A)
    • 4.read(B)
    • 5.B := B + 50
    • 6.write(B)
  • 原子性要求:在3之后、6之前,如果事务出现故障,钱就会丢失,从而导致数据库的不一致性,系统应该保证部分执行的事务的更新不会体现在数据库中
  • 持久性要求:一个事务成功完成后,它对数据库的改变必须是永久的,即使出现系统故障
  • 一致性要求:事务执行结束后A和B的总和不变
  • 隔离性要求:如果3到6之间,另一个事务T2允许进入部分更新的数据库,该事务将会看到一个不一致的数据库(A+B的和可能会少于其实际值)
  • 可以通过将事务串行化保证隔离性,但是并发执行事务有很大的性能优势

事务ACID特性

ACID特性

  • 事务是访问并可能更新各种数据项的一个程序执行单元
  • 原子性(Atomicity):事务的所有操作在数据库中要么全部反映出来,要么完全不反映
  • 一致性(Consistency):事务隔离执行时(即在没有其他事务并发执行的情况下)保持数据库的一致性
  • 隔离性(Isolation):尽管多个事务可能并发执行,但是每个事务都感觉不到系统中有其他事务在并发地执行
  • 持久性(Durability):一个事务成功完成后,它对数据库的改变是永久的,即便系统出现故障时也是如此

事务原子性和持久性

  • 事务的状态包括:
    • 活动的:初始状态,事务执行时处于这个状态
    • 部分提交的:最后一条语句执行前
    • 失败的:发现正常的执行不能继续后
    • 中止的:事务回滚并且数据库已恢复到事务开始执行前的状态后(中止之后可以重新开始事务,也可以杀死事务)
    • 已提交的:成功完成执行的事务(撤销已提交事务所造成影响的唯一方法是执行一个补偿事务

p23

事务隔离性

  • 事务处理系统通常允许多个事务并发地执行,优点是:
    • 提高吞吐量和资源利用率
    • 减少等待时间
  • 并发控制机制:实现事务隔离性的机制(控制并发的事务之间的相互作用,来避免他们破坏数据库的一致性)

调度

  • 调度:执行执行顺序,指定并发执行事务的指令执行的时间顺序
    • 一组事务的一个调度必须包含这一组事务的全部执行
    • 必须保持指令在各个事务中出现的顺序
  • 一个事务成功执行后,会有一条指令作为最后的声明:事务默认提交指令commit为其最后一条执行
  • 一个事务没有成功完成时,会用一条中止指令abort来作为最后的声明

SQL中的事务定义

  • 数据操纵语言(DML)必须包含用于说明构成事务的活动集合的结构
  • SQL标准规定事务的开始是隐式
  • 事务的结束用下列SQL语句之一来表示(work可选):
    • Commit [work]:提交当前事务并开始一个新的事务
    • Rollback [work]:回滚当前事务
  • 在几乎所有的数据库系统中,缺省每个SQL语句如果成功执行的话,也立即隐式提交事务(这种隐式提交也可以通过数据库指令关闭)

可串行化

  • 基本假设:每个事务都可能保持数据库的一致性
  • 事务的串行执行是可以保持一致性的
  • 如果一个调度等级碍于一个串行调度,那么这个调度就是可串行化
  • 按调度的不同形式可分为:冲突可串行化视图可串行化

事务的简化视图

  • 只考虑readwrite指令
  • 假设事务在read和write指令之间可以对本地缓冲区的数据进行任意的操作
  • 简化的调度只包含read和write指令

冲突的指令

  • 两条连续指令 l i l_i li l j l_j lj分别属于事务 T i T_i Ti T j T_j Tj,当且仅当数据项Q被 l i l_i li l j l_j lj同时访问,并且至少有一个指令执行了write Q操作才会发生冲突
  • 1. l i = r e a d ( Q ) l_i = read(Q) li=read(Q) l j = r e a d ( Q ) l_j=read(Q) lj=read(Q),不冲突
  • 2. l i = r e a d ( Q ) l_i = read(Q) li=read(Q) l j = w r i t e ( Q ) l_j=write(Q) lj=write(Q),冲突
  • 3. l i = w r i t e ( Q ) l_i = write(Q) li=write(Q) l j = r e a d ( Q ) l_j=read(Q) lj=read(Q),冲突
  • 4. l i = w r i t e ( Q ) l_i = write(Q) li=write(Q) l j = w r i t e ( Q ) l_j=write(Q) lj=write(Q),冲突

冲突可串行化

  • l i l_i li l j l_j lj之间的冲突迫使它们之间有一个逻辑时间顺序
  • 一个调度中,如果 l i l_i li l j l_j lj在时间上连续并且不发生冲突,则可以交换这两条指令的顺序
  • 如果调用S可以通过一系列非冲突指令交换转换成S’,我们称S和S’是冲突等价
  • 若一个调度S与一个可串行调度冲突等价,则称调度S是冲突可串行化

可恢复性

  需要了解并发运行的事务的失败会产生什么影响

  • 可恢复调度:如果 T j T_j Tj读取了之前由 T i T_i Ti所写的数据项,则 T i T_i Ti需先于 T j T_j Tj提交

  • 下面的调度无法恢复,如果 T 9 T_9 T9在read之后直接提交
    p24

  • 如果 T 8 T_8 T8要中止, T 9 T_9 T9会读到一个不一致的数据A。因此,数据库必须保证调度可恢复

级联回滚

  • 级联回滚:因单个事务故障导致一系列事务回滚
    p25

  • 如果没有一个事务是提交的,如果 T 10 T_{10} T10失败, T 11 T_{11} T11 T 12 T_{12} T12必须回滚,会导致撤销大量工作

无级联调度

  • 无级联调度:对于每对事务 T i T_i Ti T j T_j Tj,如果 T j T_j Tj读取了先前由 T i T_i Ti所写的数据项,则 T i T_i Ti必须在 T j T_j Tj这一读取操作前提交(不会发生级联回滚)
  • 无级联调度是可恢复

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

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

相关文章

Python中format函数用法

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 format优点 format是python2.6新增的一个格式化字符串的方法,相对于老版的%格式方法,它有很多优点。 1.不需要理会数据类型的问题&#…

pip的基本命令和使用

pip 简介 pip是Python官方的包管理器,可以方便地安装、升级和卸载Python包。 pip 常用命令 显示版本和路径 pip --version获取帮助 pip --help升级pip和升级包 pip install --upgrade pip # Linux/macOS pip install -U pip # windowspip install…

CVE-2016-2510CVE-2017-5586 BeanShell漏洞

前言: 首先我们需要了解BeanShell具体是做什么: BeanShell 是一种轻量级的可嵌入式脚本语言,用于在 Java 环境中执行脚本代码。它提供了一种简单、灵活的方式来扩展和定制 Java 应用程序的行为,允许开发人员动态地执行和评估脚本…

顺序查找、折半查找、分块查找

概念 查找表,分为静态查找表和动态查找表。 顺序查找 效率分析: 优化 折半查找 折半查找,又称“二分查找”仅适用于有序的顺序表。 ⭐,因为顺序表可以随机访问,链表不可以 效率分析 折半查找判定树的构造 如果&…

食品加工厂污水处理设备有哪些

食品加工厂污水处理设备是确保食品生产过程中污水能够得到有效处理和排放的重要设备。目前,针对食品加工厂污水处理的设备包括以下几个主要分类: 1. 预处理设备:包括格栅、沉砂池和沉淀池等。格栅主要用于去除污水中的大颗粒固体物质&#x…

Ubuntu20.04安装向日葵、开机自启、解决windows系统远程黑屏(笔记)

这里写目录标题 动机1. Ubuntu20.04 安装向日葵2. 设置开机自启3. 解决windows不可远程的问题4. 大公告成 动机 办公室有个工作站,要比我的笔记本的CPU稍微好一点,用来跑陆面过程。我信心满满的装了个Ubuntu20.04双系统,但是发现向日葵安装不上了。我少…

一.线性表

一.单链表 1.定义结构体 1.1不带头结点的结构体 typedef struct node{int data;struct node *next;//struct node *prior;//双向链表需要加上指针prior }Lnode,*Linklist; 1.2带头结点的结构体 typedef struct node{int data;struct node * next; }Node;typedef struct l…

一个可用于临床的食管癌远处转移预测模型(shiny APP)

一个可用于临床的食管癌远处转移预测模型(APP) 最近将之前构建的一个预测食管癌远处转移模型制作成了APP(地址见文末),有一些思考,和大家分享如下: 1. 充分的说明 首先,对模型的…

面试题:为什么数据库连接池不采用 IO 多路复用?

今天我们聊一个不常见的 Java 面试题:为什么数据库连接池不采用 IO 多路复用? 这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用 DB 时,还是经常性采用c3p0,tomcat connection pool等技术来与 D…

软件验收计划书

软件项目验收计划的作用主要有以下几点: 确保项目质量:通过项目验收,客户或相关方可以对项目的成果进行全面、系统的评估,以确保项目达到预期的质量标准。 发现和解决问题:在项目开发过程中,难免会存在一些…

软著项目推荐 深度学习的口罩佩戴检测 - opencv 卷积神经网络 机器视觉 深度学习

文章目录 0 简介1 课题背景🚩 2 口罩佩戴算法实现2.1 YOLO 模型概览2.2 YOLOv32.3 YOLO 口罩佩戴检测实现数据集 2.4 实现代码2.5 检测效果 3 口罩佩戴检测算法评价指标3.1 准确率(Accuracy)3.2 精确率(Precision)和召回率(Recall)3.3 平均精…

Ant Design Pro初始化报错

今天按照官网步骤初始化项目,第一次报错 fatal: unable to access https://github.com/ant-design/ant-design-pro/: SSL certificate problem: unable to get local issuer certificate 致命:无法访问https://github.com/ant-design/ant-design-pro/&…

深入解析Linux内核网络-拥塞控制系列(一)

谈起网络拥塞控制,大家可能很熟悉八股文中的"加法增大“、”乘法减小“、”慢开始“、“拥塞避免”、“快重传”、“快恢复”等概念。没错,这是一种经典网络拥塞控制算法的基础理论,但在实际的实现时不同的拥塞控制算法,有很…

2、Linux_远程操作

远程操作 1.配置ifconfig 1.1输入 ifconfig 查看 ip 的命令( ifconfig ) 1.2搜索 ifconfig 命令(yum search ifconfig) 1.3配置网卡 进入如下目录配置网卡 cd /etc/syscofig/network-scripts编辑 ifcfg-ens33 vi ifcfg-ens33按 i 键进入编辑模式 按 …

minio服务端搭建使用

一.minio文件服务搭建 非docker环境部署(Linux部署) 1.官网下载安装包:MinIO | Code and downloads to create high performance object storage 2、上传安装包文件到目录(这个可以自由选择) /home/minio/ 3、为minio添加权限 sudo chmod x minio 4、 创建mini…

【C语言】扫雷小游戏初学者版

成功的秘诀就是每天都比别人多努力一点。 今天给大家带来一款非常经典的小游戏——扫雷的实现和讲解 这里是目录 前言整体框架1.打印菜单2.创建二维数组3.初始化棋盘4.打印棋盘5.布置棋盘中的雷6.排查雷和统计雷总体代码test.cgame.cgame.h 进阶(递归展开&#xff0…

【arduino库之TroykaDHT(针对DHT系列温湿度传感器)】

该库允许您从 DHT 系列传感器读取温度和湿度。 该库允许获取以摄氏度、开尔文和华氏度为单位的相对湿度和温度数据。支持的传感器:DH11、DHT21、DHT22。 TroykaDHT库的的使用非常简单,它包含7个函数: begin //初始化接口,做好…

Matlab 生成license

参考下面两个帖子 https://ww2.mathworks.cn/matlabcentral/answers/389888-matlab https://www.mathworks.com/matlabcentral/answers/131749-id-id-id-id 登陆 https://ww2.mathworks.cn/licensecenter 针对R2020b版本,点击下面红框生成 ip addr | grep ether看第一行 根据…

如何使用cpolar+Plex在Windows系统上搭建私人媒体影音站点公网可访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各…

数据可视化私有化部署:为何成本居高不下?

尽管在可视化设计这行干了好多年,也接手过不少项目,但昂贵的私有化部署费用总能让我发出由衷的感叹:“这几十万一年也太贵了!”。可以预见,数据可视化软件私有化部署所带来的高昂成本,将是许多企业面临的问…