将数据批量加载到DB中

时间:2014-08-02 14:05:46

标签: java multithreading bulkinsert

我们有一个linux盒子,其中一些第三方工具丢弃了0.5MB的数据,我们有大约32000个类似的文件。我们需要处理这些文件并插入Oracle10G DB。我们组织中的某个人已经创建了一个Java程序,它作为带有静态字段的守护程序线程运行,以映射文件中的数据并将数据保存到db中并清除下一行的静态字段。

这是文件的串行处理,看起来很慢。我打算通过摆脱它来制作这个多线程,或者,运行多个java进程(相同的jar,但每个进程将以java -jar run.jar开头)进行并行执行。但是,我担心数据锁定等问题。

问题是使用Java将数据批量加载到数据库的最佳方法是什么?或任何其他方式。

更新 我们处理的数据采用以下格式,我们处理以下行,以进入db。

x.y.1.a.2.c.3.b = 12 // ID 1 of table A onetomany table C 3 ID sequence and its proprty b =12 
x.y.1.a.2.c.3.f = 143 // ID 1 of table A onetomany table C 3 ID sequence and its proprty f =143 
x.y.2.a.1.c.1.d = 12

更新 我们有大约15个表来获取这些数据。数据以块为单位,每个块具有相关数据,并且一次处理相关数据。因此,当您插入一个块时,您正在查看以下数字

Table 1 | Table 2 | Table 3
---------------------------
5 rows  | 8 rows  | 12 rows    

等,

2 个答案:

答案 0 :(得分:3)

看看Oracle's SQL*Loader tool。它是一种用于将数据批量加载到Oracle数据库的工具。您可以编写一个控制文件来描述数据,数据的一些基本转换,跳过行,转换类型等。我之前使用它来进行类似的过程并且它工作得很好。我唯一需要维护的是驱动程序脚本和控制文件。我意识到您要求提供Java解决方案,但这也可能满足您的需求。

答案 1 :(得分:1)

理想情况下,这听起来像是SQL Loader而非Java的工作。

如果您决定在java中执行此任务,请考虑使用executebatch。一个例子是here