如何解决是 Java FIFO 的云扳手库的会话池吗?
如果不是FIFO,会导致意外中止。
Spanner 的中止系统和写入会话的规范如下;
- 如果事务发生冲突,扳手将中止其中之一。
- 应该中止哪个事务基本上由事务的开始时间决定。
- 写入操作的会话启动事务,然后将它们保存在池中。
如果会话池不是 FIFO,则有可能由一个线程 (=A) 启动的事务将被另一个线程 (=B) 启动的另一个事务中止,即使 B 在 A 获取会话后获取会话会议。
解决方法
在 Java 客户端库中,会话池中的会话在 LIFO order 中返回,以改进服务器端的缓存和性能。
在 SessionPool 中使用 FIFO 与 LIFO 应该不会对事务中止率产生任何影响。对于有冲突的事务,开始时间计为调用 BeginTransaction 后对事务的第一个操作。所以它不应该取决于使用哪个会话。
此外,从 v3.0.0 开始,准备读/写事务的会话池已被移除,因此现在当事务运行时从池中检索会话时,事务开始。查看详情here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。