在Google Spanner中,是否有可能在已经观察到之后再次出现完全相同的提交时间戳

2024-04-08

在 Google Spanner 中,提交时间戳由服务器生成并基于“TrueTime”,如中所述https://cloud.google.com/spanner/docs/commit-timestamp https://cloud.google.com/spanner/docs/commit-timestamp。此页面还指出,不能保证时间戳是唯一的,因此多个独立编写者可以生成完全相同的时间戳。

在一致性保证的文件中,指出In addition if one transaction completes before another transaction starts to commit, the system guarantees that clients can never see a state that includes the effect of the second transaction but not the first.

我想要理解的是以下的组合

  1. 多个并发事务“同时”提交,导致相同的提交时间戳(其中提交时间戳构成表键的一部分)
  2. 读者观察上表中输入的新行

在这种情况下,读者是否可以观察到一些但不是全部的行(最终)将使用完全相同的时间戳进行存储?或者换句话说,如果搜索已知精确时间戳之前的所有行,并且使用该时间戳插入行,那么查询是否有可能首先返回一些结果,但再次执行时返回更多结果?

其上下文是尝试以仅附加方式对按时间排序的事件流进行建模 - 我需要能够将游标有效地保留到特定时间点(事件流中的点)并且需要了解在时间 T 观察到的事件是否意味着您永远无法在确切的时间 T 再次获得更多事件。


Spanner 是外部一致的,这意味着任何读者都只能读取已完成事务的结果......

与所有外部一致的数据库一起,它是not事务之外的读取器可能能够读取另一个事务的“待处理状态”。因此,时间 T 的读者只能看到已提交的事务before时间T。

提交时间 T 处的多个同时插入/更新事务(这会影响不同的行,否则它们不能同时发生)在时间 T 时读者不会看到,但读者在 T+1 时会看到这两个事务

我...需要知道在时间 T 观察到事件是否意味着您永远无法在确切的时间 T 再次获得更多事件。

是的 - 是的。稍微改一下,因为这是微妙的:
读取时间 T(含)之前的事件意味着您将永远不会再获得时间等于或之前发生的任何事件

但请记住,提交时间戳列是一个简单的 TIMESTAMP 列,其中any值可以被存储——应用程序请求存储的值是提交时间戳,并且数据库级别没有任何东西可以阻止应用程序存储它喜欢的任何值......

与 Spanner 一样,应用程序必须强制/维护数据完整性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Google Spanner中,是否有可能在已经观察到之后再次出现完全相同的提交时间戳 的相关文章

随机推荐