【数据库】基于有效性确认的并发访问控制原理及调度流程,乐观无锁模式,冲突较少下的最优模型

使用有效性确认的并发控制

专栏内容

  • 手写数据库toadb
    本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。
    本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

文章目录

  • 使用有效性确认的并发控制
  • 前言
  • 概述
  • 有效性确认原理
  • 基于有效性确认的调度器结构
    • 基于有效性确认事务执行阶段划分
    • 调度器维护的数据集合
  • 有效性确认规则
    • 过早读的确认
    • 过早写的确认
  • 总结
  • 结尾

前言

随着信息技术的飞速发展,数据已经渗透到各个领域,成为现代社会最重要的资产之一。在这个大数据时代,数据库理论在数据管理、存储和处理中发挥着至关重要的作用。然而,很多读者可能对数据库理论感到困惑,不知道如何选择合适的数据库,如何设计有效的数据库结构,以及如何处理和管理大量的数据。因此,本专栏旨在为读者提供一套全面、深入的数据库理论指南,帮助他们更好地理解和应用数据库技术。

数据库理论是研究如何有效地管理、存储和检索数据的学科。在现代信息化社会中,数据量呈指数级增长,如何高效地处理和管理这些数据成为一个重要的问题。同时,随着云计算、物联网、大数据等新兴技术的不断发展,数据库理论的重要性日益凸显。

因此,本专栏的分享希望可以提高大家对数据库理论的认识和理解,对于感兴趣的朋友带来帮助。

概述

有效性确认是另一种乐观的并发控制模型,它允许事务不经过封锁访问数据,同时在适当的时候检查事务是否以一种可串行化的方式执行。

实际数据库中会将几种并发控制混合使用,这里将它们独立开来,易于我们理解,本文将介绍有效性确认模型的运行机制,规则。

有效性确认原理

有效性确认与时间戳模型的区别在于,前者需要维护一个关于活跃事务正在做什么的记录列表,而不是为所有数据库元素保存访问的时间戳。

事务开始时,在数据库元素写入值前的那一刻,它经过一个有效性确认阶段。这个阶段中,用它已经读的和将要写的元素集合,与其它活跃事务的写集合做比较,如果存在事实上不可实现行为的风险时,该事务就被回滚。

基于有效性确认的调度器结构

有效性确认被用做并发控制时,对于事务T,调度器必须被告诉事务所读的和写的数据库元素的集合,它们分别记作读集合RS(T),写集合WS(T)。

基于有效性确认事务执行阶段划分

那么事务分三个阶段来执行:

  1. 读阶段;在第一阶段,事务从数据库中读取读集合中的所有元素,同时事务还需要计算它将要写的数据库元素集合。

  2. 有效性确认阶段;在这一阶段,调度器通过比较该事务与其它活跃事务的读写集合来确认该事务的有效性,详细步骤在下面进行介绍。如果确认失败,则该事务回滚,否则它将进入下一阶段。

  3. 写阶段;在这一阶段中,事务往数据库中写入其写集合中的数据库元素值。

调度器假定有效性确认是一瞬间完成的,这样基于有效性确认的调度器对事务的进行有一个假定的串行顺序,并且它根据这一串行顺序来决定事务是否有效。

调度器维护的数据集合

为了支持做出事务有效性的决定,调度器维护数据集合:

  1. START集合;事务已经开始,但还未做有效性确认,此类事务的集合。对这个集合中的事务,调度器维护事务开始的时间。

  2. VAL;已经确认有效性,但尚未完成第三阶段的事务集合。也就是事务T的确认时间。

  3. FIN;已经完成第三阶段的事务,也就是事务的完成时间;对于此集合中的事务T,调度器记录START(T),VAL(T),FIN(T)三个值。

随着事务数量的增加,这个数据集合是不断增长的,假如对于任意活跃事务U,它的START(U)大于集合中的事务T的FIN(T)时,那么事务T就可以从此集合中踢除,防止集合的无限增长。

有效性确认规则

