Inserts en mysql

Imagen de MarVin_EC

Forums: 

Estoy programando un sistema, con PHP 5.1.6, y MYSQL 5.0.77, y tengo el siguiente problema.

A diario debo subir un archivo .txt a my BD, pero, en estos dos días ese archivo ha ido incrementandose de 19000 filas a 35000 y hoy ha llegado a 40000 filas. Mi sistema lee el archivo línea por línea, hago un $lineas=file($nombre_archivo), y ese array lo leo con un foreach, dentro hago un explode(',',$linea) y genera el Insert con los datos. Todo estaba muy bien, hasta cuando ese archivo tenía 20000 líneas. Ahora que el archivo tiene 40000 líneas, la página se cuelga, y despues de 3 minutos aproximadamente, me sale este error: Insert command can't finished because there is a duplicated entry on id register. Eso lo entendiera si en el archivo tuviera duplicidad de índices!!!, pero ese no es el caso, todas las líneas tienen datos diferentes.

Necesito una ayuda, porque no se que pueda pasar???, es como que el bucle se volviera a ejecutar!!!

Será un problema de MySql, porque le falta alguna configuración para que acepte más de 20000 Inserts en una sola ejecución???? o debo leer el archivo .txt e ir ejecutando los Inserts de otra forma???

Agradecería cualquier sugerencia!!!

Gracias Bro

Imagen de MarVin_EC

Gracias por responder.

Te comento que hago uno a uno.

Leo la línea, genero el insert y lo ejecuto, eso se repite con todas las 40000 líneas.

Voy a intentar lo que sugieres y luego comento.

"El open source, no decae con la crítica, al contrario, se fortalece"

Las Futuras Generaciones Agradeceran o Repudiaran Nuestras Presentes Actitudes

Timeout del script?

Imagen de alfamikedelta

Hola!

Supongo que estás utilizando un script de PHP que lee el archivo (¿hacés un "upload" del archivo o trabajás directamente sobre el servidor?) y luego procesa la información.

Hace un tiempo me ocurrió algo similar en mi trabajo y resultó ser que el script de PHP estaba tirando un timeout (se superaba el tiempo de ejecución máximo de PHP), como yo no tenía control sobre la configuración del servidor era imposible modificar el tiempo máximo de ejecución de PHP (y además no es seguro hacerlo ya que podría afectar a otros scripts), por lo que me tocó dividir los archivos de forma tal que pudieran ejecutarse en un tiempo prudente.

Otra cosa que podrías hacer es utilizar un lenguaje intermediario (Java, Visual Basic, C++, etc) para leer el archivo localmente, procesarlo y enviar las peticiones a tu servidor MySQL directamente.

Una tercera opción sería generar un archivo de texto con todos los INSERT y utilizar un "frontend" (MySQL Admin o similar) que lea el archivo y se conecte a la base de datos para ejecutar los querys.

Suerte con eso!

AMD

LOAD DATA INFILE

Imagen de MarVin_EC

Gracias DeathUser por tu sugerencia, luego de investigar un poco sobre ese comando y reprogramar mi aplicativo con la infomación hallada, tuve muy buenos resultados, ahora que el archivo ya está por las 70000 filas, ya no se me cuelga el server ni me da error alguno con LOAD DATA INFILE. Pero algo que no leí, es si se tiene un tamaño de archivo máximo que pueda ejecutarse (por ahora mis archivos .txt no sobrepasan los 5 MB), ¿¿tu sabes ese dato??

Las Futuras Generaciones Agradeceran o Repudiaran Nuestras Presentes Actitudes

la verdad no he visto la

Imagen de deathUser

la verdad no he visto la documentación al respecto, pero lo he usado con archivos grandes de mas ed 100 MB sin problemas, lo único es que si lo haces via WEB y demora mucho el script se puede detener, debes monitorear eso.

bye
;)

Comprendo

Imagen de MarVin_EC

Algo de eso si lo leí, por eso es que más bien primero subo el archivo al server y luego ejecuto el comando LOAD DATA IN FILE.

Pero como esta comprobado que hasta 100 MB soporta, creo que no habrá problemas.

Gracias Bro.

Las Futuras Generaciones Agradeceran o Repudiaran Nuestras Presentes Actitudes