【问题标题】:Is session pool of the cloud spanner library for Java FIFO?Java FIFO的云扳手库的会话池?
【发布时间】:2021-03-03 05:22:03
【问题描述】:

如果不是FIFO,会导致意外中止。

Spanner 的中止系统和写入会话的规范如下;

  • 如果事务冲突,spanner 将中止其中一个。
  • 应该中止哪个事务基本上是由事务的开始时间决定的。
  • 写入操作的会话启动事务,然后将它们保存在池中。

如果会话池不是 FIFO,则一个线程 (=A) 启动的事务有可能被另一个线程 (=B) 启动的另一个事务中止,即使 B 在 A 获取会话后获取会话会话。

【问题讨论】:

  • 我意识到“应该中止哪个事务基本上是由事务的开始时间决定的。”是错的。由 BeginTransaction 调用后对事务的第一个操作决定。

标签: java google-cloud-spanner


【解决方案1】:

在 Java 客户端库中,会话池中的会话在 LIFO order 中返回,以提高服务器端的缓存和性能。

在 SessionPool 中使用 FIFO 与 LIFO 应该不会对事务中止率产生任何影响。对于有冲突的事务,开始时间被计为在 BeginTransaction 调用之后对事务的第一次操作。所以它不应该取决于使用哪个会话。

此外,从v3.0.0 开始,准备读/写事务的会话池已被删除,因此现在在事务运行时从池中检索会话时开始事务。详情见here

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 1970-01-01
    • 2018-08-22
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 2020-01-25
    • 2019-04-27
    相关资源
    最近更新 更多