数据库精选题(五)(事务、并行控制与恢复系统)

news2024/11/15 23:18:40

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀数据库

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光

目录

前言

概论 

事务

并发控制

恢复系统

三者联系

练习题

题目一

题目二

题目三

题目四

题目五

题目六

题目七

题目八

 总结 


前言

前一讲我们进入了E-R模型设计以及E-R模型向关系模式转化。

那一讲的难点在于:1、如何确定三元关系(不是出现三个实体加联系就是三元关系);2、如何找到隐藏联系(有一些联系并不会直接说明,而是隐藏在生活常识中)

回顾一下:

E-R模型设计的流程:

1、确定E-R模型的最大整体(不出现在模型中)

2、确定E-R模型的实体集

3、确定E-R模型的联系集

4、确定E-R模型的属性集(实体和联系)

5、确定E-R模型实体/联系的主码

6、转化为关系模式

关系模式转化流程:

1、拿到E-R模型

2、将E-R模型中的实体和联系一一转化为关系模式(关系表)

3、根据合并原则将联系表格和实体表格合并

接下来,我们进入事务两阶段封锁 

概论 

让我们先对事务、并发控制以及恢复系统有一个整体性的认识,然后再进入精选题的讲解。

事务

定义:事务是指一个逻辑上的一组操作,这些操作要么全部执行,要么全部不执行。事务的目的是保证数据库从一个一致性状态转换到另一个一致性状态

特性:

  • 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败。
  • 一致性(Consistency):事务开始前和结束后,数据库的状态必须是一致的。
  • 隔离性(Isolation):一个事务的执行不应被其他事务干扰。
  • 持久性(Durability):事务完成后,对数据库的更改是永久性的,系统崩溃也不会丢失。

并发控制

 定义:并发控制是指在多用户环境下,保证多个事务同时执行时的正确性和一致性。它的主要目的是防止由于多个事务同时访问数据库而导致的数据不一致问题。 

 主要技术: 

  • 两阶段封锁:通过锁机制来控制并发访问。例如,读锁(共享锁)允许多个事务同时读数据,但不允许写;写锁(排他锁)则禁止其他事务读或写数据。
  • 时间戳(Timestamping):给每个事务分配一个时间戳,通过比较时间戳来决定事务的执行顺序。
  • 多版本并发控制(MVCC):维护数据的多个版本,使读操作不阻塞写操作,反之亦然。

恢复系统

 定义:恢复系统是指在系统故障后,恢复数据库到一致性状态的机制。它保证数据库在发生崩溃、系统故障等情况下仍能保持数据的一致性和完整性。 

 主要技术: 

  • 日志(Logging):记录事务的所有操作,在发生故障时,可以通过日志来重做(Redo)或撤销(Undo)操作,恢复数据库。
  • 检查点(Checkpointing):定期将数据库的当前状态保存到稳定存储中,减少恢复时需要处理的日志量。
  • 影子页(Shadow Paging):通过页表来维护数据的多个副本,故障时可以使用影子页表来恢复数据。

三者联系

总的来说,数据库的事务必须保证:1、原子性;2、一致性;3、隔离性;4、持久性

并发控制和恢复系统就是为了保证事务的这四种性质而存在的

详细来看: 

 事务与并发控制:并发控制确保多个事务同时执行时不会互相干扰,从而维持数据库的一致性隔离性

事务与恢复系统:事务的持久性要求一旦事务提交,其结果必须持久保存。恢复系统通过日志和其他技术确保即使在故障情况下也能恢复事务的结果,保证持久性、原子性

并发控制与恢复系统:并发控制机制确保事务执行期间的一致性,而恢复系统确保在系统崩溃后恢复到一致性状态。两者共同确保数据库在多用户环境下和发生故障时的一致性和完整性。 

练习题

题目一

问题描述:

什么是事务?

问题解答:

事务是由一系列操作构成的程序执行单元,这些操作要么都做,要么都不做。事务具有原子性、一致性、隔离性和持久性,是不可分割的工作单元

