关于在 YugabyteDB 中使用 safe_time 的说明

问题描述

文档 https://docs.yugabyte.com/latest/architecture/transactions/transactional-io-path/ 说分布式 txn 可以从其中一个涉及的平板电脑中选择 safe_time,并且 safe_time 考虑第一个未提交的 raft 日志的混合时间戳。这是否意味着yugabytedb保证所有txn都可以读取启动前提交的txn写入的数据?

[免责声明]:这个问题最初是在 YugabyteDB 社区 Slack 频道上提出的。

解决方法

为快照隔离事务选择读取时间戳有两个组成部分:(1)它需要足够新以捕获事务开始之前已提交的所有内容; (2) 需要尽可能的低,避免不必要的等待。从事务读取或写入的第一个平板电脑中选择安全时间只是实现上述目标的一种启发式方法。安全时间认为该平板电脑的 Raft 日志中第一个未提交(在 Raft 意义上)记录的时间戳作为输入之一,而真正进入安全时间计算的是未提交的时间戳减去“epsilon”(最小可能的混合时间步)以便该记录提交不会改变截至此时间戳的数据视图(并且安全时间也受到平板电脑领导者的混合时间领导者租用的限制,因此我们可以安全地防止领导者更改和新领导者试图在领导租约到期后的新时间戳)。因此,以上所有内容都涉及“快照安全”(即,如果我们在某个时间读取 read_ht,我们保证不会对时间戳

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...