Mi objetivo es en realidad volcar todos los datos de una base de datos en un archivo XML. La base de datos no es demasiado grande, es de unos 300 MB. El problema es que tengo una limitación de memoria de 256 MB (solo en JVM). Entonces, obviamente, no puedo leer todo en la memoria.Manejo de gran cantidad de datos en MyBatis
me las arreglé para resolver este problema utilizando iBatis (sí quiero decir iBatis, no mybatis) llamando es getList(... int skip, int max)
varias veces, con skip
incrementado. Eso soluciona mi problema de memoria, pero no estoy impresionado con la velocidad. Los nombres de variables sugieren que lo que el método hace bajo el capó es leer todo el salto del conjunto de resultados y luego el registro especificado. Esto me suena bastante redundante (no estoy diciendo que eso sea lo que está haciendo el método, solo estoy adivinando la base del nombre de la variable).
Ahora, cambié a myBatis 3 para la próxima versión de mi aplicación. Mi pregunta es: ¿hay alguna forma mejor de manejar una gran cantidad de fragmentos de datos por partes en myBatis? ¿Hay alguna forma de hacer que myBatis procese los primeros N registros, devolverlos a la persona que llama mientras se mantiene abierta la conexión del conjunto de resultados para que la próxima vez que el usuario llame al getList (...) comience a leer desde el registro N + 1 sin hacer ningún "salto a la comba"?
Su respuesta carece de un detalle importante: necesita agregar @Options (fetchSize = Integer.MIN_VALUE) (o el equivalente XML) a su extracto. Y no funcionaba en MyBatis 3.0.5 (Lo comprobé con Eclipse Memory Analyzer). Actualicé a MyBatis 3.1.1 y ahora la transmisión funciona correctamente. –