首页 > 其他分享 >CMU15-445 Project4 Concurrency Control心得

CMU15-445 Project4 Concurrency Control心得

时间:2023-07-05 20:44:26浏览次数:46  
标签:Control 事务 隔离 schedule 调度 445 Concurrency 串行化 2PL

一、概述

过瘾!过瘾!过瘾!P4 真过瘾!写 P3 的博客时我说过“感觉自己在数据库方面真正成长了”,但写完 P4 之后最大的感受就是,我终于理解了 andy 在第一课说过的“我只在乎两件事情,一个是我老婆,另一个是数据库。

从代码量、概念晦涩程度、思考深度等各方面综合考量,我认为 P4 是难于 P2 的,也可能我对手写 B+tree 所花(浪费)的时间太多而怨念太深哈哈哈。

最后这篇博客有两个目的

  1. 记录我的学习心得,这个 project 涉及到并发控制、二阶段锁、事务及其隔离级别、死锁及其检测/预防等概念,需要"学而时习之"。
  2. 记录我的思考过程,完成 P4 需要对二阶段锁、隔离级别、事务之间相互暴露可能发生的问题这三大块之间的关系有深入的思考和清晰的理解。

二、事务相关概念回顾

1 transaction 事务

事务是访问或更新数据项一系列操作的一个集合,简单来说就是一系列读写诶操作的集合。

transaction 的正确性标准称为 ACID

  • 原子性(Atomicity):事务中的所有操作要么都发生,要么都不发生。
  • 一致性(Consistency): 四个特性中最抽象的一个,一个容易理解的描述就是:数据库描述的状态要和真实的物理世界保持一致对数据的一组特定约束必须始终成立,比如转账事务T1 和查询两账户总额事务 T2,应该保证无论什么时候查询账户总额都是一样的。通过原子性、隔离性、持久性来维护这种一致的状态。
  • 隔离性(Isolation): 一个事务察觉不到他和其他事务是并发执行的。
  • 持久性(Durability):如果一个事务被 commit,则它对数据库的改变时永久的

2 如何确保四种特性

  • 原子性:几乎所有现代系统都使用 logging 日志方式,DBMS 在 log 中按顺序记录所有 操作 信息,如果事务被 abort 需要回滚,就可以利用日志中的信息来实现。
  • 一致性:通过原子性、隔离性、持久性来维护这种一致的状态。原子性,隔离性和持久性是数据库自身的属性,而 ACID 中的一致性更多是应用层的属性。
  • 隔离性:通过并发控制机制实现。
  • 持久性:和原子性一样,也是通过 logging 日志方式实现

3 多个事务交织的顺序-schedule

多个事务并发时,DBMS 执行操作的顺序被称为 执行调度 (execution schedule),简称 schedule。并发控制机制的目标是产生一个相当于串行执行 (serial execution) 的执行调度,也就是可串行化调度 (Serializable Schedule)

  • 串行调度 (Serial Schedule):一个事务执行完另一个事务执行,不存在事务之间的交织

  • 等效调度(Equivalent Schedule):两种调度的结果是一样的话,这两种调度就是的等效的

  • 可串行化的调度 (Serializable Schedule):当一种调度和串行调度是等效的,这种调度就是可串行化的调度

以下面为例,图 1 中 schedule1 和 schedule2 是两种执行调度,schedule2 明显是串行调度,不存在事务之间的交织。schedule1 的执行结果和 schedule2 是一样的,所以 schedule 1 与 schedule2 是等效调度。与串行调度 schedule2 等效,所以schedule1 是可串行化的调度

image-20230630202350412

冲突操作:如果两个操作位于不同的事务中,且操作同一个对象,且至少一个操作是写,那么这两个操作就是冲突操作,冲突操作包括:

  1. R-W 读写冲突 (导致 不可重复读):一个事务在多次读取同一对象时无法获得相同的值。
  2. W-R 写读冲突 (导致 脏读):一个事务在另一个的事务提交其更改之前就看到了该事务的写入效果。
  3. R-R 写写冲突(导致 丢失更新 或 脏写): 一个事务覆盖了另一个并发事务的未提交的数据。image-20230418171229787

识别冲突操作的意义在于,如果位于两个事务中的两个连续操作不是冲突操作,他们可以交换顺序!以产生等效调度!如下图中的最左边的 schedule 和最右边的 schedule 是等效调度

