暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
TIKV 分布式事务--加锁的 KEY 是什么.pdf
98
23页
0次
2024-09-20
5墨值下载
前言
一般为了表述的简洁,我们在介绍
TIDB
分布式事务的时候,经常说
TIDB
会对
KEY 加锁,或者对 KEY 进行锁的检测,从而保障事务的逻辑性和隔离性。
但是这个 KEY 到底是什么,对想要了解分布式事务的同学来说,可能不够直观。
我们今天将会使用具体的 SQL,结合不同类型的主键与索引,来观察
TIKV
布式事务中的锁到底是什么。
开始之前,需要参考文章:《说计算》来了解关系型数据库和 KV 键值之间的
关联
TiDB 表中的一条数据,最后会对应多个 Key-Value 去存储。我
们来一起回顾一下重点:这些 Key-Value 分为两类:
RowID => Value : 主键信息,该类数据存储着当前对应行
的所有信息。
o
{ Key:
tablePrefix{tableID}_recordPrefixSep{rowID},
Value: [col1, col2, col3, col4] }
o
Index Key => RowID: 索引信息,该类数据为索引到
RowID 的映射。表有多少的索引,每行数据就有多少个这
样的 Key-Value。根据是否是唯一索引,分为如下两种类
o
{ Key:
tablePrefix{tableID}_indexPrefixSep{indexID}_
indexedColumnsValue, Value: rowID }
o
o
{ Key:
tablePrefix{tableID}_indexPrefixSep{indexID}_
indexedColumnsValue_rowID, Value: null }
o
理解了上面,其实分布式事务就是对这些 KEY 进行加锁: 一个是对
主键
进行加
锁,一个是对
唯一索引
进行加锁。
对于普通的索引来说:
(
tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue_row
ID
)
由于分布式事务会对 rowID 主键进行加锁,因此普通索引的 KEY 实际上受到了
rowID
这个主键上面锁的保护,不需要加锁。
测试过程中,建表语句如下:
CREATE TABLE `MANAGERS_UNIQUE` (
`MANAGER_ID` int(11) NOT NULL,
`FIRST_NAME` varchar(45) NOT NULL,
`LAST_NAME` varchar(45) NOT NULL,
`LEVER` int(11) DEFAULT NULL,
PRIMARY KEY (`MANAGER_ID`)
UNIQUE KEY `FIRST` (`FIRST_NAME`),
KEY `LEVEL` (`LEVEL`)
)
插入数据:
mysql> INSERT INTO MANAGERS_UNIQUE(MANAGER_ID,FIRST_NAME, LAST_NAME)
VALUES (14273,'Brad7','Craven7',7);
of 23
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