time - Spanner 的只读事务

标签 time transactions google-cloud-spanner paxos

我确实了解 Spanner 在一个 paxos 组中的只读事务。

但是多个 paxos 组上的只读事务是如何工作的呢?论文称它使用TT.now().latest作为时间戳,然后使用给定的时间戳执行快照读取。但为什么这会起作用呢?

在每个副本中,都有一个安全时间。安全时间是副本中最后一次写入事务的时间戳。如果asked timestamp <= safe time,则副本是最新的。 .

论文还指出,具有给定时间戳的快照读取(只读事务的第二阶段)可能需要等待副本更新。如果在读事务之后,永远不会发生任何写事务,会发生什么?那么安全时间就永远不会更新,读事务就会永远被阻塞?

最佳答案

AFAICT,重点是,如果一个进程看到 TT.now().latest 已经过去,所有其他进程将永远不会获得该时间戳,因此任何 future 的写入事务的提交时间(安全时间)都将大于该时间。因此执行快照读取的进程只需要等待该时间戳过去即可。

关于time - Spanner 的只读事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27974953/

相关文章:

database - 从两个表中读取时的完整性 : orders and order_items

sql - 在 google cloud spanner 中查询数组

java - 使用 Java 时如何在 Spanner 中实现分页

google-cloud-platform - 云 Spanner : Unexpected CPU utilization

javascript - GoLang 解析 time.Now() 时区?

python - 如何获取过去7小时的strftime?

c - 在函数内声明 struct timeval time

c - 递归遍历目录时 C 中的 gmtime 不一致

Golang 事务退出处理

java - 为什么我得到 Only ancestor queries are allowed inside transactions 错误