Foros del Web » Programando para Internet » PHP »

resgistro en php dura mas de 1h

Estas en el tema de resgistro en php dura mas de 1h en el foro de PHP en Foros del Web. buenas amigos venia con una duda es que tengo un sistema donde lleno una base de dates mediante un archivo de texto , son aproximadamente ...
  #1 (permalink)  
Antiguo 11/03/2013, 07:33
 
Fecha de Ingreso: junio-2010
Mensajes: 31
Antigüedad: 13 años, 10 meses
Puntos: 1
resgistro en php dura mas de 1h

buenas amigos venia con una duda es que tengo un sistema donde lleno una base de dates mediante un archivo de texto , son aproximadamente mas de 90.000 datos que tiene el archivo, osea lineas que inserto en la base de dato,,

simplemente hago un recorrido del archivo verifico los datos y voy insertando .. en mi lapto que tiene un procesador intel core 3 y 4 gb de ram,, dura como 1h y media registrar toda esa informacion ... esta bien ??? o quizas halla otra manera de ingresar esos datos de una manera mas rapido... pero tendria que ser mediante php .. gracias ..
__________________
Miguel0N
  #2 (permalink)  
Antiguo 11/03/2013, 07:53
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Respuesta: resgistro en php dura mas de 1h

podrias aumentar la memoria de ejecucion y agilizar la ejecucion del script,

aumentar la memoria ej: ini_set('memory_limit', '2048M');

y aumentar el rendimiento de ejecucion se consigue depurandolo y quitar lo innecesario...
si buscas http://www.google.es/search?q=optimi...zar+script+php
seguro que encuentras algo

pero una hora para 90.000 datos a la db no esta tan mal... si tienes pocas columnas.
__________________
www.ahaugas.com mi pagina de desarrollo
  #3 (permalink)  
Antiguo 11/03/2013, 07:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: resgistro en php dura mas de 1h

Si vas verificando registro por registro antes de insertar no me extrañaría.

Yo lo haría directamente en MySQL para hacer las cosas más eficientemente, el punto es que no hay procedimiento rápido si tienes que hacerlo con PHP y bajo múltiples condiciones.

Tan solo he de decirte, que a veces, alterar 15 000 registros de una BD, y haciéndolo únicamente con la consola y la versión PHP-CLI tarda minutos, pues tengo que hacer lógica y ciertas conversiones que no son nativas del RDBMS.

Pero bueno, eso en un único proceso, si divido el proceso en 10 sub-procesos evidentemente cuesta un 10% del tiempo, o bien, puedo incrementar en un factor de 10x el nivel registros y se usará aproximadamente el mismo tiempo.

La clave aquí es la premisa de siempre: divide y vencerás.

No hay códigos mágicos ni funciones que hacen esto por nosotros, de ahí que debes aplicar técnica, y sólo tu sabes lo que necesitas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 11/03/2013, 08:26
 
Fecha de Ingreso: septiembre-2007
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 16 años, 7 meses
Puntos: 12
Respuesta: resgistro en php dura mas de 1h

Deberías publicar tu código de verificación. Si por ejemplo usas expresiones regulares, deberías buscar un alternativo porque son MUY lentos.
  #5 (permalink)  
Antiguo 11/03/2013, 11:41
 
Fecha de Ingreso: junio-2010
Mensajes: 31
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: resgistro en php dura mas de 1h

bueno verificare esos enlaces haber si hay manera de optimizar , lo hago en php el registro ya que un usuario es el que los va a insertar claro no lo hacen a cada raro quizas una o 2 veces al mes ... !!

estoy usando codeigniter y el codigo en realidad es sencillo se los pongo a continuacion

