【数据库】树形数据组织架构下的封锁并发控制,B树索引并发访问控制,树协议原理及案例分析

本文主要是介绍【数据库】树形数据组织架构下的封锁并发控制,B树索引并发访问控制,树协议原理及案例分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据库并发访问树协议

专栏内容

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

开源贡献

  • toadb开源库

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

文章目录

  • 数据库并发访问树协议
  • 前言
  • 概述
  • 树结构的封锁不同点
  • 树协议的规则
    • 举例
  • 树协议原理分析
  • 总结
  • 结尾

前言

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

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

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

概述

有一类数据库元素,它的组织结构是树的形式,树中的各元素之间没有包含关系,如B-树索引数据的组织形式,对于此类数据的访问必须从树进行查找访问,这与之前介绍的数据库元素的层次结构,在加锁方式上不一样。

本文将重点介绍树形结构组织的数据的访问规则,封锁原理,以及一些优化的谈讨。

树结构的封锁不同点

  • 访问需要加锁; 在访问树形数据时,假如是B-树索引,为了保持读写操作的可串行化,需要进行封锁访问,锁模式如之前提到的读锁,写锁,更新锁;

  • 加锁粒度为节点;树的每个节点也是一个数据块,加锁粒度也是节点,更小到元组会带来更多不利,更大的粒度到整棵树,那几乎没有并发性了;

  • 加锁方式与2PL有区别;树的访问都是从根开始,然后一层层遍历,找到对应节点位置;那么加锁也从根开始,按之前介绍的两阶段锁规则,在使用前不能释放锁,那就意味着根节点没有并发性,这不利用索引的使用效率。如果确定不修改树节点,那么就可以提前释放根节点的锁,这就有悖2PL;

基于以上不同,对于树形组织的数据,专门使用树协议加锁方式,而不是2PL方式加锁,在确定当前节点还有空间时,就不会修改根节点,此时就可以提前释放根节点的锁,同样适用于中间节点,当然串行化的保证依赖于都从根往下顺次查找这一顺序。

树协议的规则

树协议由以下规则构成,假定访问树结构使用一种锁,用L(X)来表示加锁X节点;

  • 访问树结构时,第一个锁可以加在树中的任意节点;

  • 只有持有父节点的锁时,才能对其后续节点加锁;

  • 事务可以在任何时候解锁;

  • 不能对已解锁的节点重新加锁,即使此时持有父节点的锁也不行;

举例

在这里插入图片描述

并发三个事务,T1 从节点A开始移动,经过B,C,D;事务T2从B开始,目标是E节点;事务T3从E开始,移动到F和G;其中加锁是L(X),解锁是U(X)表示。

T1T2T3
L1(A);R1(A);
L1(B);R1(B);
L1©;R1©;
W1(A);U1(A);
L1(D);R1(D);
W1(B);U1(B);
L2(B);R2(B);
L3(E);R3(E);
W1(D);U1(D);
W1©;U1©;
L2(E) 被拒绝
L3(F);R3(F);
W3(F);U3(F);
L3(G);R3(G);
W3(E);U3(E);
L2(E);R2(E);
W3(G);U3(G);
W2(B);U2(B);
W2(E);U2(E);

这个例子中,事务T1,T2,T3是按照树协议进行并发调度,其中T2在加锁E节点时,与T3节点发生冲突,导致它被延迟,在T3释放E节点锁之后又得以继续执行。

树协议原理分析

树协议在调度中,锁涉及的事务中的必然包含一个串行动作序列,因为它们都是从上到下的访问顺序,这个可以用优先图来证明,如果优先图中没有环的存在,说明它等价一个可串行化的调度。

通过上面协议规则和树的访问顺序,在一棵树中,两个事务并发时,可以得出以下判断;

  • 假如有几个节点,两个事务都需要加锁,那么这几个节点上的加锁顺序是一样的;

因为两个事务访问的公共元素有两个或两个以上时,每个事务加锁的节点可以组成一个子树,两个子树的交也是一棵子树,访问时也是从最高节点开始,依次向下加锁,所有公共元素的加锁顺序是一致。

总结

对于树形组织的并发访问的控制,不能使用两阶段锁的模式,为了提升并发访问效率,通过树协议,可以提前释放当前节点路径上的锁。

结尾

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

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

这篇关于【数据库】树形数据组织架构下的封锁并发控制,B树索引并发访问控制,树协议原理及案例分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3