Título: CSV-PHP-MySQL Publicado por: caishi en 12 Junio 2016, 23:33 pm Hola.
cuento rápidamente, tengo que cargar un fichero CSV a mi base de datos (mysql), comparar existencia, y aplicar update si corresponde. bien, esa es la parte facil Problema: 1)mas de 5000 registros termina saturando el servidor y puff... inserta los registros hasta que cae. 2)tengo que traer el archivo en utf-8, el programa que exporta el archivo me lo da en ascci Solucion tratada: 1) dividir el archivo en 5000 registros cad uno 2) guardar con notepad en utf-8 Requiero: 1)poder cargar los 10000 o 100000 registros de un unico archivo sin dividirlo. 2)convertir archivo cuando se hace el upload a utf-8 Me gustaría: 1)mostrar barra de progreso de upload+proceso del csv a la db (se que se requiere ajax) Bien, he intentado de todo pero se ve que mis conocimientos no son suficientes. dejo fragmento de mi código, el cual no tiene mucha ciencia, pero mas o menos para que se entienda.. Si alguno conoce algún ejemplo por ahi que pueda adaptar a mi codigo, les estaria muy agradecido. Código: <form enctype="multipart/form-data" action="<?php $_SERVER['PHP_SELF'] ?>"method="post"> Título: Re: CSV-PHP-MySQL Publicado por: OzX en 13 Junio 2016, 01:02 am Hola!
Lo que yo haria, seria pre procesar el CSV, dejando un archivo solo con los archivos que voy a insertar. No es necesario que lo hagas con PHP, puede ser en python o en otro lenguaje. Luego utilizaría PREPARE (MYSQL) para optimizar los insert, delete, update. No son tantos registros en realidad, puede ser que tengas que aumentar el buffer en PHP, porque insisto no son tantos registros. Saludos! Título: Re: CSV-PHP-MySQL Publicado por: caishi en 13 Junio 2016, 02:02 am bueno, cmo los administradores dejaron el tema acá, sigo acá- disculpas por no ponerlo en php-
respondiendo a OzX, primer gracias y luego debo decir que el hosting (hostinger) es compartido y no admite otro lenguaje, solo los comunes, php, js, html, etc. lo de PREPARE nunca lo use, voy a investigar. supongo que lo que teng que hacer es "preparar" todo, para luego ejecutarlo fuera del while (($data = fgetcsv($...??? Título: Re: CSV-PHP-MySQL Publicado por: OzX en 13 Junio 2016, 04:43 am bueno, cmo los administradores dejaron el tema acá, sigo acá- disculpas por no ponerlo en php- respondiendo a OzX, primer gracias y luego debo decir que el hosting (hostinger) es compartido y no admite otro lenguaje, solo los comunes, php, js, html, etc. lo de PREPARE nunca lo use, voy a investigar. supongo que lo que teng que hacer es "preparar" todo, para luego ejecutarlo fuera del while (($data = fgetcsv($...??? Con lo de PREPARE hago relacion a esto http://www.w3schools.com/php/php_mysql_prepared_statements.asp Intenta probar tu solucion en tu localhost, si te funciona bien recien pasalo al hosting. ¿Que error te muestra cuando dices que se te cae? Título: Re: CSV-PHP-MySQL Publicado por: caishi en 13 Junio 2016, 04:50 am Hola. Cuando son muchos registros, más de 5000, da error 500 infernal server error. Es totalmente variable cuando cae, pero es entre los 5000 y 10000 registros.
No se si así es como funciona php y MySQL, o si con mysqli se arregla o con el prepare o si me estoy olvidando de algo :( Título: Re: CSV-PHP-MySQL Publicado por: OzX en 13 Junio 2016, 05:15 am Hola. Cuando son muchos registros, más de 5000, da error 500 infernal server error. Es totalmente variable cuando cae, pero es entre los 5000 y 10000 registros. No se si así es como funciona php y MySQL, o si con mysqli se arregla o con el prepare o si me estoy olvidando de algo :( Primero que todo, testea tu script de forma local y luego en el servidor. En el inicio de tu script php, agrega esto. Código: ini_set('display_errors', 1); Cuando nuevamente te tire error, ve si sale algo, si no ve el error.log de apache y revisa que error es, ya que con eso puedes seguir avanzando hacia la solución. Saludos. Título: Re: CSV-PHP-MySQL Publicado por: caishi en 13 Junio 2016, 14:44 pm Gracias. hoy por la tarde estaré probando esto. (soy de Argentina).
Abrazo! Título: Re: CSV-PHP-MySQL Publicado por: daniela Vega en 13 Junio 2016, 20:53 pm para lo de la saturacion del servidor, Casi segura que el problema está o en los índices o en la query. Puedes utilizar varias herramientas para monitorizar esto, over la opción EXPLAIN de tu query.
Un millón de registros es poco, no debería causarte problemas Título: Re: CSV-PHP-MySQL Publicado por: caishi en 14 Junio 2016, 04:59 am bueno, me estoy rindiendo jaja
primero pase todo a mysqli...valía para actualizarse.. intenté: 1) sin modificaciones (mas que pasar a mysali), mejoró la cantidad de registros, pero no llega a 20000. 2) usar prepare, guarda la primer linea del csv y luego devuelve "Catchable fatal error: Object of class mysqli could not be converted to string in..." por que la primera si y e resto no.. no se... ni pienso en el millon de registros cuando no llego a los 100.000 :( revise el log, y no ha errores.. cuando tira internal server error :( el php del hosting tiene lo siguiente: max_execution_time 240 max_file_uploads 20 max_input_nesting_level 64 max_input_time 240 max_input_vars 3000 memory_limit 512M en mi pc configure todo esto a mucho mas, e igualmente colapsa en cierto punto la consulta... Pregunto, existirá alguien tan amable que pueda ajustar mi código para que no exista este problema? (si no moriré separando de a 5000 registros cada vez que tengo que actualizar :() Código: <form enctype="multipart/form-data" action="<?php $_SERVER['PHP_SELF'] ?>" method="post"> // Título: Re: CSV-PHP-MySQL Publicado por: caishi en 18 Junio 2016, 17:16 pm bueno, despues de romperme tanto la cabeza, he "comentado"( -// */) todo lo que ha insert, update, y demas... o sea, quedando solo el leer el csv. Adivinen que, esto es lo que tarda una eternidad, incluso en local....
alguna idea? |