我正在遍历一百万个XMLS队列,我解析每个xml并将其值插入5个arraylist中。每个arraylist将数据加载到Oracle中的表中。 解析1000个XML之后,我将数据加载到DB中,而每个表的数据量约为500k-1M条记录。 问题 每次加载后,插入时间都会延长,并且在3-4次加载后,程序会大幅度移动。 问题 1.如果谈论性能,哪个更好:打开多个数据库连接并插入少量数据或打开少量连接并包含大量数据? 2.请帮助减少插入时间。
我的数据库加载代码之一的示例
//Party
sql="INSERT INTO CRMAS_ODS_RAW_DATA.PARTY_TMP(BATCH_ID, SOURCE_SYSTEM, UPDATE_DATE, PARTY_KEY, TCCID, LEI_ID, NATIONAL_ID, OFF_SET) VALUES(?,?,?,?,?,?,?,?)";
ps = con.prepareStatement(sql);
timestamp = new Timestamp(System.currentTimeMillis());
count = 0;
con.setAutoCommit(false);
for(Party par : al4)
{
// get batchid
ps.setInt(1,par.getA1());
// get SOURCE_SYSTEM
ps.setString(2,par.getA2());
// get UPDATE_DATE
ps.setTimestamp(3,timestamp);
// get party_key
ps.setString(4,par.getParty_key());
// get TCCID
ps.setInt(5,par.getA4());
// LEI_ID
ps.setString(6,par.getLEI());
// NATIONAL_ID
ps.setString(7,par.getNationalId());
// OFF_SET
ps.setLong(8,par.getOffset());
ps.addBatch();
if(++count % Batch_party == 0) {
ps.executeBatch();
timestamp = new Timestamp(System.currentTimeMillis());
}
}
con.setAutoCommit(false);
ps.executeBatch(); // insert remaining records
con.commit();