0

我需要得到两组整数(记录ID)之间的差异。第一组存储在文本文件中,第二组存储在 mysql 数据库中。我有两个选择:

1- 从数据库中读取所有 id,将它们加载到 java 对象,从文本文件中加载所有 id 并使用

Sets.difference(dbset, fileset);

2- 仅读取文本文件 id 并使用 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 将该查询翻译为“不在(1,2,3,...)中)或否则,我可以轻松达到 jvm 内存限制。

4

1 回答 1

1

选项 #2 将无法正常工作,因为它只会让您不存在于文件 ID 中。如果有一些 ID 不在 DB 中但在文件中,则不会有区别。只有选项#1 可以正常工作,而且对我来说看起来不错。唯一的问题- 记忆。但是创建一些可以完成这项工作并节省内存的算法并不容易。如果您的 ID 编号高达 100000,我不会担心内存。

于 2013-11-29T08:12:53.440 回答