Tengo la tarea de convertir una tabla enorme en un archivo XML personalizado. Usaré Java para este trabajo.Cómo evitar el error OOM (Memoria insuficiente) al recuperar todos los registros de la tabla grande?
Si simplemente emite un "SELECT * FROM customer", puede devolver una gran cantidad de datos que eventualmente causan OOM. Me pregunto, ¿hay alguna manera de procesar el registro inmediatamente una vez que esté disponible, y eliminar el registro de la memoria después de eso durante el proceso de recuperación de sql?
--- editado el 13 jul 2009
Permítanme desarrollar mi pregunta. Tengo 1 servidor de db y 1 servidor de aplicaciones. Cuando publico una consulta de selección en la aplicación, los datos se trasladan del servidor de db al servidor de aplicaciones.
Creo (corríjanme si estoy equivocado) ResultSet tendrá que esperar hasta recibir todos los registros en la consulta. Incluso si establecemos el tamaño de búsqueda como 4, para una tabla de 1000 registros, seguimos teniendo 1000 registros en la memoria del servidor de aplicaciones, ¿es correcto? El tamaño de búsqueda solo afecta el número de ida y vuelta desde/hasta el servidor de db.
Mi pregunta es, ¿cómo empezar a procesar en esos 4 (o cualquier número) registros inmediatamente después de su llegada al servidor de la aplicación, y deshacerse de él para liberar memoria en el servidor de la aplicación?
Qué servidor SQL son estás usando (es decir, MS, Oracle, MySql, etc.)? Existen diferentes formas de manejar este problema dependiendo de lo que esté usando. –
Muestra el código que usas para recuperar los registros. No está claro si solo iterar sobre ellos, o almacenarlos localmente en alguna colección y luego iterar sobre eso. –
Voy a usar Oracle para esta tarea. Todavía no he comenzado ningún código, porque todavía estoy investigando la mejor manera de hacerlo :) – janetsmith