inserción de registros en base de datos
bueno el motivo No es como hacer la inserción de u registro en una base de datos (Mysql) si no saber cual de los dos mecanismos de los que dispongo es mejor, tengo que subir alrededor de 1500 registros en un tiempo aproximado de 30 minutos (los registros se generan durante todo este tiempo.
Tengo varias opciones en las que he estado trabajando
1.- conforme se genera el registro, abrir la conexión subir el registro y cerrar la conexion
2.- meter todos los registros en una pila y subirlos terminando el tiempo cada 30 minutos aproximadamente
3.- subir los registros cada X cantidad de registros, o cada determinado tiempo...
alguna otra opción se tomara en cuenta....
Gracias
- Inicie sesión o regístrese para enviar comentarios
necesidad
Todo depende de cómo necesites guardar los datos. No te vayas por la parte de optimizar el proceso, eso viene después y debe obedecer a la necesidad de los datos.
Qué pasa si los vas guardando para guardarlos cada 30 minutos y la aplicación se muere, o se va la luz o algo? Si son datos muy importantes, guárdalos de inmediato.
Si te preocupa el uso de recursos por estar abriendo una conexión y cerrándola a cada rato por estar insertando un registro, utiliza un pool de conexiones para que no se cierren realmente sino que nada más usas una y la devuelves. De ese modo lo más sencillo será que guardes el registro cuando se genera, sin tener que esperar a que se junten ni poner un timer ni nada.
has pensado en generar un txt????
Q tal amigo tuve un problema similar, tenia q cargar aproximadamente una tabla de 42 columnas con un total de 150,000 registros, de la manera q consumiera el menor tiempo, los registros se encontraban en un archivo generado por un access en formato txt.
Hice pruebas y lo q m funciono mejor y mas rapido mi problema fue algo asi:
Para hacer esto ya contaba con la estructura de la base de datos.
El primer query lo que hace es eliminar los datos que ya se encuentran en la tabla, si no se ejecutara ese query solo t agregaria registros a los ya existentes.
entonces yo sugiero q cuando vayas generando los registros los vayas agregando a un archivo de texto
Espero haber sido de ayuda.
Saludos!!!
distinto
Es un caso muy distinto, esto es un batch, es decir ya tienes los datos que quieres insertar y lo vas a hacer una sola vez. No hay mucho que pensar, simplemente es abrir conexión, insertar todos los registros y cerrar. Si acaso hacer todos los inserts en una transacción, si hay alguna restricción de que se deban insertar todos o ninguno.
El post original me suena como que hay una aplicación corriendo constantemente y recabando datos, que durante un periodo de 30 minutos son aproximadamente 1500 registros pero no precisamente a intervalos regulares. Ahí lo mejor es insertar los registros conforme se obtienen los datos, y usar un pool de conexiones para no cerrar físicamente la conexión a la base de datos.
cierto!!!!
si tienes un pool de conexiones es mejor como dice eza guardarlos de inmediato a como vayan llegando, puedes perder informacion valiosa, pero creo q deberias describir un poko mas tu aplicacion y poner ejemplo con codigo, ya que tal vez con palabras aveces nos confundimos.
Gracias
bueno el codigo es un poco extenso como para ponerlo en un post, ya que la aplicación esta la estoy trabajando en java web start y si por las policas de la misma implementación cambia la forma en la que se carga el driver imagino que si hago un pool de conexiones tendre que hacer los mismo
lo que si es cierto es que es que ya habia genrado un txt con los registros y luego hacia la conexion a la base de datos y subia todos los registros esa solución ya la "utilice" pero como bien dice eza tenia exactamente los problemas que comenta de la luz, la muerte de la aplicación o una caida de la conexión tambien...
Tambien lo que se me comento publicar en el anterior post es que lo mas importante es poder subir los datos de una sesión completa.. que queire decir eso que tengo que buscar la forma de poder asegurarme que esos 1500 registros que se generan seran cargados en la base de datos ...
se agradece la opcion del pool lo habia visto con anterioridad, no imagine que pudiera o tendria que llegar a usarla para poder resolver mi problema :S
por ultimo hay alguna diferencia en hacer un pool de conexiones en java web start?????? lo comento proque para poder hacer la aplicación conectara a la base de datos tuve que agregar el codigo fuente del conector de Mysql a la aplicación (hizo que creciera unas 4 o 5 vces de peso)
cambia por completo
Sabiendo lo de java web start creo que cambia por completo el panorama de tu problema. No sé si tu aplicación está hecha para ejecutarse en una intranet, en cuyo caso está bien que la app se conecte directamente al servidor de MySQL y además no veo problema de que uses un pool de conexiones (finalmente será una aplicación tipo cliente-servidor en una red interna). Pero si hay posibilidad de que alguien ejecute la aplicación de manera remota entonces debes poner una capa intermedia entre tu app y el servidor MySQL; ya sea un web service o interfaz REST o algo para que no expongas el servidor a internet. Y en esa capa puedes recibir un archivo de texto con varios registros (o datos de un solo registro) y meterlos a la base de datos.
no la aplicación en un
no la aplicación en un principio si fue construida y hecha para ejecutarse en una intranet no hubo grandes complicaciones, ahora el detalle es que se quiere llevar ya sobre internet y pues si tenia varias dudas para el servidor de la base de datos y la cantidad maxima de conexiones que pudiera soportar MySQL de forma estable lo de la interfaz rest o un web service es algo que aun debo de revisar pero obviamente sera alguno de los dos para poder porteger a la base de datos.. gracias :D