IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 解读数据库封锁协议 -> 正文阅读

[大数据]解读数据库封锁协议

准备软考时,有个知识点,数据库封锁协议,比较难懂,这里做个笔记梳理下

在这里插入图片描述

数据库都会有一个参数叫最大连接数。上述查询结果是:数据库服务器在理想状态时,是可以承受1000个并发用户来访问的。并发访问就会存在以下问题:

在这里插入图片描述

一个数据库里面,对同一个数据进行并发修改操作,造成丢失更新;对同一个数据进行并发有读有写操作,造成不可重复读和读"脏"数据这是不可以接受的。为了解决这个问题,前辈们搞了一个数据库封锁协议。

数据库封锁协议前,先了解读锁和写锁,给写操作弄了一把写锁,叫排它锁,也叫X锁。如果给某个数据加了写锁,其它写锁或读锁就没办法给这个数据加上去了。给读操作弄了一把读锁,叫共享锁,也叫S锁,给一个数据加了读锁,那么其它事务或操作也可以给这个数据加读锁,但是加不了写锁了。

一级封锁协议
一级封锁协议是指,事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。

解析:

根据一级封锁协议,假设两个并发都是来写的,第一个并发正常加写锁,然后对该数据进行读写操作,并且还没有完成。此时,另外一个并发也来写,在写之前给这个数据进行加写锁,发现这个数据上面有一把锁,此时这个并发只能在那等待,等待到第一个并发读写操作完毕。此时:两个或两个以上的写,串行着来,所以能够解决丢失更新的问题。

根据一级封锁协议,只规定了并发写的操作,并没有规定读操作。如果并发中,有读操作,可以来读加了写锁的数据上,也可以读没有加锁的数据上,此协议下,依然存在不可重复读和读"脏"数据的问题。

二级封锁协议
二级封锁协议是指,在一级封锁协议基础上增加事务T在读数据R之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议出防止了丢失修改,还可以进一步防止读“脏”数据。

解析:

我们知道,一级封锁协议解决了并发是写操作的情况,但是没有规定并发中有读操作的行为。所以制定了二级封锁协议。

二级封锁协议是在一级封锁协议基础上,规定了并发是读操作的行为。就是规定并发中是读操作的,那么在读操作之前需要加一个读锁。如果此时这个数据,被一个并发写操作加了一把写锁,根据写锁的特点(排它性),这个数据是无法再加一个写锁或读锁,所以呢就规定了这个并发中的读操作只能等写操作结束后才能去读。这样子这个并发读操作,拿到的是没有写操作时的数据,根据定义,这个数据就不算是"脏"数据。但是呢,根据二级封锁协议,读完就释放读锁,对于这个并发读,有可能还需要去读其它的表,可能有需求再回来再确定刚才读的数据有没有问题后,最终返回给用户结果。在去操作其它表的时候,有可能有并发写操作对这个数据进行修改,然后写操作之后,那个读回来了,发现刚才那个值变了。

所以这个二级封锁协议解决了读"脏"数据的问题,却没有解决数据可重复读的问题。

三级封锁协议
三级封锁协议是指,在一级封锁协议的基础上增加事务T在读数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议出防止了丢失修改和读“脏”数据外,还可以进一步防止了不可重复读。

解析:

三级封锁协议解决了二级封锁协议中并发读操作不能进行数据不可重复读的问题。协议中的事务T,说的是办一件事。这件事情有可能会访问好几张数据库表(表A,表B,表C),最终返回结果给请求方,这算一个完成的事务。所以呢,三级封锁协议的释放这个读锁的时间放到了,最终返回结果给请求方的时候。解决了数据不可重复读的问题。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:28:13  更:2022-04-09 18:30:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:37:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码