根据他们的寻呼机,它说:“ TT.after()和TT.before()方法是TT.now()的便捷包装。”
根据What is the TrueTime API in Google's Spanner?
它还提供两个功能:
如果确实经过t,
- after(t)返回true。例如。 t
如果t绝对还没有到达,或者<> now()。latest, - before(t)返回true。
我的问题是:
TT.now()
返回的结果是否相同?before(t)
是true,而服务器B上的false是否可能?TT.after(t)
为真,某个时间以后,TT.after(t)
是否为假?答案 0 :(得分:2)
有关Truetime和Spanner如何工作的详细信息,请参阅Spanner Whitpaper (1)的第3节。
问题"Why is Google's TrueTime API hard to duplicate?" (2)
中讨论了如何实施根据《扳手白皮书》,TrueTime值不是单个值,而是时间戳 range ,该时间戳保证包含绝对值。此范围考虑了潜在的时钟漂移-在Google的网络中,每30秒将服务器时钟同步到atomic / GPS参考时间最多可达7ms(根据白皮书)。
因此,如果TTstamp1
是范围(t1_lo, t1_hi)
,而TTstamp2
是范围(t2_lo, t2_hi)
,则before()
和after()
只是比较了这些范围以确认它们不重叠。
TTstamp1.before(TTValue2) = t1_hi < t2_lo
TTstamp1.after(TTValue2) = t1_lo > t2_hi
因此,您的问题的答案是:
否,即使在完全相同的时刻调用TT.now()
也不会在所有服务器上返回相同的结果。但是,在那一刻被调用时,在所有服务器上获得的值将彼此重叠,这意味着它们之间没有一个在彼此之前或之后。
因此,对于给定的TrueTime t
,从技术上来说,服务器A t.before(now)
上的true
和服务器B {{1由于重叠比较和可能范围之间的差异,}}为t.before(now)
。对于Spanner来说,这不是问题,因为它将等待,直到提交事务并存储其时间戳之前没有重叠(false
)。
(注意:此信息来自公共白皮书和文档)
答案 1 :(得分:0)