Разница в наборе Java, могу ли я использовать объект Java или базу данных?
Мне нужно получить разницу между двумя наборами целых чисел (идентификаторы записей). Первый набор хранится в текстовом файле, второй набор хранится в базе данных mysql. У меня есть два варианта:
1- прочитать все идентификаторы из базы данных, загрузить их в объекты Java, загрузить все идентификаторы из текстового файла и использовать
Sets.difference(dbset, fileset);
2- Читайте только идентификаторы текстовых файлов и используйте 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.
1 ответ
Опция № 2 не будет работать правильно, так как она дает вам только не присутствует в идентификаторах файлов. В случае, когда есть некоторый идентификатор, который не находится в БД, но находится в файле, вы не получите его в разнице. Только вариант № 1 будет работать правильно, и мне это нравится. Единственная проблема - память. Но будет не очень легко создать какой-нибудь алгоритм, который будет выполнять эту работу и экономить память. Если у вас номер идентификатора до 100000, я бы не беспокоился о памяти.