我确实了解 Spanner 在一个 paxos 组中的只读事务。
但是多个 paxos 组上的只读事务是如何工作的呢?该论文说它TT.now().latest
用作时间戳,然后使用给定的时间戳执行快照读取。但为什么这行得通?
在每个副本中,都有一个安全时间。安全时间是副本中最后一次写入事务的时间戳。副本是最新的,如果asked timestamp <= safe time
.
该论文还说,使用给定时间戳(只读事务的第二阶段)读取的快照可能需要等到副本是最新的。如果在读事务之后,将永远不会发生任何写事务,会发生什么情况?那么安全时间永远不会更新,读取事务会永远被阻塞?