You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于时间戳的分布式事务如何保证可重复读?以CockroachDB为例

CockroachDB基于时间戳的分布式事务如何保证可重复读?

CockroachDB依靠全局一致的时间戳和多版本数据存储实现可重复读隔离级别,核心逻辑可拆解为以下几点:

1. 事务的固定读时间戳机制

每个事务在启动(或首次执行读取操作)时,会被分配一个固定不变的读时间戳。整个事务周期内,所有读取操作都基于该时间戳执行——只读取提交时间戳小于等于当前事务读时间戳的已提交数据版本。

2. 针对你提出的场景分析

你的场景:T1启动时间早于T2(T1<T2),T1修改x但未提交时T2读不到修改;后续T1提交后,T2再次读x是否会引发不可重复读?

答案是不会,原因如下:

  • T2启动时已确定读时间戳,此时T1未提交,其对x的修改属于无有效提交时间戳的未提交版本,T2读取x时只能看到自身读时间戳之前已提交的版本,符合预期。
  • T1提交时会被分配一个提交时间戳(该时间戳必然晚于T1启动时间,且大概率晚于T2的读时间戳)。但T2的读时间戳固定不变,后续读取x仍会基于最初的读时间戳筛选版本——T1的提交时间戳大于T2的读时间戳,因此T2看不到T1提交后的x版本,两次读取结果一致,不会触发不可重复读。

3. 多版本存储的支撑

CockroachDB为每个数据项维护多个版本,每个版本绑定唯一的提交时间戳。读取时系统会自动筛选出符合当前事务读时间戳的最新有效版本,确保事务内读取的一致性。

内容的提问来源于stack exchange,提问作者xiaowei ye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:42:34