事务实现细节相关问题

您好, 最近学习TiDB的架构和事务相关的问题, 有两点我从现有的文档中找不到明确答案, 想请问下:

1.TiDB的MVCC中的version和Rocksdb的sequencenumber有什么关系吗?

2.开启FollowerRead后, 由于在Percolator框架中读也要check锁, 我的理解是TiDb中Follower上的锁应该也依赖于raft日志同步和apply, 如果正好读的时候Leader上已经有锁了, 但Follower上还没, 这种是不是可能会违反Snapshot Isolation呢?

感谢您的解答!

image
找到一张这个 图,我的理解 tikv的key是写到user key里,rocksdb里的mvcc是依靠seqeuncenumber实现。 follower同步是raft协议复制同步的和事务锁没关系,所有的操作都raft消息append,读follower时还没apply到snapshot的点就等他apply。

感谢您的回答!
我大概了解了, 应该是事务2的start_ts>事务1的commit_ts时, 说明事务1的prewrite肯定已经做完了, 事务2读的follower肯定也已经有事务1的日志了, 锁信息也在follower上了, 这时候一定能读到锁.

key带了seqeuncenumber,查找的时候事先不知道seqeuncenumber,那只能通过 rocksdb的seek查找,而不能直接定位key,那岂不是性能降低了吗?为了防止性能降低,估计是用了rocksdb的prefix_extractor?prefix_extractor是定长的,各种key的组成也是定长的?key的规则是怎么样的?

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。