Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/12/2006, 03:13
gabyrsh
 
Fecha de Ingreso: mayo-2005
Mensajes: 257
Antigüedad: 19 años
Puntos: 1
Exclamación Optimizar recursos consumidos con Php y Mysql en procesos pesados

Maestros de la programacion, una vez mas recurro a ustedes. Creé un scrip tel cual parsea un archivo de texto (250 MB aprox) y luego lo sube a la base de datos. Elegi hacerlo en php, porque por ejemplo en VIsual Basic leer SOLO EL TEXTO (sin subirlo a la base de datos), leyo 29000 (aprox) lineas en 12 minutos, y el mismo trabajo en PHP (solo tarda 2 min aproximados), Obviamente elegijo PHP.
ahor viene el problema, Obviamente al agregarle lineas para que suba la informacion de cada linea de texto parseado a la base de datos consume un poco de tiempo adicional, mi script los primeros 2 minutos funciona de mil maravillas, coloca en la base de datos aproximandamente 3000 registros por MINUTO (RAPIDISIMO), luego del 2do minuto la optimizacion empieza a caer, subiendo por ejemplo 1000 Registros por minuto y asi sucecivamente hasta llegar a 5 o 6 registros por minutos, ¿Que es lo que esta pasando? ¿tengo que seguir modificando las configuraciones de mi EASYPHP (es lo que utilizo, este tiene apache, php, y mysql incluido)?,
no tengo la menor idea, por favor ayudenme ya que estoy totalmente perdido

Les recuerdo que mi archivo de Texto es un CSV (palabras separadas por comas), en el scrip leo cada linea, separo la linea en un array, (toda la linea es un registro y cada posicion del Array es un campo de dicho registro).
Este es mi codigo php:

Código PHP:

$con 
mysql_connect("localhost",$datos['usuario'],$datos['password']) or die (mysql_error()); 
mysql_select_db($datos['base'],$con) or die (mysql_error()); 

$fp fopen "csv.txt" "r" ); 
while (( 
$data fgetcsv $fp 100000 "," )) !== FALSE ) {                      $i0
   foreach(
$data as $row
     {
      
$campo["$i"]= str_replace("'""´"$row); // Paso todo a un array
      
$i++ ;          
      } 

   
$categorias explode(">"$campo[19]);

   
//Compruebo si esta el dato en la base para no agregar demas.        

   
$busqueda " bla bla bla ";
   
$result mysql_query($busqueda,$con);
   
$comprobacion=@mysql_num_rows($result);
  
   if (
$comprobacion == 0)
      {  
        
//Agrego el dato a labase de datos//
        
     
       
}


 
       
        
 } 
   
fclose $fp ); 
   
mysql_close($con); 

Desde ya muchas gracias por su atencion!