2017-09-22 7 views
0

データを1行ずつ含むフラットファイルから、DBからデータを検証するタスクが存在しません。最初にJavaを使用して、HashSet1と別のHashset2にフラットファイルデータを挿入しました。その後、DBデータには、Hashset1.Contain(Hashset2)をチェックして、DBに存在しないデータを識別できるようにしています。下記のスレッド "main"内の例外java.lang.OutOfMemoryError:何百万ものデータを検証しようとしているときにJavaのヒープスペース

は、[ファイルリーダーのデータとhashset2として(一部欠落データである)hashset1をとることができるダミーコード(デシベルからの完全なデータ)であるDBデータとして

が、私はここに述べたように、私は30万のデータを持っています検証する必要があるため、私はこの方法で100万のデータを検証することができますが、私の仕事である3000万のデータを検証することはできません。これを親切に提案するための最善の方法はありますか、何らかの種類のコードがあれば、とても感謝しています。

public class App 
{ 

    public static void sampleMethod() { 
     Set<Integer> hashset1 = new HashSet<Integer>(); 
     Set<Integer> hashset2 = new HashSet<Integer>(); 
     for(int i = 0; i<30000000; i++) { 
      if(i %50000 != 0) { 
       hashset1.add(i); 
      } 
     } 
     int count = 0; 
     for(int j =0;j<30000000;j++) { 
      if(hashset1.contains(j)) { 
       count++; 
      } else { 
       System.out.println(j+" Is Not Present"); 
       hashset2.add(j); 
      } 
     } 
     System.out.println("Contain Value Count" + count); 

    } 
    public static void main(String[] args) 
    { 
     sampleMethod(); 
    } 
} 

エラースタックトレース:2つのデータセットを結合するため

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.HashMap.resize(HashMap.java:703) 
    at java.util.HashMap.putVal(HashMap.java:662) 
    at java.util.HashMap.put(HashMap.java:611) 
    at java.util.HashSet.add(HashSet.java:219) 
    at com.java.anz.BankingPro.App.sampleMethod(App.java:20) 
    at com.java.anz.BankingPro.App.main(App.java:38) 
+0

問題の説明は、句読点がないため少しわかりにくいです。また、例外スタックトレースを提供して、他の人がアプリの実行中に実際に何が起きたのかを確認するのに役立ちます。 – Kamil

+0

@Kamil bhai Stack Traceを提案しました。 –

+0

データファイルの内容をテンポラリテーブルにダンプし、SQLクエリーを実行したいことがあります。 – Berger

答えて

0

、それは、次のステップとして、次に、HashSetの(1)に両者の唯一の小さなをロードするのに十分ですセットの差異(2)を検出し、見つかった差異(3)に従ってデータを変更します。のは、単に以下の擬似コードでsmallHashSetを小さなセットを呼ぶことにしましょう:

  1. データの負荷も小さく設定データの大きなセット内のエントリを超えるsmallHashSet

  2. 反復(ループ)、一つ一つに - ありません一度にロードし、次々にロードして一度に1つずつ処理してください:

    2.1。 bigSetEntryが大きいセットからのそのようなエントリであるとしましょう、次に
    if (smallHashSet.contains(bigSetEntry)) smallHashSet.remove(bigSetEntry)としましょう。

  3. 完了すると、smallHashSetには小さなセットに含まれているエントリのみが含まれますが、大きなセットには含まれません。そして、一度に大きなセットをロードする必要はありませんでした。これらの異なるエントリで何かを行うことができます。ビッグデータファイルに追加します。

関連する問題