Моя цель - сбросить все данные базы данных в файл XML. База данных не очень большая, около 300 МБ. Проблема в том, что у меня ограничение памяти 256 МБ (только в JVM). Очевидно, я не могу просто прочитать все в память.
Мне удалось решить эту проблему с помощью iBatis (да, я имею в виду iBatis, а не myBatis), вызвав его getList(... int skip, int max)
несколько раз с увеличенным значением skip
. Это решает мою проблему с памятью, но скорость меня не впечатляет. Имена переменных говорят о том, что метод скрытно выполняет весь набор результатов, пропуская затем указанную запись. Это звучит довольно избыточно для меня (я не говорю, что это то, что делает метод, я просто предполагаю основание на имени переменной).
Теперь я переключился на myBatis 3 для следующей версии моего приложения. Мой вопрос: есть ли лучший способ обрабатывать большие объемы данных в чанках в myBatis? Есть ли способ заставить myBatis обрабатывать первые N записей, возвращать их вызывающей стороне, оставляя соединение с результирующим набором открытым, чтобы в следующий раз, когда пользователь вызовет getList (...), он начнет читать из записи N + 1, не выполняя никаких действий? "пропуск"?