如何使用java处理向db2表中插入的1亿条记录

如何使用java处理向db2表中插入的1亿条记录,java,sql,db2,spring-batch,Java,Sql,Db2,Spring Batch,作为应用程序开发的一部分,我们需要读取1亿条记录,处理它们,然后将它们插入DB2表中 我们在主键上使用索引,但不确定插入过程是否需要很长的时间,比如几个小时 我们正在对目标表的字段名进行哈希运算,以便在不同节点之间分发数据。因此,如果我们考虑分区表/散列字段数据,我想这对插入没有帮助 我想知道有哪些可用选项可以使用Java高效地处理向DB2数据库表中插入的1亿条记录。我们使用的是spring批处理(一次处理9k条记录) 提前感谢。选项1(Java): 我认为您可以尝试对源表进行分区。这会有很大帮

作为应用程序开发的一部分,我们需要读取1亿条记录,处理它们,然后将它们插入DB2表中

我们在主键上使用索引,但不确定插入过程是否需要很长的时间,比如几个小时

我们正在对目标表的字段名进行哈希运算,以便在不同节点之间分发数据。因此,如果我们考虑分区表/散列字段数据,我想这对插入没有帮助

我想知道有哪些可用选项可以使用Java高效地处理向DB2数据库表中插入的1亿条记录。我们使用的是spring批处理(一次处理9k条记录)

提前感谢。

选项1(Java): 我认为您可以尝试对源表进行分区。这会有很大帮助,但也会带来一些牺牲,比如你无法更新你选择分区的列。您还必须选择要分区的正确列。您不希望最终得到1000个分区。相反,您希望对可能没有任何关系的分段数据进行分区。例如,如果源中有一列CITY,您可以尝试在CITY上进行分区。所以,如果您有50个城市的数据,那么最终可能会有50个分区。这很有帮助。您尝试按日期范围或一年中的季度进行分区。 这些确实在选择数据方面帮了我很大的忙,而且您还可以研究每个分区上的多线程

选项2(存储过程(SP)):
您可以尝试在数据库中使用存储过程(PL/SQL),这样就不必担心Java问题。SP比Java的批处理速度快100倍。但如果可能的话,我仍然建议您对源表进行分区,即使您使用SP。

这个问题可能更适合您。我将其标记为迁移。通常,使用特定RDBMS可用的工具之一(我猜它将是DB2的load utility)将所有数据加载到RDBMS DB中,然后在数据库中处理数据,效率更高。我不知道这在你的情况下是否可能,但在我的工作历史中,这总是可能的,而且总是比应用程序的逐行方法快得多一个重要提示:当插入这样的海量数据时,不要创建索引(也不要定义主键,它是用索引实现的)直到加载所有数据。在许多数据库上,最好将任何触发器和规则的创建延迟到插入完成之后。最后一步,我删除了所有索引,使用load实用程序加载行,然后重新生成所有索引。速度更快并不重要。重要的是,在准备加载之前,我们不必锁定表。@techi对不起,我的意思是您的编写器进程是否使用JDBC
addBatch()
executeBatch()
调用。对于并行化,是否有多个单独的线程写入数据库(即,对输入进行分区,并有多个线程处理/写入)?另外,您的吞吐量要求是什么?这需要运行多快?