Miles de registros con PHP y Mysql
Publicado por ZxSpectrum (1 intervención) el 28/06/2017 18:07:33
Buenas tardes:
Tengo unos 40.000 ficheros de texto que deseo volcar a una Base de datos con motor InnoDB y Msql 5.7 para trabajar con indices FULLTEXT.Aparentemente el algorritmo que os adjunto funciona bien pero se vuelve muy lento (El proceso de INSERT INTO) segun va creciendo el fichero. 70000 ficheros-> 1.2GB.
He revisado y modificado los parametros vinculados al Buffer pero no logro acelerar el proceso de ingesta.Es como si al lanzar en el bucle FOR x Insert Into se quedara "frito" he revisado la carga de trabajo del server y está al 10% de procesador y 44% de memoria .ademas tiene discos SSD Tendria que ir fluido.
¿Alguna idea de como optimizar el trabajo de volcado o seccionarlo para evitar que dure dias el volcado?
Muchas gracias a todos
Saludos.
Tengo unos 40.000 ficheros de texto que deseo volcar a una Base de datos con motor InnoDB y Msql 5.7 para trabajar con indices FULLTEXT.Aparentemente el algorritmo que os adjunto funciona bien pero se vuelve muy lento (El proceso de INSERT INTO) segun va creciendo el fichero. 70000 ficheros-> 1.2GB.
He revisado y modificado los parametros vinculados al Buffer pero no logro acelerar el proceso de ingesta.Es como si al lanzar en el bucle FOR x Insert Into se quedara "frito" he revisado la carga de trabajo del server y está al 10% de procesador y 44% de memoria .ademas tiene discos SSD Tendria que ir fluido.
¿Alguna idea de como optimizar el trabajo de volcado o seccionarlo para evitar que dure dias el volcado?
Muchas gracias a todos
Saludos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
include ("includes/conexion.php");
/**************DIRECTORIO ORIGINAL*******************/
$directorio="procesar/";
/****************************************************/
function limpiaTXT($NombreFichero) {
$Cadena=fopen($NombreFichero ,"r") ;
$Cadena_Leida=fread($Cadena, filesize ($NombreFichero));
$output = mb_convert_encoding($Cadena_Leida, "UTF-8", " ISO-8859-1");//Cambiamos de ANSI a UTF8
$output = preg_replace('/[^\p{Latin} ]+/u', '',$output); //IMPORTANTISIMO ,PERMITIMOS LATIN Ñ,ACENTOS ETC
return $output;
}
function Lectura_y_Volcado_BBDD($directorio) {
include ("includes/conexion.php");
$ficheros=scandir($directorio);
$contador=count ($ficheros);
$j=0;
$errores="\nSE ADJUNTA LA SIGUIENTE LISTA DE ERRORES DE VOLCADO:\n";
for ($i=2; $i < $contador; $i++) {
/*TRIMAMOS EL NOMBRE PARA RESCATAR LA FECHA Y LA PAGINA*/
$año= substr($ficheros[$i],0, 4);
$mes= substr($ficheros[$i],4, 2);
$dia= substr($ficheros[$i],6, 2);
$pagina= substr($ficheros[$i],9, 3);
$fecha=$año."-".$mes."-".$dia;
/**********LIMPIAMOS LOS FICHEROS Y ESCAPAMOS CARACTERES*********/
$Fichero_Limpio=limpiaTXT($directorio.$ficheros[$i]);
$contenido=$mysqli->real_escape_string($Fichero_Limpio);//retorna el cuerpo del contenido
/**********INSERTAMOS EN LA BBDDD*******************************/
if ($mysqli->query("INSERT INTO TablaX (ID , Fecha , Pagina , Contenido) VALUES (NULL, '$fecha' , $pagina ,'$contenido')")){
echo "Se ha insertado correctamente el fichero:".$ficheros[$i]."\n"; $j++;}
else{ $errores.=$fecha." CON NUMERO DE PAGINA: ".$pagina."\n";}
}
echo "\nTOTAL DE FICHEROS PROCESADOS CORRECTAMENTE :".$j." archivos";
echo $errores;
}
Lectura_y_Volcado_BBDD($directorio);
Valora esta pregunta


0