2023-08-28 数据库-并发控制-初步思考

news/2024/7/8 3:03:40 标签: 数据库, 并发控制

摘要:

此前做查询优化和查询执行比较多, 一般是在一个单独的事务内考虑优化查询.

最近在做并发控制方面的事情, 一些此前考虑的较少的方面需要做更为深入的思考.

并发控制和事务的特性息息相关, 直白的说就是事务的隔离性, 但是这么理解过于肤浅, 本文做一些初步的思考.

为什么需要并发控制?

一. 从资源临界区的角度理解

  1. 一个比较明显的点就是数据库的数据对于所有的会话都保持了内存可见性, 也就是所有的客户端会话在操作临界区的数据
  2. 从线程安全的角度, 对于临界区, 是要进行加锁操作, 以保持每个执行线程的内存可见性
  3. 即使是每个会话的执行序列都正确执行, 那么操作同一份数据也会导致两个独立的会话相互影响

二. 从事务的角度理解

  1. 按照八股文的说法事务的特性ACID, 这里必须保持隔离性
  2. 事务的目的是为了保证数据库在遇到问题的时候的安全, 引发出了ACID四个特性, 也导致了一系列的八股文
  3. 那么考虑下, 事务是什么? 是的,是一些列操作序列的集合, 分为读r和写w
  4. 那么为什么事务需要并发控制呢?
  5. 如果在某一时刻, 仅仅只有一个事务, 那么就没有并发, 自然不需要并发控制
  6. 如果在同一个时刻,有多个事务,但是这个事务,是排队执行, 也就是可串行化的隔离级别,那么这些事务也不会互相影响, 自然也不需要并发控制
  7. 那么为什么不把事务都做成可串行化的,一个一个排队在单个线程中执行呢?
  8. redis是单个线程的串行化处理的, 但是这么做有前置条件
    1. redis的数据主要在内存, 读和写也是在内存, 持久化是在后台的子进程单独的去处理, 所以可以理解成单个事务操作耗时极短
    2. 如果单个事务执行耗时过长,将会后续排队的事务造成影响 
  9. 但是如果直接套用在AP领域或者关系型数据库领域, 就不适合,因为事务必须要保证持久性, 一个事务的完成,必须要持久化到磁盘, 这会单个事务的执行耗时有巨大的影响
  10. 所以一般的数据库对于单个客户端会话都采用了一个独立的线程去处理,而不是像redis那样所有的客户端的会话都只在一个线程中处理。极端的例如pg是用一个独立的进程去处理


http://www.niftyadmin.cn/n/4982136.html

相关文章

存储快速入门

基础知识 定义 历史 1.原始时代 2.电子化时代 3.电磁化时代 4.集成化时代 玩家(中国) 存储核心能力

git各类问题处理收集

一、pull Git拉取失败 Your local changes would be overwritten by merge.Commit, stash or revert them to proceed 1.通过VCS -> Git -> Stash Changes,将本地的所有改动暂存到本地仓库。 这一步执行后会隐藏本地的所有改动 2.pull 3.如果想把自己修改的部…

three.js(五):canvas 的响应式布局

1-canvas 的响应式布局 canvas 画布的尺寸有两种: 像素尺寸,即canvas画布在高度和宽度上有多少个像素,默认是300*150css 尺寸,即css 里的width和height 在web前端,dom元素的响应式布局一般是通过css 实现的。而canvas…

Python学习笔记:Requests库安装、通过url下载文件

1.下载安装requests库 在pipy或者github下载,通常是个zip,解压缩后在路径输入cmd,并运行以下代码 Python setup.py install 安装完成后,输入python再输入import requests得到可以判断时候完成安装 2.通过url下载文件 使用的是u…

linux:shell ==命令sh无效

问题: 如题 解决办法: 将更换为或者-eq

《Understanding Black-box Predictions via Influence Functions》笔记

[1] 通过升权( 2.1 \S 2.1 2.1)、扰动( 2.2 \S 2.2 2.2)两种方式研究某个 training point z ( x , y ) z(x,y) z(x,y) 对(优化后的)模型参数 θ ^ \hat\theta θ^、模型在某个 test point z test ( …

19 NAT穿透|python高级

文章目录 网络通信过程NAT穿透 python高级GIL锁深拷贝与浅拷贝私有化import导入模块工厂模式多继承以及 MRO 顺序烧脑题property属性property装饰器property类属性 魔法属性\_\_doc\_\_\_\_module\_\_ 和 \_\_class\_\_\_\_init\_\_\_\_del\_\_\_\_call\_\_\_\_dict\_\_\_\_str…

linux并发服务器 —— 多进程并发(四)

进程概述 程序是包含一系列信息的文件,描述了如何在运行时创建一个进程; 进程是正在运行的程序的实例,可以用一个程序来创建多个进程; 用户内存空间包含程序代码以及代码所使用的变量,内核数据结构用于维护进程状态…