use*_*261 2 java spring jdbc batch-processing spring-batch
我需要编写一个批处理作业,该作业从数据库表中获取行并基于某些条件,写入其他表或使用特定值更新此行.我们使用spring和jdbc来获取结果集,并使用计划每周运行的独立java程序迭代并处理记录.我知道这不是正确的方法,但我们必须将其作为临时解决方案.随着记录增长到数百万,我们最终会出现内存异常,所以我知道这不是最好的方法.
你们中的任何人都可以推荐一种处理这种情况的最佳方法吗?
使用线程并为每个线程获取1000条记录并并行处理它们?
(要么)
使用任何其他批处理机制来执行此操作(我知道有弹簧批但从未使用过此)
(要么)
还有其他想法吗?
您已经知道,您不能将一百万行带入内存并对其进行操作.
你必须以某种方式对它们进行分块.
为什么要将它们带到中间层?我会考虑编写存储过程并对数据库服务器上的数据进行操作.把它带到中间层似乎并不是在为你买东西.让您的批处理作业启动存储过程并在数据库服务器中就地进行计算.
批处理作业从数据库表中提取行并基于某些条件,写入其他表或使用特定值更新此行.
这听起来像你应该在数据库中做的事情.例如,要获取特定行并根据特定条件更新它,SQL会使用该UPDATE ... WHERE ...语句.要写入另一个表,您可以使用INSERT ... SELECT ....
这些可能会变得相当复杂,但我建议尽一切力量在数据库中执行此操作,因为将数据拉出来过滤它非常慢并且无法实现关系数据库的目的.
注意:请务必首先在非生产系统上进行实验,并实施所需的任何限制,以免在不良时间锁定生产表.
| 归档时间: |
|
| 查看次数: |
5728 次 |
| 最近记录: |