【发布时间】:2013-12-15 08:28:05
【问题描述】:
我需要获取两组整数(记录 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 内存限制。
【问题讨论】:
-
你为什么不试试呢?您可以轻松地创建一个至少与您在循环中以编程方式期望的最大集合一样大的集合,并针对数据库测试查询。然后只需观察内存使用情况、运行时间、由于超出限制而引发的异常,...
-
很难尝试假设该应用程序的所有用户的内存设置。我更喜欢尽力而为的方法。
-
@Toba 但是无论是隐含还是明确,您都必须为应用程序运行的环境指定最小值。或者您的意思是您要编写自适应代码,在内存很少的环境中划分问题?这意味着您将需要更多测试,以便设置在不同方法之间切换的参数。
-
是的,但我希望 mysql 或 hibernate 能比我做更好的内存管理。但是,我肯定会在最低要求的环境下进行一些测试。
标签: java mysql hibernate set set-difference