Foros del Web » Programando para Internet » PHP »

PHPExcel Optimizacion

Estas en el tema de PHPExcel Optimizacion en el foro de PHP en Foros del Web. Hola que tal, como veran soy nuevo en el foro, estoy creando mi primera pagina web y necesito una ayudadita. Casi todo lo poco que ...
  #1 (permalink)  
Antiguo 09/09/2012, 21:03
 
Fecha de Ingreso: septiembre-2012
Mensajes: 4
Antigüedad: 11 años, 7 meses
Puntos: 0
Información PHPExcel Optimizacion

Hola que tal, como veran soy nuevo en el foro, estoy creando mi primera pagina web y necesito una ayudadita. Casi todo lo poco que se lo he sacado de este foro, pero ahora tengo un problema muy especifico y creo que no se ha planteado una pregunta asi.

Tengo dos tablas, la primera de ellas llamada "eventos", la cual una vez llena debera mantener en todo momento un promedio de 600,000 registros. La segunda llamada "facturados" la cual manejara un promedio de 60,000 y es alimentada tomando los datos de la primera y moviendolos a la segunda. Su tamaño no varia mucho ya que cada mes deberan vaciarse y volver a empezar. La forma de alimentar a la primera es un archivo de excel en formato xls, esto no lo puedo cambiar y debe ser forsozamente asi, para ello implemente un pequeño codigo con PHPExcel:

Código PHP:
$objReader = new PHPExcel_Reader_Excel5();
$objPHPExcel $objReader->load($_FILES['Archivo']['tmp_name']);
$sheetData $objPHPExcel->getActiveSheet()->toArray(true,false,true,false);
for(
$fila=1;$fila<count($sheetData);$fila++)
      {
        
$Folio=$sheetData[$fila][0];
        
$Tarifa=$sheetData[$fila][1];
        
$FechaHora=$sheetData[$fila][2];
        
$Carril=$sheetData[$fila][3];
        
dbinsert("insert into tempevent (Folio,Tarifa,FechaHora,Carril) values ('$Folio','$Tarifa','$FechaHora','$Carril')");
      } 
Es un proceso largo puesto que se insertan en ese archivo diariamente alrededor de 20,000 filas. Para acelerar el proceso cree un una carpeta en RAM y especifico que ahi se guarde el archivo temporal subido con otro script. El proceso toma alrededor de 30 minutos, si alguien sabe como acelerar este proceso bienvenidos sean sus comentarios

El contenido del archivo lo subo a una tabla temporal llamda tempevent, despues de eso elimino de esa tabla temporal los registros duplicados existentes ya en las otras dos con el siguiente codigo sql:


Se elimina el contenido ya existente en la primera tabla:
Código PHP:
DELETE FROM tempevent WHERE Folio IN (SELECT Folio FROM eventos) AND Tarifa IN (SELECT Tarifa FROM eventos) AND FechaHora IN (SELECT FechaHora FROM eventos) AND Carril IN (SELECT Carril FROM eventos
Se elimina el contenido ya existente en la segunda tabla:
Código PHP:
DELETE FROM tempevent WHERE Folio IN (SELECT Folio FROM facturados) AND Tarifa IN (SELECT Tarifa FROM facturados) AND FechaHora IN (SELECT FechaHora FROM facturados) AND Carril IN (SELECT Carril FROM facturados
y lo restante lo muevo a eventos:
Código PHP:
insert into eventos (Folio,Tarifa,FechaHora,Carril)  (select Folio,Tarifa,FechaHora,Carril from tempevent
El problema es que obviamente entre mas registros tiene la tabla eventos mas tiempo se tarda la consulta, y empezamos en lugar de minutos a hablar de horas de tiempo.

Para aclarar mas la informacion, ningun dato es unico en la tabla eventos, todos se pueden repetir pero no en conjunto los cuatro campos: Folio,Tarifa,FechaHora,Carril por lo cual el indice son los cuatro. Un detalle mas, tal vez no sea la mejor forma de hacer pero funciona.


Agradezco de antemano sus comentarios y gracias por leer
  #2 (permalink)  
Antiguo 10/09/2012, 18:56
 
Fecha de Ingreso: septiembre-2012
Mensajes: 4
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: PHPExcel Optimizacion

Bueno creo que simplemente no puedo dar con la soucion tan rapido, igualmente gracias a todos los que se tomaron la molestia de leer el post. Si en cuentro una solucion mas optima la pondre para todos. Saludos

Etiquetas: phpexcel, registro, sql, tabla
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 10:50.