我确实了解 Spanner 在一个 paxos 组中的只读事务。
但是多个 paxos 组上的只读事务是如何工作的呢?论文称它使用TT.now().latest
作为时间戳,然后使用给定的时间戳执行快照读取。但为什么这会起作用呢?
在每个副本中,都有一个安全时间。安全时间是副本中最后一次写入事务的时间戳。如果asked timestamp <= safe time
,则副本是最新的。 .
论文还指出,具有给定时间戳的快照读取(只读事务的第二阶段)可能需要等待副本更新。如果在读事务之后,永远不会发生任何写事务,会发生什么?那么安全时间就永远不会更新,读事务就会永远被阻塞?
最佳答案
AFAICT,重点是,如果一个进程看到 TT.now().latest 已经过去,所有其他进程将永远不会获得该时间戳,因此任何 future 的写入事务的提交时间(安全时间)都将大于该时间。因此执行快照读取的进程只需要等待该时间戳过去即可。
关于time - Spanner 的只读事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27974953/