Estoy trabajando con una base de datos bastante grande de mysql (varios millones de filas) con una columna que almacena imágenes de blobs. La aplicación intenta tomar un subconjunto de las imágenes y ejecuta algunos algoritmos de procesamiento sobre ellas. El problema al que me estoy enfrentando es que, debido al gran conjunto de datos que tengo, el conjunto de datos que devuelve mi consulta es demasiado grande para almacenarlo en la memoria.Tratando con enormes resultados de SQL
Por el momento, he cambiado la consulta para no devolver las imágenes. Al iterar sobre el conjunto de resultados, ejecuto otra selección que toma la imagen individual que se relaciona con el registro actual. Esto funciona, pero las decenas de miles de consultas adicionales han resultado en una disminución del rendimiento que es inaceptable.
Mi próxima idea es limitar la consulta original a 10.000 resultados más o menos, y luego seguir consultando por tramos de 10.000 filas. Esto parece el compromiso a medio camino entre los dos enfoques. Siento que probablemente haya una mejor solución de la que no tengo conocimiento. ¿Hay alguna otra manera de tener porciones de un conjunto de resultados gigantesco en la memoria a la vez?
Saludos,
de Dave McClelland
Quizás mis problemas de memoria no sean causados por la consulta. Volví a una versión anterior (gracias, control de versión), y el lector de datos parece estar cargando solo la fila que está leyendo actualmente, como menciona Anthony. Aún así, me pregunto si no tiene más sentido mantener las imágenes en el sistema de archivos local en lugar de transferirlas a través de la red desde el servidor de bases de datos (como lo menciona ProphetBeal a continuación). El inconveniente es que se almacenará en ambas ubicaciones (deben permanecer en la base de datos para el uso de otros sistemas), pero el espacio de almacenamiento del sistema de archivos no es una preocupación inmediata. ¿Alguna idea sobre esto? –
Le doy la respuesta a Anthony porque señaló que el DataReader no es la razón por la que mi memoria se estaba llenando (era algo relacionado, pero ligeramente diferente). Probablemente voy a usar la solución de ProphetBeal de mantener los BLOB en la máquina local para eliminar la congestión de la red, pero para cualquier persona que maneje un conjunto de datos grande para almacenar en la máquina local, un DataReader debería ser una solución efectiva. –