Мне нужно, чтобы мое веб-приложение работало с действительно огромными наборами данных. На данный момент я получаю либо OutOfMemoryException, либо вывод, который генерируется 1-2 минуты.
Пусть это просто и предположим, что у нас есть две таблицы в БД: Worker
и WorkLog
с примерно 1000 строк в первом и 10 000 000 строк во втором. В последнем столе есть несколько полей, включая поля "workerId" и "hoursWorked". Нам нужно:
-
подсчитывает общее количество часов, затрачиваемых каждым пользователем;
-
список рабочих периодов для каждого пользователя.
Самый простой подход (IMO) для каждой задачи в обычном SQL:
1)
select Worker.name, sum(hoursWorked) from Worker, WorkLog
where Worker.id = WorkLog.workerId
group by Worker.name;
//results of this query should be transformed to Multimap<Worker, Long>
2)
select Worker.name, WorkLog.start, WorkLog.hoursWorked from Worker, WorkLog
where Worker.id = WorkLog.workerId;
//results of this query should be transformed to Multimap<Worker, Period>
//if it was JDBC then it would be vitally
//to set resultSet.setFetchSize (someSmallNumber), ~100
Итак, у меня есть два вопроса:
- как реализовать каждый из моих подходов с JPA (или, по крайней мере, с Hibernate);
- Как бы вы справились с этой проблемой (с JPA или Hibernate, конечно)?