mysql 事务四要素杂谈
2024-08-24 05:49:54
事务四要素
对于数据库来说,并发性和准确性是数据库需要权衡的两个点。
类似于我们的应用系统,又要要性能还要要准确。
数据准确性这一条来说,最好的控制就是串行化,都别急,一个一个来。这样数据就没问题了。
然而就是这个 “都别急” 让大家很急,我们又想要并发,现在这环境你不谈并发都不好意思拿出手。
好了,那么并发和数据准确性怎么平衡。要并发我们所能想到的就是在必要的时候加锁,
加各种层级各种范围不一样的锁。加锁这个操作其实就是在平衡我们刚才的那两点。
这里不谈数据库的锁机制,我们先来谈谈 事务ACID 中的隔离性— 事务隔离级别
那你会问,这是个什么?为什么要有隔离性,我不隔离不行么?
说到这呢,我们就要简单再说说事务,事务我估计大家耳熟能详,但是这里你们最好再听我唠叨一下,看我说的对不对。
(敲黑板,划重点)事务就是一个执行单元,一个具有原子性的执行单元。
我觉得还是有必要再说说或者总结一下事务四要素
原子性
这个也很好理解,这个事务就是一个原子单元,要么执行成功,要么执行失败,中间不能有断层。
类似于多线程同时操作一个变量,你告诉操作系统,我在这原子操作变量呢,你别进行线程切换(时间片切换),等我执行完,你再随意~
一致性
数据库总是从一个一致性的状态转换到另一个一致性的状态。
我的理解是最终一致性也就是CAP理论的C.
一开始我总觉得这个一致性和原子性的定义是一个东西(我现在也隐约有这样一种感觉)
我还是尝试着总结区分他们的不同。
比如说原子性:我一条语句执行失败了要回滚。
比如说一致性:我执行到中间停电了,数据库崩溃了,我们可以维持正确的状态。
原子性更像是—过程,我注重的是过程
一致性更像是—结果,我不管过程怎样,我只是用我的KPI来考量你~
再说隔离性
其实这篇文章我想写隔离性,但是写隔离性我想从事务这四要素进行引申,写到这我发现我跑题了。我去改改标题。
我没有写具体的事务隔离性,我现在正在事务四要素这捆着呢。
那就说说隔离性,我第一次看到隔离性这个定义,脑子第一反应就是隔离性这个概念将每个事务化作程了管道,
每条管道留着属于自己的信息,互相是不知道存在的。
后来发现隔离性能是有隔离级别的,因为业务场景不尽相同,需要不同的隔离级别。
类似于,我一个操作操作的数据因不应该让其他事务看到我修改的数据?—需要,因为有的场景需要这样的可见性
我总将事物的隔离性总结为事物的可见性,这个可见性包括什么可以看?什么时候看?
这些问题我打算下次再总结。我们这里不细讨论。
持久性
呀,这个要素让我很是想不到,因为太熟悉了,熟悉的得都会想不起它。
怎么才算是持久性呢?定义是:一旦事务提交,其所做的修改将会永久保存到数据库中。
这个定义是模糊的,需要加入很多策略来保证数据的持久性。
比如:我就是在事务提交时,系统挂掉了,你怎么来保证数据的持久性。
总结一下,事务四要素,不但要知道名字最好理解一下,有些东西就怕细细琢磨~
最新文章
- CSharpGL(15)用GLSL渲染2种类型的文字
- Thinking in java学习笔记之map的应用
- C语言与套接字
- Azure Remote Desktop: ";An error occurred while loading from file *.rdp";
- 将NuGet配置到环境变量中
- Tomcat启动报错:严重: StandardServer.await: create[8005] java.net.BindException: Cannot assign requested address
- 关于Android中传递数据的一些讨论--备用
- matlab如何保存figure中去掉白边的图片
- Hololens生成与安装(旁加载)应用
- Java Web Session设置
- bootstrap浅谈
- spark streamingcontext
- HDU4624 Endless Spin 【最大最小反演】【期望DP】
- Tensorflow实例:利用LSTM预测股票每日最高价(一)
- 一些日常工具集合(C++代码片段)
- 报错解决——make: *** No targets specified and no makefile found. Stop
- sql在insert时判断有无唯一性冲突
- C++ Primer Plus学习:第七章
- jquery 获取绑定事件
- flask与javascript及ajax