题目二

问题描述:

请画出事务状态图,各种状态之间有什么联系?

问题解答:

题目三

问题描述:

事务的ACID特性分别是什么?每个特性的用途是什么?

问题解答:

  • 原子性(Atomicity) 事务中包含的所有操作要么全做,要么全不做
  • 一致性(Consistency) 事务的隔离执行必须保证数据库的一致性,即事务完成前后数据库是一致的
  • 隔离性(Isolation) 系统必须保证事务不受其它并发执行事务的影响
  • 持久性(Durability) 一个事务一旦提交之后,它对数据库的影响必须是永久的

题目四

问题描述:

下图所示的调度是冲突可串行化的吗?如果是冲突可串行化的,请给出等价的串行调度序列;如果不是,请说明原因。

问题解答:

冲突可串行化判断:画出优先图,看是否有环。如果有则不可串行化,否则可以通过拓扑排序写出串行序列

 画出优先图如下:

由于T1、T3之间存在环,因此不可串行化 

题目五

问题描述:

什么是两段锁协议?

问题解答:

为了保证可串行性,即实现事务的并发运行又保证事务的隔离性等特性,可以使用两阶段封锁实现并发控制。两阶段封锁协议要求每个事务分成两个阶段:增长阶段、缩减阶段。增长阶段事务只能获得锁不能释放锁;缩减阶段事务只能释放锁不能获得锁

题目六

问题描述:

死锁的发生是坏事还是好事?试说明理由。如何解除死锁状态?

问题解答:

一般来说,死锁状态本身是一件坏事,因为死锁将造成资源的浪费、数据库的死循环(业务中断)、数据不一致风险等;但是加入两阶段封锁协议导致的死锁不一定只是坏事,因为如果发生死锁说明在两阶段封锁协议下,这个事务并不是可串行化的,此时不发生死锁让事务任意并发的运行会导致数据不一致、读取脏数据等错误。从这个角度来说,出现死锁反倒是一种保护。

解除死锁状态包括:1、避免死锁;2、检测死锁;3、处理死锁

避免死锁:一次封锁法;顺序封锁法;抢占与事务回滚

检测死锁:超时法、等待图法

处理死锁:在出现死锁后,选择牺牲代价最小的那个事务作为牺牲者,将该事务执行回滚操作(全部回滚/部分回滚),从而解除死锁(这个处理死锁的方法可能出现饿死现象)

题目七

问题描述:

考虑以下调度,思考:
调度{TA,TB,TC}能够满足时间戳排序协议吗?
调度{TA,TB,TC}能够满足两阶段封锁协议吗?
调度{TA,TB,TC}冲突可串行化吗?

时间

TA(TS=1)

TB(TS=2)

TC(TS=3)

t1

R(X)

 

 

t2

W(X)

 

 

t3

 

R(X)

 

t4

 

W(X)

 

t5

 

 

R(Y)

t6

 

 

W(Y)

t7

R(Y)

 

 

t8

W(Y)

 

 

问题解答:

时间戳:

因此不能用时间戳实现并发控制  

 两阶段封锁协议:

因此不能用两阶段封锁实现并发控制 

 冲突可串行化:

因此可以串行化:Tc——Ta——Tb 

题目八

问题描述:

什么是时间戳排序协议?

问题解答:

每个事务在开始时获得一个唯一的时间戳(时间戳的获得可以是计数器、也可以是系统时钟,这两者有各自的优缺点),根据这个时间戳对事务进行排序,排序的规则如下:

如果是读,则不能读未来事务写过的元组;如果是写,则不能写未来事务读过或写过的元组

经过这样排序的事务一定是可串行化的,并且没有死锁,但是可能存在饥饿,并且不保证可恢复性

 总结 

本文的所有知识点、图片均来自《数据库系统概念》(黑宝书)、山东大学李晖老师PPT。不可用于商业用途转发。

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

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

相关文章

Python | Leetcode Python题解之第190题颠倒二进制位

