2017-02-10 3 views
1

deptcode | EMPNAME | JOBTYPE | DEPT | DOJ最適化挿入は、バルクファイルアップロード用のJavaのコール

  1. 121 |ジョン・|常設|アカウント| 2012年12月12日

  2. 122 |ポール|常設|収益| 2011年11月12日

  3. 123 |マーク|契約|セールス| 2010年4月5日

  4. 121 |マイク|常設|アカウント| 2009年8月9日

  5. 123 |ナッシュ|契約|セールス| 2016年12月15日

  6. 124 |ドウ|契約|マーケティング| 2013年12月4日

問題の説明:

  1. これは、私がMultiFileuploadを使用してアップロードしようとしているCSVファイルです。

  2. これを読み、リストを作成します。

  3. このリストは、重複する レコードのEMP_TRANS_TABLEに対して検証されます。

  4. DEPT_CODE + JOB_TYPE + DOJが複合主キーになります。

  5. 私はSPRING JPA Predicatestoを使用して重複値を確認し、 の値を挿入します。

  6. これは、データを保存してタイムアウトしてから をフロントエンドに返すために、 を4分より多く取っていることを超える750レコードまでうまく動作しています。

テクノロジ・スタック:

1)Frontend-アンギュラJS

2)春の休憩サービスと春JPA(休止状態)

3)WAS 8.5アプリケーションサーバーとSQL Serverの2008 on Linux

4)Java 1.7

私はDB側から何かを変更することはできませんし、また、Java 1.8にアップグレードすることができないよう質問

  1. は、どのように私はJava側 から私のDBの検証および挿入を最適化することができます。
  2. 私の要件は、DB検証で と挿入が2分以内に起こるはずの5000レコードをサポートすることです。
  3. アプリケーションからの複数のWebページのアップロードに適用する必要があるため、適切なコードを含む最適なソリューションを探してください。

答えて

0

あなたはHibernateのSessionFactoryの特性の一つとして定義することができますプロパティ冬眠あり:

insert into Table(id , name) values (1, 'na1') , (2, 'na2') ,(3, 'na3').. 

代わりの

:あなたのような出力を持っていなければならない設定のこのバッチで

<property name="jdbc.batch_size">500</property> 

insert into Table(id , name) values (1, 'na1'); 
insert into Table(id , name) values (2, 'na2'); 
insert into Table(id , name) values (3, 'na3'); 

トランスすべてのデータが保存されるまで、最高のパフォーマンスを得るためにトランザクションをフラッシュします:

Transaction tx = session.beginTransaction(); 
for (int i=0; i<5000; i++) { 
    EmpTrans empTrans = new EmpTrans(); 

    // populate empTrans attributes 

    session.save(empTrans); 

    if (i % 500 == 0) { //500 , same as the JDBC batch size 
     //flush a batch of inserts and release memory: 
     session.flush(); 
     session.clear(); 
    } 
} 
tx.commit(); 
関連する問題