如果事务按照有效性确认的阶段顺序执行,那么使用上述集合就可以识别出任何违反顺序的事务。有效性确认的规则有如下几条:

  • 对于所有经过了有效性确认且在事务T开始前,还没有完成的事务U,对于它满足条件 FIN(U) > START(T),此时检测是否RS(T) 与 WS(U)交集是否为空;

  • 对于所有经过了有效性确认,且在事务T有效性确认前还没有完成的U,对于它满足条件 FIN(U) > VAL(T),对于U检测是否有WS(T) 与 WS(U) 的交集为空。

过早读的确认

在这里插入图片描述

在事务T有效性确认时,因为事务T已经读过X,但是事务U写的X值并没有提交,所以事务T有效性确认不过。

  • 事务U在VAL集合中,即U的有效性确认已经成功;
  • 事务U与事务T满足条件, FIN(U) > START(T);即在事务T进入有效性确认阶段前,事务U并没有完成;
  • 此时事务T有效性确认时,检查 它的读集合RS(T) 与事务U的写集合 WS(U)是否有交集,至少包含X元素;此时就需要回滚T,避免串行顺序不一致的风险。

过早写的确认

在这里插入图片描述

在事务U写X之前,晚开始的事务T先对X进行了写入,按照有效性确认规则处理如下:

  • 事务U在VAL集合中,即U的有效性确认已经成功;
  • 事务U与事务T满足条件, FIN(U) > VAL(T);即对于事务T进入有效性确认后,事务U并没有完成;
  • 此时事务T的有效性确认,检查它的写集合 WS(T) 和事务U的写集合 WS(U) 是否有交集;此时交集中有X,则不能通过有效性确认,需要回滚T;

总结

有效性确认假定是在瞬时完成,实际不会是这样,尤其在多处理器的机器上,需要通过原子同步的方法来达到有序完成的效果。

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

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

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

相关文章

物流供应链数字化转型:国内领先服务商技术综合解析

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

TCP/IP详解——IP协议,IP选路