image-20230630204620390

  • 冲突等效:一个调度 S 通过一系列非冲突指令的交换而转换成另一个调度S',则这两个调度是冲突等效的
  • 冲突可串行化(Conflict Serializabile):如果一个调度 S 与一个串行化调度冲突等效的,则调度 S 被称为是冲突可串行化的。

所以上图最左边的schedule冲突可串行化的。

以上是2 个事务的 schedule 可以使用交换顺序来识别一个 schedule 是否是冲突可串行化的,如果是多个事务,这样的交换会很复杂,所以 检测多个 transactions 构成的 schedule 是否 serializable 需要使用依赖图 (dependence graphs) / 优先图(precedence graph)

相关文章

  • CMU15-445Project整理(2021Fall)
    本文为CMU15-445(2021Fall)的lab记录。推荐博客:https://blog.csdn.net/twentyonepilots/article/details/120868216,逻辑写得比较清楚CMU-15445官方网页https://15445.courses.cs.cmu.edu/fall2021/assignments.htmlProject#1-BufferPoolTASK#1-LRU剔除策略可以先......
  • Cisco Catalyst 9800-CL Wireless Controller for Cloud, Release Dublin-17.11.01 ED
    CiscoCatalyst9800-CLWirelessControllerforCloud,ReleaseDublin-17.11.01ED面向云的思科Catalyst9800-CL无线控制器,专为基于意图的网络全新打造请访问原文链接:https://sysin.org/blog/cisco-catalyst-9800-cl/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.......
  • spring中的controller种类
     http://xiaohu0901.iteye.com/blog/608906一、springmvc中常见controller1、org.springframework.web.servlet.mvc.ParameterizableViewController  这个controller主要用在不需要后台业务逻辑处理的地方,直接在配置文件中指定视图渲染的路径,如下:  <beanid="paramCont......
  • ionic LoadingController 使用cssClass改变加载样式
    以改变加载框的图表颜色和字体颜色为例在主题文件variables.scss中设置LoadingController需要改变的样式class以下使用主题颜色为加载框的图表颜色和字体颜色(当主题更改时随之改变)//加载框全局样式ion-loading.custom-loading{.loading-wrapper{--spinner-......
  • Cross-thread operation not valid: Control 'txtMessage' accessed from a thread ot
    WinformTextBox Cross-threadoperationnotvalid:Control'txtMessage'accessedfromathreadotherthanthethreaditwascreatedon. (330条消息)解决Cross-threadoperationnotvalid的问题_GuanXX的博客-CSDN博客  privatevoidsafeSetText(stringt......
  • Kafka核心总控制器Controller主要作用
    https://www.yisu.com/zixun/586556.html1简介1)更新集群元数据信息2)创建Topic3)删除Topic4)分区重分配5)preferredleader副本选举6)Topic分区扩展7)Broker加入集群8)Broker崩溃9)受控关闭10)controllerleader选举 2更新集群元数据信息Client可以从......
  • SAP FI -Company Basics&Define Business/Functional Area/Credit Control
    CompanyBasics-公司基础信息SAP中公司被定义为可以根据商业法律法规创建财务报表的最小单位。在SAPFI中,一家公司可以由多个代码组成,但它提供财务报表的单单位。所有公司代码必须使用相同的会计科目表和会计年度,但每个代码可以具有不同的本地货币。科目表列表由所有可用的科目表......
  • jmeter 解决线程组bzm-Concurrency Thread Group 安装的步骤
    1.首先 安装jmeter的插件,下载地址为放到lib/ext下,重启然后option下安装插件就Concurrency 就可以   ......
  • 一文搞懂什么是@Component和@Bean注解以及如何使用(包括与@Controller、@Service、@Re
      来源  https://blog.csdn.net/m0_51358164/article/details/126120731一文搞懂什么是@Component和@Bean注解以及如何使用......
  • Access control allow origin 简单请求和复杂请求
    错误信息:XMLHttpRequestcannotloadhttp://web.image.myqcloud.com/photos/v2/10008653/bhpocket/0/?sign=4FcLKd5B8…p4SkFVUEJtZ1omZT0xNDQ0NzExMDE5JnQ9MTQ0NDcwNzQxOSZyPTEzMDMyMDgzOTAmdT0wJmY9.No'Access-Control-Allow-Origin'headerispresentontherequ......