gpt4 book ai didi

java - 如何提高大型文本文件的数据加载性能

转载 作者:太空宇宙 更新时间:2023-11-04 11:00:19 26 4
gpt4 key购买 nike

我正在尝试将一个大文本文件插入到 oracle 数据库中,我当前的程序可以运行,但加载速度非常慢。文本文件约为 400 MB

我所做的如下......

...
ArrayList<String> nta = new ArrayList<String>();
while ((line = br.readLine()) != null) {
//add data position for each line read
data.add(line.substring(0, 6)+
"="+line.substring(6, 24)+
"="+line.substring(24, 30)+
"="+line.substring(30, 48));

}
db.insertRecord(data);
...

public void insertRecord(ArrayList<String> data) {
String sql = "Insert into Account (NAME, ID, RCBS, CA_NUM, GUID, PARN_GUID)"+
" values "
"(?,?,?,?,?,?)";
...
ps = con.prepareStatements(sql);
for(int i=0; i<data.size(); i++) {
String[] fields = data.get(i).split("=");
ps.setString(1, fields[0]);
ps.setString(2, fields[1]);
ps.setString(3, fields[2]);
ps.setString(4, fields[3]);
ps.setString(5, fields[0].trim()+"."+fields[1].trim()+"."+fields[2].trim()+"."+fields[3].trim()); //Index
ps.setString(6, fields[0].trim()+"."+fields[1].trim()); //PARN Index
ps.execute();
} //end loop
con.commit();
...

是否可以采取任何措施来提高数据加载速度?

最佳答案

正如建议的,在处理这么多记录时应该使用批量插入。请注意,这段代码将每 1000 次执行插入一次(不是一次全部执行),以避免可能的内存问题,batchInterval

int batchInterval = 1000;

ps = con.prepareStatements(sql);
for(int i=0; i<data.size(); i++) {
String[] fields = data.get(i).split("=");
ps.setString(1, fields[0]);
ps.setString(2, fields[1]);
ps.setString(3, fields[2]);
ps.setString(4, fields[3]);
ps.setString(5, fields[0].trim()+"."+fields[1].trim()+"."+fields[2].trim()+"."+fields[3].trim()); //Index
ps.setString(6, fields[0].trim()+"."+fields[1].trim()); //PARN Index
ps.addBatch();

if (i % batchInterval == 0) ps.executeBatch();
}

ps.executeBatch();
ps.close();
con.close();

您可以在这里找到更多信息:batch inserts tutorial

关于java - 如何提高大型文本文件的数据加载性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46977115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com