事务与并发控制

事务(Transaction0):要么全做,要么全不做;

事务ACID:原子性Atomicity;一致性Consistency;隔离性Isolation;持久性Durability;

并发操作问题:

        1.丢失更新;(同时提交数据时,t2的事务会并发导致t1的事务修改被丢失)

        2.不可重复读;(事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了)

        3.读 ' 脏 ' 数据;(并发情况下,事务2读取到事务1修改到一半就回退的数据,读取的数据有误)

封锁是最常用的并发控制技术:

        基本思想为:需要时,事务通过向系统请求对它所希望的数据对象(数据库中的记录)加锁,以确保它不会被非预期改变;

锁的概念:实质上就是一个允许或阻止一个事务对一个数据对象的存取特权;

1.基本的封锁类型有两种:排他锁(Exclusive Lock,X锁)和共享锁(SharedLock,S锁)

2.用封锁对进行并发控制:

        2.1 若事务T对数据D加了X锁,则所有别的事务对数据D的锁请求都必须等待直到事务T释放锁;

        2.2 若事务T对数据D加了S锁,则别的事务还可对数据D请求S锁,而对数据D的X锁请求必须等待直到释放锁;

        2.3 事务执行数据库操作时都要先请求相应的锁,即对读请求S锁,对更新(插入、删除、修改)请求X锁;

        2.4 事务一直占有获得的锁直到结束(COMMIT或ROLLBACK)时释放;

3.封锁的粒度:

        通常以粒度来描述封锁的数据单元的大小;DBMS(数据库管理系统)可以决定不同粒度的锁;有最底层的数据元素到最高层的整个数据库,粒度越细,并发性越大,但软件复杂性和系统开销也就越大;

4.封锁的级别:

        4.1 0级封锁:封锁的事务不重写其它非0级封锁事务的未提交的更新数据。这种状态实际上实用价值不大;

        4.2 1级封锁:被封锁的事务不允许重写未提交的更新数据,这防止丢失更新的发生;

        4.3 2级封锁:被封锁的事务既不重写也不读未提交的更新数据,这除了1级封锁的效果外还防止了读脏数据;

        4.4 3级封锁:被封锁的事务不读未提交的更新数据,不写任何(包含读操作的)未提交的数据;

        4.5 活锁与死锁:

                4.5.1 封锁带来的一个重要问题是困难引起“活锁”与“死锁”;

                4.5.2 锁:级别低的事务无法执行;可采用先来先服务的策略解决;

                4.5.3 死锁:两个以上事务循环等待被同组中另一事务锁住的数据单元的情形,称为“死锁”;

                 - 如何解决: 1. 一次性锁请求; 2. 锁请求排序; 3. 序列化处理;4. 资源剥夺; - 对待死锁的另一种方法是不去防止,而让其发生并随时进行监测,一旦监测到系统已发生了死锁再进行解除处理;

        6. 可串行性:一组事务是一个调度就是它们的基本操作的一种排序;通常,在数据库系统中,*可串行性是并发执行的正确性准则,即当且仅当一组事务的并发执行调度是可串行化的,才认为它们是正确的;

        7. 两段封锁法: 1. 事务划分成两个阶段:1.发展(Growing)或加锁阶段;2.收缩(Shrinking)或释放锁阶段;

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

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

相关文章

基于RNN和Transformer的词级语言建模 代码分析 _generate_square_subsequent_mask

基于RNN和Transformer的词级语言建模 代码分析 _generate_square_subsequent_mask flyfish Word-level Language Modeling using RNN and Transformer word_language_model PyTorch 提供的 word_language_model 示例展示了如何使用循环神经网络RNN(GRU或LSTM)和 Transforme…

汽车IVI中控开发入门及进阶(二十二):video decoder视频解码芯片

前言: 视频解码器在许多汽车、专业和消费视频应用中仍有需求。Analog Devices是模拟视频产品领域的行业领导者,提供一系列视频解码器,可将标准(SD,standard definition)和高清(HD,High definition)分辨率的模拟视频高质量转换为MIPI或TTL格式的数字视频数据。典型的应…

【AI大模型】如何让大模型变得更聪明?基于时代背景的思考

【AI大模型】如何让大模型变得更聪明 前言 在以前,AI和大模型实际上界限较为清晰。但是随着人工智能技术的不断发展,基于大规模预训练模型的应用在基于AI人工智能的技术支持和帮助上,多个领域展现出了前所未有的能力。无论是自然语言处理、…

算法刷题笔记 差分矩阵(C++实现)

文章目录 题目前言题目描述解题思路和代码实现 题目前言 这道题是一道差分算法的拓展题型,是算法刷题笔记到目前为止我认为最困难的题目之一。因此,这篇题解博客的过程记录也最为详细,希望能够为你带来帮助。 题目描述 输入一个n行m列的整…

JavaScript的垃圾回收机制

