我正在使用Java讀取大型文本文件。該文件有5.000.000行,每個有3列。文件大小爲350 MB。使用Criteria多次插入Postgresql的速度非常慢
對於每一行,我讀了它,我使用Maven上的Criteria創建了一個對象,然後使用session.saveOrUpdate(object)命令將它存儲到Postgresql數據庫中。
在數據庫中,我有一個包含序列標識和三個屬性的表,其中存儲了文件的三列。
開始時,進程運行「快速」(30分鐘內爲35.000個寄存器),但每次都比較慢,結束時間按指數規律增長。我如何改進過程?
我試圖將大文件拆分成幾個較小的文件,但它幾乎變慢。
非常感謝提前!
PD:代碼
public void process(){
File archivo = null;
FileReader fr = null;
BufferedReader br = null;
String linea;
String [] columna;
try{
archivo = new File ("/home/josealopez/Escritorio/file.txt");
fr = new FileReader (archivo);
br = new BufferedReader(fr);
while((linea=br.readLine())!=null){
columna = linea.split(";");
saveIntoBBDD(columna[0],columna[1],columna[2]);
}
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
if(null != fr){
fr.close();
}
}
catch (Exception e2){
e2.printStackTrace();
}
}
}
@CommitAfter
public void saveIntoBBDD(String lon, String lat, String met){
Object b = new Object();
b.setLon(Double.parseDouble(lon));
b.setLat(Double.parseDouble(lat));
b.setMeters(Double.parseDouble(met));
session.saveOrUpdate(b);
}
請顯示一些代碼! –
@DonRoby我剛剛編輯帖子以添加代碼。非常感謝 –
'對於每一行,我讀了它,我使用Maven上的Criteria創建了一個對象,並將它存儲到Postgresql中......'您正在執行*一次一行*處理。每行將花費您對數據庫的一個請求/響應。對於5M行,這將花費你*約10M *幾毫秒的延遲。 – joop