数据库 06-03 时间戳,多版本MVCC

2024-04-07 12:44
文章标签 数据库 时间 版本 03 mvcc 06

本文主要是介绍数据库 06-03 时间戳,多版本MVCC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

01.什么是时间戳
“时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。

02.用时间戳实现调度
在这里插入图片描述

定义在这里插入图片描述
数据库给予一个事务一个时间戳(具有唯一性)

在这里插入图片描述数据库两种定义时间戳的方法:

在这里插入图片描述
无论如何定义时间戳,都会按照时间来进行调度的串行化
在这里插入图片描述
每个数据项有两个重要的时间戳:
在这里插入图片描述

时间戳排序协定
在这里插入图片描述
用要访问的数据项的时间戳对事务读写方法:

这里比较的都是用的事务最开始被系统设定的时间戳,成功的值也是事务的时间戳的值,不是读写方法过程的那一刻的时间戳

事务读方法用数据项的写的时间戳:

在这里插入图片描述
事务写方法用数据项的读和写的时间戳:
在这里插入图片描述
事务如果回滚,属于事务的时间戳会重置:
在这里插入图片描述

例子
在这里插入图片描述

在这里插入图片描述
时间戳排序的缺点:

可以保证调度串行化,但是由于长事务的IO时间长,会反复回滚。
在这里插入图片描述
改进方法:

在这里插入图片描述
1.保证事务写入数据项A时候,数据项A的读时间戳绝对不会大于现在这个时刻的时间戳,万一事务就是刚刚创建的呢
在这里插入图片描述

在这里插入图片描述
2
在这里插入图片描述
3.这个是可恢复调度(已经读了)
可恢复调度:先写数据的事务,先提交
无级联调度:在事务之间,读操作之前提交。在这里插入图片描述
托马斯写作规则:改进型时间戳协议

用原来的时间戳排序来调度T27和T28
在这里插入图片描述T27的写函数不能写入,T27回滚

在这里插入图片描述
解释:在这里插入图片描述
改进的方向:

在这里插入图片描述

Thomas写规则:

在这里插入图片描述
区别:
在这里插入图片描述

托马斯写作规则的主要改革是无视过时的写作行为。

在这里插入图片描述
在调度4中,T27的read(Q)和T28的write(Q) 指令冲突了,这个调度不是冲突串行化的。

在这里插入图片描述

基于有效性检查的协议:

在这里插入图片描述

具体内容:

每一个事务都分成三个阶段:
在这里插入图片描述

重点是第二步.要进行有效性检测的需要的参数

三个阶段分别有自己的标志时间戳:

在这里插入图片描述
把Validation(Ti)作为事务Ti的时间戳,参加有效性检测,参与时间戳排序,看是不是可以串行化
在这里插入图片描述
在这里插入图片描述

有效性检测的具体要求:完成以下两个条件之一,就算是通过

这里的TS(Ti)是事务Ti的Validation(Ti)

要得到的结论 Tk<Ti ,事务k在事务i之前完成
在这里插入图片描述
1.Tk写阶段写完< Ti 读开始 -------- 事务k在事务i之前完成,串行化
在这里插入图片描述

Tk的写完成阶段 < Ti 的验证阶段,这个只能证明两个写阶段时间绝对不一样,Tk的写阶段,这个时间有可能Ti还在读数据啊
并且 两个事务 Tk的写 和 Ti的读 的数据项集合不相交,这表明事务的读写指令不冲突,可冲突串行化

在这里插入图片描述

例子:在这里插入图片描述
图中的validate就是检测阶段:

在这里插入图片描述
可以自动预防级联回滚,(级联回滚的关键在于,如果存在依赖的情况下,依赖的一方先行提交的话,被依赖的事务如果在后续的运行中发生错误的话,被依赖的事务可以回滚,但是已经提交的事务不可以回滚,因为已经提交了,有效性检测协议的话,先是把数据都读入到自己数据副本,这个时候由于第二步的有效检测,不存在读取不到想要的数据的情况的),
在这里插入图片描述
多版本:

这里系统给事务一个时间戳
在这里插入图片描述

每一个数据项都有一组版本
在这里插入图片描述
一个版本有三个元素:
在这里插入图片描述

在这里插入图片描述

这篇关于数据库 06-03 时间戳,多版本MVCC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/882635

相关文章

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

ONLYOFFICE 8.1 版本桌面编辑器测评

在现代办公环境中,办公软件的重要性不言而喻。从文档处理到电子表格分析,再到演示文稿制作,强大且高效的办公软件工具能够极大提升工作效率。ONLYOFFICE 作为一个功能全面且开源的办公软件套件,一直以来都受到广大用户的关注与喜爱。而其最新发布的 ONLYOFFICE 8.1 版本桌面编辑器,更是带来了诸多改进和新特性。本文将详细评测 ONLYOFFICE 8.1 版本桌面编辑器,探讨其在功能、用户

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

给数据库的表添加字段

周五有一个需求是这样的: 原来数据库有一个表B,现在需要添加一个字段C,我把代码中增删改查部分进行了修改, 比如insert中也添入了字段C。 但没有考虑到一个问题,数据库的兼容性。因为之前的版本已经投入使用了,再升级的话,需要进行兼容处理,当时脑子都蒙了,转不过来,后来同事解决了这个问题。 现在想想,思路就是,把数据库的表结构存入文件中,如xxx.sql 实时更新该文件: CREAT

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

Visual Studio中,MSBUild版本问题

假如项目规定了MSBUild版本,那么在安装完Visual Studio后,假如带的MSBUild版本与项目要求的版本不符合要求,那么可以把需要的MSBUild添加到系统中,然后即可使用。步骤如下:            假如项目需要使用V12的MSBUild,而安装的Visual Studio带的MSBUild版本为V14。 ①到MSDN下载V12 MSBUild包,把V12包解压到目录(