D24 - Transaction

资料库透过transaction保证资料不会因为各种天灾人祸而消失。当高并发的需求同时涌入,如果没有transaction,就会产生冲突导致常见的dirty read,Phantom Read发生。

TiDB支持分布式事务,透过SS2PL(strong strict two-phase locking)与MVCC(Multi-Version Concurrency Control)。

TiDB在3.0.8版本之前是采用乐观事务,当client开始一个transaction,然後执行一次或者多次的DML,此时的DML会先存在TiDB server的buffer中,当client执行commit之後,这时候TiDB server透过prewrite+lock与commit的二阶段式,将key与value写入TiKV。

而在之後的版本,TiDB转为预设使用悲观事务。与乐观事务不同的点在於当client开始一个transaction,执行了DML之後,此时会先对要异动的key上锁。当client执行commit,则一样透过二阶段式写入key与value。透过使用悲观事务,TiDB提供了Read-committed isolation level。

当使用乐观事务时,在transaction的语法使用上,与MySQL基本上没什麽差别,同样使用begin,start transaction,rollback,commit等等。TiDB不同的点在於当执行了begin或者执行了DDL语法,会implicit commit,翻译成隐式提交。意思是会将前一个transaction自动commit,然後另开一个新的transaction。
而当使用悲观事务的时候,与MySQL的差异在TiDB不支援Gap lock只支援Row lock且只对读取到的Row才会上锁。


<<:  第二十七天:用 TeamCity 部署 API 文件

>>:  Day18|【Git】存在 .git 目录里的东西 - Commit 与 Tag(下)

找LeetCode上简单的题目来撑过30天啦(DAY25)今天国庆放假啦

好啦,今天国庆日,我不想逼迫自己咩,其实是我今天写不出来,写不出的题号是56. Merge Inte...

set<E> 选出所有 E 第一个元素 java

有一SET物件 E 的内容有含 playerId,site,gamedate 有一段SQL sql....

Framebuffer

大家好,我是西瓜,你现在看到的是 2021 iThome 铁人赛『如何在网页中绘制 3D 场景?从 ...

Day 23. 透过 Constraints 机制,实作出能够拉伸的响应式卡片设计

前一篇我们实验 Constraints 各种设定会造成的影响後,相信大家已经对於 Constrai...

Day 01-这30天的前言

前言 相信点开的你,可能是对购物车系统有兴趣亦或是有需求。因为疫情的关系在家自学,而选择了这个主题,...