Spanner的只读事务

时间:2015-01-15 23:32:57

标签: time transactions google-cloud-spanner paxos

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

Spanner现已在Google Cloud Platform上提供服务。

以下是有关只读交易如何运作的文档:

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

==

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

==