我需要编写一个批处理作业,从数据库表中获取行,并根据特定条件写入其他表或用特定值更新该行。我们使用 spring 和 jdbc 来获取结果集,并使用计划每周运行的独立 java 程序迭代和处理记录。我知道这不是正确的方法,但我们必须将其作为临时解决方案。随着记录增长到数百万,我们最终会出现内存不足的异常,所以我知道这不是最好的方法。
你们中的任何人都可以推荐处理这种情况的最佳方法吗?
使用线程并每个线程获取 1000 条记录并并行处理它们?
(或)
使用任何其他批处理机制来执行此操作(我知道有 spring-batch 但从未使用过它)
(或)
还有其他想法吗?
最佳答案
您已经知道您无法将一百万行放入内存并对其进行操作。
你必须以某种方式将它们分块。
为什么要把他们带到中间层?我会考虑编写存储过程并对数据库服务器上的数据进行操作。将其提升到中间层似乎并没有给你带来任何好处。让您的批处理作业启动存储过程并在数据库服务器中就地进行计算。
关于java - 用 Java 处理数百万条数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12979229/