2

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

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

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

该论文还说,使用给定时间戳(只读事务的第二阶段)读取的快照可能需要等到副本是最新的。如果在读事务之后,将永远不会发生任何写事务,会发生什么情况?那么安全时间永远不会更新,读取事务会永远被阻塞?

4

2 回答 2

1

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

于 2015-05-01T05:23:44.770 回答
1

Spanner 现在可以在 Google Cloud Platform 上使用。

以下是有关只读事务如何工作的文档:

https://cloud.google.com/spanner/docs/transactions#read-only_transactions

==

Cloud Spanner 只读事务在单个逻辑时间点执行一组读取,无论是从只读事务本身的角度来看,还是从 Cloud Spanner 数据库的其他读取者和写入者的角度来看。这意味着只读事务始终在事务历史中的选定点观察数据库的一致状态。

==

于 2017-02-21T22:54:18.603 回答