有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

spring用Java处理数百万条数据库记录

我需要编写一个批处理作业,从数据库表中获取行,并根据特定条件写入其他表或使用特定值更新此行。我们使用spring和jdbc获取结果集,并使用一个计划每周运行的独立java程序迭代和处理记录。我知道这不是正确的方法,但我们必须把它作为一个临时解决方案。随着记录增长到数百万,我们最终会出现内存不足的异常,所以我知道这不是最好的方法

你们有谁能推荐处理这种情况的最佳方法吗

使用线程,每个线程获取1000条记录,并并行处理它们

(或)

使用任何其他批处理机制来实现这一点(我知道有spring批处理,但从未使用过它)

(或)

还有其他想法吗


共 (2) 个答案

  1. # 1 楼答案

    您已经知道,无法将一百万行放入内存并对其进行操作

    你必须以某种方式把它们切碎

    为什么要把他们带到中层?我会考虑编写存储过程并对数据库服务器上的数据进行操作。把它带到中间层似乎并没有给你买任何东西。让批处理作业启动存储过程,并在数据库服务器中进行适当的计算

  2. # 2 楼答案

    a batch job that fetches rows from a database table and based on a certain conditions, write to other tables or update this row with a certain value.

    这听起来像是你应该在数据库中做的事情。例如,为了获取特定的行并根据特定条件更新它,SQL使用^{} statement。要写入另一个表,可以使用^{}

    这些可能会变得相当复杂,但我建议在数据库中尽你所能做到这一点,因为将数据提取出来进行过滤的速度非常慢,而且会破坏建立关系数据库的目的

    注意:请确保首先在非生产系统上进行试验,并实施所需的任何限制,以免在不好的时候锁定生产表