No.内容链接1Openlayers 【入门教程】 - 【源代码示例300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3Cesium 【入门教程】 - 【源代码图文示例200】 4MapboxGL【入门教程】 - 【源代码图文示例150】 5前端就业宝典 【面试题详细答案 1000】 文章目录 一、垃圾…

匹配字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Python提供了re模块,用于实现正则表达式的操作。在实现时,可以使用re模块提供的方法(如search()、match()、finda…

深入理解Redis:多种操作方式详解

Redis(Remote Dictionary Server)是一款高性能的开源键值存储系统,广泛应用于缓存、会话管理、实时分析等领域。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等,提供了丰富的操作命令。本篇博客将详细介绍…

信息系统项目管理师0603:项目整合管理 — 考点总结(可直接理解记忆)

点击查看专栏目录 文章目录 项目整合管理 — 考点总结(可直接理解记忆) 输入、输出、工具和技术 历年考题直接考输入,输出、工具和技术的有17年11月第34、35,19年5月第34、35,20年11月27、28,21年5月第26,28,21年11月第28,22年5月第25,22年11月第22考题 项目章程是正…

CasaOS玩客云安装全平台高速下载器Gopeed并实现远程访问

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

BufferQueue 的工作原理

bufferQueue 是 Android 图形栈中的一个核心组件,它在生产者和消费者之间传递缓冲区(buffer)。它通常用于图形缓冲区管理,特别是在 SurfaceFlinger 和其他图形相关的组件中。理解 BufferQueue 的工作原理对开发高性能图形应用和解决图形渲染问题非常有帮助。 BufferQueue …

基于Python的酒店客房入侵检测系统的设计与实现

基于Python的酒店客房入侵检测系统的设计与实现 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 酒店客房入侵管理界面 结合上文的结构搭建和用户需求,酒店客房入侵检测系统的…

【Unity Shader入门精要 第12章】屏幕后处理效果(一)

1. 原理和过程 屏幕后处理是绑定摄像机的,通过抓取当前摄像机渲染的图像作为 SrcTextrue,然后按需依次调用处理接口,对 SrcTexture 进行处理,最后将处理完成的 DstTexture 显示到屏幕上,整个过程的调度通过 C# 脚本完…

使用 C++ 在当前进程中获取指定模块的基址

C 实现 , 获取指定模块在该进程中的基址 1、流程: 获取进程的所有模块信息–>遍历模块列表 2、实现: // 我自己定义的 typedef struct moudle_date_ {HANDLE mhandle; // 句柄char mname[64]; // 名称char* date; // 数据DWORD mdword; // 基址…

【机器学习】Adaboost: 强化弱学习器的自适应提升方法

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Adaboost: 强化弱学习器的自适应提升方法引言Adaboost基础概念弱学习器与强学习…

存储器容量小才使用SRAM芯片,容量较大时使用DRAM芯片。为什么?

在计算机系统中,存储器容量的选择涉及到多种因素,包括成本、速度和复杂性。SRAM(静态随机存取存储器)和DRAM(动态随机存取存储器)是两种常见的内存类型,它们在设计和应用上有显著的不同。以下是…

【蓝桥杯嵌入式】 第六届国赛

目录 题目 配置 注意事项 代码 - 默写大师 EEPROM读写函数 LED驱动函数 ADC采集 上电初始化 LCD 按键 PWM互补输出 全部代码 hardware.c hardware.h control.c control.h main.c 题目 配置 注意事项 复制LCD的工程,先配置资源 --- 勾选完选项一…

CCIG 2024:合合信息文档解析技术突破与应用前景

目录 背景当前大模型训练和应用面临的问题训练Token耗尽训练语料质量要求高LLM文档问答应用中文档解析不精准 合合信息的文档解析技术1. 具备多文档元素识别能力2. 具备版面分析能力3. 高性能的文档解析4. 高精准、高效率的文档解析文档多板式部分示例 文档解析典型技术难点元素…

【代码随想录Day23】|669.修建二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 这题最开始的想法是复用删除节点的那题的思路做,需要修改的部分就是要让程序删除完一个点后继续遍历,因为后续可能还有不符合条件的节点。但这样想也做复杂了。 这类题其实不用想用什么序遍历,用哪种方式只是为了更好的…

案例|开发一个美业小程序,都有什么功能

随着移动互联网的迅猛发展,美业连锁机构纷纷寻求数字化转型,以小程序为载体,提升服务效率,增强客户体验。 线下店现在面临的困境: 客户到店排队时间过长,体验感受差 新客引流难,老用户回头客…

基于EV54Y39A PIC-IOT WA的手指数量检测功能开发(MPLAB+ADC)

目录 项目介绍硬件介绍项目设计开发环境及工程参考总体流程图硬件基本配置光照传感器读取定时器检测逻辑 功能展示项目总结 👉 【Funpack3-2】基于EV54Y39A PIC-IOT WA的手指数量检测功能开发 👉 Github: EmbeddedCamerata/PIC-IOT_finger_recognition 项…