Código:
public function insertarRepuestosMaster($archivo_nombre){
        
        $archivo = file('C:\wamp\www\pedidoSugerido\archivos\ '.$archivo_nombre);  
        $cont_linea = 0;
        $mensaje = "error";
        $mensajeU = "Datos Actualizados";
        $mensajeI = "Datos Registrados";
        $contarUpdate = 0;
        $contarInsert = 0;
        
          foreach ($archivo as $linea_num => $linea)
           {
              $codigo = substr($linea, 0, 17); 
              $codAlt = substr($linea, 17, 21);
              $precio = substr($linea, 38, 17);
              $descripcionMala = substr($linea, 55, 23);
              $campo5 = substr($linea, 78, 8);
              $campo6 = substr($linea, 86, 32);
              $campo7 = substr($linea, 118, 20);
              $campo8 = substr($linea, 138, 12);
              $campo9 = substr($linea, 150, 11);
              
              if($this->verificarMaster($codigo)){// verifico si esta en la tabla Actualizo 

                  $data = "";  
                  $data = array(
                      'codigo' => $codigo,
                      'codigoAlt' => $codAlt,
                      'precio' => $precio,
                      'descripcion' => $descripcionMala,
                      'campo5' => $campo5,
                      'campo6' => $campo6,
                      'campo7' => $campo7,
                      'campo8' => $campo8,
                      'campo9' => $campo9
                      );
                  
           $id = $this->verificarMaster($codigo);
          
           $this->db->where('id', $id);
           $this->db->update('master',$data);
           $contarUpdate ++;
           
           $mensaje = $this->db->_error_message();
           if(empty($mensaje)){
           $mensajeU = "Datos Actualizados";
           }else{
               $mensaje = "Error Archivo Incorrecto";
                }
                  
              }else{ // si no registro 
              
              $this->db->set('codigo',$codigo);
              $this->db->set('codigoAlt',$codAlt);
              $this->db->set('precio',$precio);
              $this->db->set('descripcion',$descripcionMala);
              $this->db->set('campo5',$campo5);
              $this->db->set('campo6',$campo6);
              $this->db->set('campo7',$campo7);
              $this->db->set('campo8',$campo8);
               $this->db->set('campo9',$campo9);

              $this->db->insert('master'); 
              $contarInsert ++;
              
           $mensaje = $this->db->_error_message();
           if(empty($mensaje)){
           $mensajeI = "Datos Registrados";
           }else{
               $mensaje = "Error Archivo Incorrecto";
                }
              
              }
           }
           
              echo $mensajeU.": ".$contarUpdate."  ".$mensajeI.": ".$contarInsert;
             // echo $cont_linea."Registros";
        
    }
bueno como el archivo es de ancho fijo voy separando las columnas luego verifico por codigo si esta registrado o no... para saber si hay que actualizar o simplemente registrar bueno es todo lo que hace esta funcion que es a la que llama al registrar despues de ingresar el archivo txt...


la tabla tiene 9 campos
__________________
Miguel0N
  #6 (permalink)  
Antiguo 11/03/2013, 13:43
 
Fecha de Ingreso: junio-2010
Mensajes: 31
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: resgistro en php dura mas de 1h

otra pregunta ya que tarda mucho este script seria posible crear un load bar .... que me mostrara el porcentaje de como va la insercion ... yo lo muestro mediante ajax por ahora es un gif loader... pero he encontrado la manera de implementar un loader,,

lo hice pero solo la subida del archivo mediante ajax pero a la hora de calcular el proceso y me valla mostrando el tiempo no he llegado si alguien sabe alguna forma me vendria bien .. gracias
__________________
Miguel0N
  #7 (permalink)  
Antiguo 11/03/2013, 14:21
 
Fecha de Ingreso: junio-2010
Mensajes: 31
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: resgistro en php dura mas de 1h

se me ocurrio algo que estuve leyendo... hay una funcion flush() que se usa para mostrar informacion del bueffer mientras la pagina carga yo podria mientras va haciendo el bucle quizas mostrar con flush() por cual registro va y

podria hacerse una especie de load lo vi en este articulo y me dio una idea ...
[URL="http://meddle.dzygn.com/esp/weblog/barra.progreso.php/"]http://meddle.dzygn.com/esp/weblog/barra.progreso.php/[/URL]
__________________
Miguel0N

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:33.