我需要获取两组整数(记录 ID)之间的差异。第一组存储在文本文件中,第二组存储在mysql数据库中。 我有两个选择:
1-从数据库读取所有id,将它们加载到java对象,从文本文件加载所有id并使用
Sets.difference(dbset, fileset);
2- 只读取文本文件 ids 并使用 Hql 查询来获取差异:
public List getDiff(Set<Integer> ids){
Query query;
query = getSession().createQuery("from myset s where s.id not in (:ids)");
query.setParameterList("ids", ids);
return query.list();
}
我发布这个问题是因为这些集合可能很大,而且我不知道 Hibernate/Mysql 查询是否有任何限制(Hibernate 将该查询翻译为“not in (1,2,3,... )) 否则,我可以轻松达到 jvm 内存限制。
最佳答案
选项 #2 将无法正常工作,因为它只提供不存在于文件 ID 中的信息。如果某些 ID 不在数据库中但在文件中,则您不会得到它的区别。 只有选项 #1 可以正确工作,而且对我来说看起来不错。唯一的问题是——内存力。但创建某种算法来完成这项工作并节省内存并不容易。如果你的ID号达到100000我就不用担心内存问题。
关于Java设置差异,我可以使用java对象还是数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20280721/