2016-08-23 5 views
2

データベースに追加する前に、データをチェックする必要があります。アイテムの3つの列が一意である必要があります。私はHashMapper(HashMap Map)を作成して、データベースに格納されます。どのように10000行のデータをmysqlデータベースに追加する

HashMap<String, Object> eauMap = new HashMap<String, Object>(); 

データベースから選択操作があり、同じオブジェクトをマッピングする3つの異なるキーを作成します。

List<Object> existObjectList = Service.getAll(); 
     HashMap<String, Object> Map = new HashMap<String, Object>(); 
     for (Object existdata : existEauList) { 
      Map.put(existdata.getip1(), existdata); 
      Map.put(existdata.getip2(), existdata); 
      Map.put(existdata.getip3(), existdata); 
     } 

そして私は、ヌルがある.IF Map.get(KEY3)、ループは、関数Map.get(KEY1)によってデータを追加するMap.get(KEY2)をザ各行を確認するために行いますデータをリストに入れて、マップにも入れます。

for loop: 
    Object data = (Object) Map.get(ip1);//ip1 is from the cell value 
    if (data == null) { 
     data=(Object)Map.get(ip2); 
     if(data==null){ 
       data=(Object)Map.get(ip3); 
      if(data==null){ 
       ………………………… 
       Map.put(ip1,newdata); 
       Map.put(ip2,newdata); 
       Map.put(ip3,newdata); 
       } 
      } 
    } 

次に、データベースにリストをコミットします。 データ行が300行しかない場合に機能します。今、私は10000、サーバーの内訳を追加します。効率を上げるにはどうすればいいですか? 要件はどの行が繰り返しであるかを指摘する必要があります。プロジェクトはspringmvc + spring + mybaitsで設定されます

+0

これらのレコードを追加するには、prepared statementとaddBatchを使用しますか?通常、バッチ実行は、個々の挿入よりも優れたパフォーマンスを提供します。どのサーバーから問題が出るのですか? MySQLまたはあなたが実行しているJavaプロセス?サーバーが故障したときにエラーやスタックトレースがありますか?それは記憶から外れますか? –

+0

私はこれらのrescords.Iを追加するためにmybaitsとaddBatchを使用してローカルのTomcatにプロジェクトをデプロイします。しかし、私がデータをインポートするとき、私は50秒間待っています、そして、myeclipseの故障と停止。 – ollamo

答えて

0

rdbmsに何千ものレコードを追加する必要がある場合は、データをインポートするためのrdbms。

MySQLでは、大量のデータをインポートする機能をload data infileと呼びます。

ターゲットテーブルで、一意である必要があるフィールドに一意のインデックスまたは主キーを作成します。

load data infile 'filename' ignore into table yourtable ... 

UPDATE

をあなたが重複したレコードを識別するために必要がある場合は、

  1. 、:それは重複したエントリを検出した場合、インポートが停止しないようにload data infile声明でignore句を指定しますターゲット表と同じ構造の一時表を作成します。
  2. load data infileステートメントを使用して、すべてのデータを一時テーブルにインポートします。
  3. selectinner joinを一時表とターゲット表の間に使用すると、すでにターゲット表に存在するレコードが得られます。
  4. insert ... select ... from temp_table left join target table on ... where target_table.identifier_column is nullコマンドを使用すると、テンポラリ・テーブルからターゲット・テーブルに、タグセット・テーブルに存在しないレコードのみを挿入します。 whereの条件では、3つの列の組み合わせによって一意にレコードが識別される場合は、複数の列を指定する必要があります。
  5. 一時テーブルを削除します。 (または、db接続を閉じてください)
+0

はい、要件はどの行が リピートであるかを指摘する必要があります。このコードを使用してリピートデータを無視すると、どのように要件に到達できますか? – ollamo

+0

次回は、フォローアップのコメントだけでなく、質問の要件を共有しています。私は答えを更新します。 – Shadow

+0

はい、ありがとうございます。しかし、これをspringmvc + spring + mybaitsにどうやって適用できますか? – ollamo

関連する問題