Представьте, что у вас есть большой объем данных в базе данных ок.~ 100Mb.Нам нужно как-то обработать все данные (обновить или экспортировать в другое место).Как реализовать эту задачу с хорошей производительностью?Как настроить распространение транзакции?
Пример 1 # (с плохой производительностью):
@Singleton
public ServiceBean {
procesAllData(){
List<Entity> entityList = dao.findAll();
for(...){
process(entity);
}
}
private void process(Entity ent){
//data processing
//saves data back (UPDATE operation) or exports to somewhere else (just READs from DB)
}
}
Что можно улучшить здесь?
По моему мнению:
- Я бы установил размер пакета hibernate (см. Документацию по hibernate для обработки пакетов).
- Я бы разделил ServiceBean на два компонента Spring с разныминастройки транзакций.Метод processAllData () должен завершиться из-за транзакции, потому что он работает с большими объемами данных и потенциальный откат не будет «быстрым» (я полагаю).Процесс метода (сущность сущности) будет выполняться в транзакции - нет ничего сложного в откате в случае одной сущности данных.
Согласны ли вы?Любые советы?