Разница в наборе 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, я бы не беспокоился о памяти.

Другие вопросы по тегам