题目&#xff1a; 题解&#xff1a; class Solution:# param n, an integer# return an integerdef reverseBits(self, n):n (n >> 16) | (n << 16);n ((n & 0xff00ff00) >> 8) | ((n & 0x00ff00ff) << 8);n ((n & 0xf0f0f0f0) >&g…

198.回溯算法:子集(力扣)

代码解决 class Solution { public:// 用于存储当前子集的临时向量vector<int> res;// 用于存储所有子集的结果向量vector<vector<int>> result;// 回溯函数void backtracing(vector<int>& nums, int index) {// 每次递归调用都将当前子集添加到结…

CBSD创建和管理bhyve容器Ubuntu@FreeBSD

首先&#xff0c;创建bhyve cbsd bconstruct-tui 然后启动 cbsd bstart bub22 启动后提示 init_systap: waiting for link: igb0 Looks like /usr/jails/vm/bub22/dsk1.vhd is empty. May be you want to boot from CD? [yes(1) or no(0)] yes确认 然后使用cbsd blogi…

“Cannot resolve ch.qos.logback:logback-classic:1.2.3”问题解决办法

当我们添加依赖配置时&#xff0c;通常会遇见如下错误&#xff1a; 这个问题是由于项目中使用了 logback-classic 版本1.2.3&#xff0c;但是无法从当前所配置的仓库中解析到这个特定的版本。可以尝试检查依赖配置&#xff0c;确保指定的仓库中包含了 logback-classic 版本1.2.…

数据中心 250KW 水冷负载组概述

该负载专为数据中心冷水机组调试和测试应用而设计, 是一款紧凑的便携式产品&#xff0c;具有无限功率和水流控制功能&#xff0c;可实现精确的温升设置与施加的功率。鹦鹉螺是完全可联网的&#xff0c;可以从远程站控制单个或多个单元。 使用带有触摸屏 HMI 的 PLC&#xff0c;…

内网使用nexus3搭建npm私库方法

内网使用nexus3搭建npm私库大致分为下载tgz和批量上传两个步骤。如下。 第一步&#xff0c;批量下载tgz依赖。 新建一个文件夹&#xff0c;比如download&#xff1b;拷贝出项目中package.json或者package-lock.json。放进download文件夹中&#xff1b;确保电脑本地已经安装好n…

打造坚固的SSH防护网:端口敲门入门指南

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 打造坚固的SSH防护网&#xff1a;端口敲门入门指南 前言什么是端口敲门端口敲门的优点1. 增强安全…

您的私人办公室!——ONLYOFFICE8.1版本桌面编辑器测评

onlyoffice是一款非常棒的办公软件&#xff0c;我们都知道PDF文件就像照片一样&#xff0c;处理起来非常的烦躁&#xff0c;就说转成word文件这个需求都很难享受的到&#xff0c;就算是转了&#xff0c;效果也是很一般&#xff0c;那么ONLYOFFICE在最新版本就解决了这个问题&am…

华为数通——STP-RSTP-MSTP生成树

STP 为了提高网络可靠性&#xff0c;交换机之间常常会进行设备冗余&#xff08;备份&#xff09;&#xff0c;但这样会给交换网络带来环路风险&#xff0c;导致广播风暴以及MAC地址表不稳定等问题。 STP&#xff1a;生成树协议的作用就是为了解决避免二层环路&#xff0c;解决…

51单片机定时炸弹-准确计时-两根线随机一根触发中断可“拆弹“(AT89C52)

一、设计介绍: 1、使用定时器按照精确时间读秒倒计时&#xff0c;倒计时在LCD1602中居中显示&#xff0c;格式为mm&#xff1a;ss&#xff0c;每秒变化一次 2、默认倒计时10分钟&#xff0c;时间到后显示“Time over”“&#xff08;&#xff08;&#xff08;Boom&#xff09…

Ansible-综合练习-生产案例

斌的招儿 网上教程大多都是官网模板化的教程和文档&#xff0c;这里小斌用自己实际生产环境使用的例子给大家做一个详解。涉及到一整套ansible的使用&#xff0c;对于roles的使用&#xff0c;也仅涉及到tasks和files目录&#xff0c;方便大家快速上手并规范化管理。 0.环境配置…

Spring(核心概念:IoC/DI思想)

目录 一、引言 &#xff08;1&#xff09;如今的代码书写现状 1、业务层 2、数据层 3、假如当项目上线发布之后&#xff0c;想把数据层的实现换一下 二、核心概念 &#xff08;1&#xff09;IoC&#xff08; Inversion of Control ) 控制反转 &#xff08;2&#xff09;…

XML 外部实体注入漏洞

XML&#xff08;可扩展标记语言&#xff09; XML 的定义 XML&#xff08;eXtensible Markup Language&#xff0c;扩展标记语言&#xff09;是一种用于描述结构化数据的标记语言&#xff0c;它类似于 HTML&#xff0c;但它的标签是自定义的。XML 的主要目的是传输和存储数据&…

刷题日记6.25

136. 只出现一次的数字 这道题考察的是异或算法&#xff0c;也是异或算法的一个典型作用例子。 注意题目要求实现线性时间复杂度算法解决&#xff0c;所以就不要想着排序或者用set数组之类的了。 先讲讲异或算法。 异或&#xff08;XOR&#xff09;是一种常用的位运算操作&am…

GIF转字符画

前言 上一次我们实现了静态图片转字符画&#xff1a; https://blog.csdn.net/weixin_54143563/article/details/139778645 由此我们不禁思考&#xff0c;对于动态的gif应该怎么转换呢&#xff1f; 思路 在网上我学习到了一种思路&#xff1a; 1.创建中间的临时文件夹tmp&a…

Web前端期末大作业--绿色自适应医疗健康医院网页设计(HTML+CSS+JavaScript+)实现

Toggle navigation Hospital 首页 关于我们医疗动态医疗资源联系我们 我们的服务 心脏监测 XXX的通道有许多变化&#xff0c;但大多数人以某种形式遭受了改变&#xff0c;通过注射幽默 康复治疗 XXX的通道有许多变化&#xff0c;但大多数人以某种形式遭受了改变&#xff0c;通…

Java技术栈总结:数据库MySQL篇

一、慢查询 1、常见情形 聚合查询 多表查询 表数据量过大查询 深度分页查询 2、定位慢查询 方案一、开源工具 调试工具&#xff1a;Arthas运维工具&#xff1a;Prometheus、Skywalking 方案二、MySQL自带慢日志 在MySQL配置文件 /etc/my.conf 中配置&#xff1a; # …

音频傅里叶变换(基于开源kissffs)

主要参考资料&#xff1a; 深入浅出的讲解傅里叶变换&#xff08;真正的通俗易懂&#xff09;: https://zhuanlan.zhihu.com/p/19763358 推荐开源项目&#xff1a;KISS FFT&#xff1a; https://blog.csdn.net/gitblog_00031/article/details/138840117 数字硅麦数据的处理&…

【Android】实现图片和视频混合轮播(无限循环、视频自动播放)

目录 前言一、实现效果二、具体实现1. 导入依赖2. 布局3. Banner基础配置4. Banner无限循环机制5. 轮播适配器6. 视频播放处理7. 完整源码 总结 前言 我们日常的需求基本上都是图片的轮播&#xff0c;而在一些特殊需求&#xff0c;例如用于展览的的数据大屏&#xff0c;又想展…

使用 Swift 6 语言模式构建 Swift 包

文章目录 前言下载 Swift 6 工具链Swiftenv - macOSSwiftly - Linux在 SPM 中启用语言模式命令行包清单文件输出结论前言 我最近了解到,Swift 6 的一些重大变更(如完整的数据隔离和数据竞争安全检查)将成为 Swift 6 语言模式的一部分,该模式将在 Swift 6 编译器中作为可选…