java - 我应该在每次执行批处理后提交吗?

标签 java jdbc commit bind-variables

我有一个 1 万亿的记录文件。批处理大小为 1000,之后执行批处理。

我应该在每个 Batch 之后提交吗?还是在所有 1 万亿条记录以 1000 条为一组执行后仅提交一次?

{
// Loop for 1 Trillion Records
statement.AddBatch()

      if (++count % 1000 == 0) 
       {
       statement.executeBatch()
       // SHOULD I COMMIT HERE AFTER EACH BATCH ???
       }

} // End Loop
// SHOULD I COMMIT HERE ONCE ONLY ????

最佳答案

提交标志着成功事务的结束。所以提交理论上应该在所有行都成功执行之后发生。 如果执行语句是完全独立的,那么每个人都应该有自己的提交(理论上)。

但是数据库系统可能存在限制,需要将行拆分为多个批处理,并提交自己的提交。由于数据库必须保留一些空间才能进行回滚,除非更改已提交,因此巨大事务大小的“成本”可能非常高。

所以答案是:这取决于您的要求、您的数据库和环境。

关于java - 我应该在每次执行批处理后提交吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24772789/

相关文章:

java - java 方法中 JDBC 连接到 derby

java - 如何在 Windows 上设置 JUNIT 以使用 Sublime 和命令行?

java - Apache 点燃: insert SQL with composite key via PreapredStatement

java - 如何使用 JDBC 从 Oracle 11g 获取注释?

github - 如何从 GitHub 上的拉取请求的 5 个提交中挑选 2 个?

mysql - 事务并发性以防止读取旧版本的记录

git - 如何配置 Git post commit 钩子(Hook)

java - Java 中的转换(接口(interface)和类)

java - Spring Boot 以自己的对象作为键返回 Map 的问题

tomcat - 更改 Tomcat 数据源池中的目录