文章目录 1. IP 编址1.1 IP 报文头部1.2 进制之间的转换1.3 网络通信1.4 有类 IP 编制的缺陷1.5 变长子网掩码1.6 网关1.7 IP 包分片1.7.1 IP 包分片实例1.7.2 IP 分片注意事项1.7.3 Wireshark 抓取 IP 包分片1.7.4 OmniPeek 抓取 IP 包分片1.7.5 ICMP 不可达差错(需…

【词云图】从excel和从txt文件,绘制以句子、词为单位的词云图

从excel和从txt文件,绘制以句子、词为单位的词云图 写在最前面数据说明&结论 从txt文件,绘制以句子、词为单位的词云图自我介绍 从excel,绘制以句子、词为单位的词云图读取excel绘制以句子、词为单位的词云图文章标题 写在最前面 经常绘…

GEE机器学习——利用梯度决策树Gradient Tree Boost 方法(GBDT/GBRT)进行土地分类和精度测试

Gradient Tree Boost 方法的具体介绍 梯度提升树(Gradient Tree Boost)是一种集成学习方法,通过串行训练多个决策树来解决回归和分类问题。它通过迭代的方式不断优化模型预测结果,使得每一棵树能够纠正前一棵树的预测误差。 Gradient Tree Boost方法的具体步骤如下: 1. …

小程序时代的机遇:开发成功的知识付费平台

知识付费平台不仅为知识创作者提供了广阔的变现渠道,同时也为用户提供了更为个性化、精准的学习体验。本篇文章,小编将为大家讲解知识付费小程序开发相关的知识。 一、小程序时代的背景 知识付费作为小程序领域中的“大热门”,有着非常高的…

WT2605C-32N语音芯片:跑步机音乐新搭档,畅享健康奔跑旋律

在现代健身领域,唯创知音的WT2605C-32N蓝牙音频MP3音乐解码语音芯片IC作为音乐解码的新搭档,为跑步机带来了更为智能、富有音乐节奏的健康奔跑体验,引领跑步健身的新时代。 1. 蓝牙连接,自由音乐选择 跑步机启动时,W…

【java】Optional操作

参考: 【Java8】 Optional 详解java Optional操作 1、简介 Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,使用Optional类可以避免显式的null值判断(null的防御性检查…

一个最小的物联网系统设计方案及源码(一)——系统组成

关于物联网 物联网(Internet of Things,缩写IOT)是一个基于互联网、传统电信网等信息承载体,让所有能够被独立寻址的普通物理对象实现互联互通的网络。 物联网一般为无线网,由于每个人周围的设备可以达到一千至五千个&…

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-设置输入设备

【项目源码】 包括本篇需要的脚本都打包在项目源码中,可以通过下面链接下载: 【背景】 目前我们能投射到远端浏览器(或者任何其它Peer)的媒体流只有默认的MainCamera画面,其实我们还可以通过配置输入来传输操作输入信息,比如键鼠等。 【追加input processing组件】 …

React-hook-form-mui (一):基本使用

前言 在项目开发中,我们选择了ReactMUI作为技术栈。在使用MUI构建form表单时,我们发现并没有与antd类似的表单验证功能,于是我们选择了MUI推荐使用的react-hook-form-mui库去进行验证。但是发现网上关于这个库的使用方法和demo比较少且比较简…

【LinkedList】常用方法大全

1、添加元素: push、offerFirst都调用了addFirst函数,只不过push和addFirst一样没有返回值,offer会返回true;add背后通过linkLast(e)源码实现且有返回值 具体方法实现备注addpublic boolean add(E e) {linkLast(e); return true;}…

GEE:使用网格搜索法(Grid Search)求机器学习的最优参数或者参数组合

作者:CSDN @ _养乐多_ 本文记录了在 Google Earth Engine(GEE)平台中,计算机器学习分类算法最优参数的代码,其中包括单一参数的最优和不同参数组合的最优。使用的最优参数计算方法是网格搜索法(Grid Search),GEE 平台上并没有现成的网格搜索法 API,因此,本文在 GEE …

FPGA学习笔记-1 FPGA原理与开发流程

1 初识FPGA 文章目录 1 初识FPGA1.1 基本认知1.1.1 什么是FPGA?1.1.2 什么是HDL?什么是Verilog?1.1.3 硬件开发与软件开发1.1.4 FPGA与其他硬件的对比1.1.5 FPGA优势与局限性1.1.6 FPGA的应用1.1.7 FPGA的学习之路 1.2 FPGA开发流程1.2.1 一般…

安装Anaconda和pytorch

首先看下自己电脑是否有英伟达的显卡,如果有的话可以安装GPU版本,没有的话可以安装CPU版本。 CPU版本 1.安装Anaconda 首先去官网下载Anaconda。 点击download,下载的就是最新版本的。 下载完成后,直接运行下步就行 注意到路径…

python读取csv文件

在Python中,你可以使用pandas库来读取CSV文件。以下是一个基本的例子: import pandas as pd# 读取CSV文件data pd.read_csv(filename.csv)# 显示前几行数据print(data.head()) 这里,filename.csv应该被替换为你的CSV文件的实际路径和名称。…

SpringBoot 国际化-自定义 LocaleResolver

准备国际化文件 资源目录下创建 i18文件夹, i18 下面创建两个文件: 预配置信息 messages_en_US.preperties | successsuccess messages_zh_CN.properties | success操作成功在application.yml中指定国际化文件的位置 sp…

Web漏洞分析-文件解析及上传(上)

随着互联网的迅速发展,网络安全问题变得日益复杂,而文件解析及上传漏洞成为攻击者们频繁攻击的热点之一。本文将深入研究文件解析及上传漏洞,通过对文件上传、Web容器IIS、命令执行、Nginx文件解析漏洞以及公猫任意文件上传等方面的细致分析&…

「Verilog学习笔记」简易秒表

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1nsmodule count_module(input clk,input rst_n,output reg [5:0]second,output reg [5:0]minute);always (posedge clk or negedge rst_n) begin if (~rst…

控制笔记本电脑性能,增强性能/控制发热---Thinkpad x280

1、引言 手上有一台收来办公的Thinkpad x280,但安装的联想管家却没有性能调节选项,导致电脑性能释放很不顺手。由于有室外办公需求,也就有续航需求,也是让它减少发热;同时我想在室内的时候,完整发挥它的性能&#xff…

Spring框架中的8种设计模式

前言 Spring框架中的8种设计模式分别是:1、简单工厂。2、工厂方法。3、单例模式。4、适配器模 式。5、装饰器模式。6、代理模式。7、观察者模式。8、策略模式. 1、简单工厂 Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获…