【发布时间】:2016-06-27 00:07:40
【问题描述】:
作为我们应用程序开发的一部分,我们需要读取 1 亿条记录,对其进行处理,然后将它们插入到 DB2 表中。
我们在主键上使用索引,但不确定插入过程是否需要很长时间,比如几个小时。
我们正在对目标表的字段名称进行哈希处理,以便在不同节点之间分配数据。所以如果我们想到分区表/字段数据的散列,我猜它对插入没有帮助
我想知道使用 Java 有效地处理向 DB2 数据库表中插入 1 亿条记录的可用选项。我们正在使用弹簧批处理(一次批处理 9k 条记录)。
提前致谢。
【问题讨论】:
-
这个问题可能更适合Database Administrators。我正在标记它以进行迁移。
-
通常使用可用于特定 RDBMS 的工具之一将所有数据加载到 RDBMS DB 中效率更高(我猜它是 DB2 的加载实用程序),然后在数据库中处理您的数据。我不知道在您的情况下是否可行,但在我的工作历史中,与应用程序逐行方法相比,它始终是可能的并且总是快得多
-
一个重要提示:当插入这样的大量数据时,在加载所有数据之前不要创建索引(并且不要定义主键,它是通过索引实现的)。在许多数据库上,最好将任何触发器和规则的创建也延迟到插入完成之后。
-
除了@MaxU 所说的,我已经创建了卸载/加载格式的DB2 行并将这些行写入QSAM(平面)文件。作为最后一步,我删除了所有索引,使用加载实用程序加载行,然后重建所有索引。没关系,它更快。重要的是,在我们准备好加载之前,我们不必锁定表。
-
@techi 抱歉,我的意思是您的编写器进程是否使用 JDBC
addBatch()和executeBatch()调用。对于并行化,您是否有多个单独的线程写入数据库(即对输入进行分区并有多个线程处理/写入)?另外,您的吞吐量要求是多少?这需要运行多快?
标签: java sql db2 spring-batch