0

Java を使用して大きなテキスト ファイルを読み込んでいます。ファイルには 5.000.000 行があり、各行には 3 つの列があります。ファイルサイズは350MBです。

行ごとに読み取り、Maven で Criteria を使用してオブジェクトを作成し、session.saveOrUpdate(object) コマンドを使用して Postgresql データベースに保存します。

データベースには、シリアル ID とファイルの 3 つの列を格納する 3 つの属性を持つテーブルがあります。

最初は、プロセスは「高速」に実行されますが (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);
}
4

1 に答える 1

2

これを一括プロセスとして実行することに集中する必要があり、行ベースの処理がここでの問題です。PostgreSQL にはCOPY、カンマ区切りファイルとタブ区切りファイルを処理できる、という名前の一括ファイル読み込み用の組み込みコマンドがあります。もちろん、区切り文字、引用文字、およびその他の多くの設定はカスタマイズ可能です。

DBの作成とコマンドの詳細については、PostgreSQL の公式ドキュメントを確認してくださいCOPY

この回答では、同様のことを行う方法の小さな例を提供しました。

于 2013-05-31T20:08:13.717 に答える