【问题标题】:Can executeQuery and executeBatch be used simultaneously with one connection for each?是否可以同时使用 executeQuery 和 executeBatch,每个连接一个连接?
【发布时间】:2021-12-26 05:33:42
【问题描述】:

我有一个用例,我需要批量处理一些查询( stmt.addBatch() )并且一些查询需要在创建后立即执行(stmt.executeQuery() ),因为它们的结果将是在进行批处理的查询中使用。数据库(显然)对两者都是通用的。我的问题是我可以为上述用例保持两个打开的连接吗?考虑到一致性和可行性,这是一个好主意吗?

编辑:如果有问题的查询要作用于不同的记录,是否可以保持 2 个同时活动的连接对象处于活动状态以处理每个场景?

附: - 我对后端和数据库比较陌生,请您提供一些解释/进一步阅读指针。

【问题讨论】:

  • 不,数据库如何跟踪更新的数据,它会锁定一个行或表,然后当锁被释放时第二个可以完成它的任务
  • 如果您担心一致性,我会研究 JDBC Transactions。
  • @nbk 我明白了。顺便说一句,是否可以同时拥有两个活动连接对象,一个用于批处理,另一个用于立即执行?假设查询不会处理相同的记录。

标签: java mysql jdbc batch-processing


【解决方案1】:

在您的情况下,基本上无法预测哪个将首先启动,因为处理器也可以将命令转移到风险级别。

在 rdms 的视图中,您可以同时访问同一个表/行,您可以阅读更多关于locking的信息

因为 executebatch 是空批次的一个事务,所以如果它首先启动,您的单个命令将被锁定,直到解除锁定,然后如果不是第一个超时命中则继续。

因此,对于一个 rdms,可以保证一致性,对于复制系统,它会得到更多 complicated

哦,我看到了一个编辑:

第一个链接中提到了行级锁,这也将回答您的编辑:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 2016-05-25
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多