从包含数据的平面文件逐行,我的任务是验证来自DB的数据不存在我试图验证首先使用Java我已将平面文件数据插入HashSet1和另一个Hashset2 For DB数据之后我正在尝试检查Hashset1.Contain(Hashset2),以便我可以识别数据库中不存在哪些数据。
下面给出了Dummy Code,你可以将hashset1(这是一些缺失的数据)作为文件读取器数据和hashset2(来自db的完整数据)作为DB数据
但正如我在此提到的,我需要验证3000万个数据,我能够通过这种方式验证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();
}
}
错误堆栈跟踪:
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 :(得分:0)
对于组合两组数据,只需将两者中较小的一组加载到一个哈希集(1.)中,然后,作为下一步,检测组的差异(2.),然后根据找到的差异(3.)修改数据。让我们在下面的伪代码中简单地调用小集smallHashSet
:
将较小的数据集加载到smallHashSet
逐个迭代(循环)更大的数据集中的条目 - 不要一次加载所有数据,只需一个接一个地加载并一次处理一个:
2.1。让我们说bigSetEntry
是从更大的集合中进入的一个条目,然后是
if (smallHashSet.contains(bigSetEntry)) smallHashSet.remove(bigSetEntry)
。
完成后,smallHashSet
仅包含小集合中的条目,但在大集合中缺失。你永远不需要一次装入大套装。您现在可以使用这些不同的条目执行某些操作,例如将它们添加到大数据文件中。