Use una base de datos, es la única opción que tiene sentido. Incluso si lleva un poco más de tiempo. Una vez que comience con los archivos de registro, se encontrará en una pista donde le causará dolor, por ejemplo, mover servidores, permisos de archivos, imposibilidad de balanceo de carga, etc. ...
Si tiene la base de datos abierta entonces creo que probablemente sea más rápido insertar una sola fila.
Sin embargo, con toda esta actuación relacionada con la única manera de estar seguro es escribir una prueba sencilla y medirlo ....
Actualización: Me he hecho una prueba rápida - y por supuesto si usted tiene que abrir y cerrar el archivo es aproximadamente la misma velocidad o más lento con una prueba de 10,000 líneas:
Sin embargo, cuando comienza a tener múltiples procesos haciendo esto, se ralentiza como se puede ver a continuación. Esto es con 10 procesos concurrentes (todas las sincronizaciones en segundos)
DB time: 2.1695
DB time: 2.3869
DB time: 2.4305
DB time: 2.5864
DB time: 2.7465
DB time: 3.0182
DB time: 3.1451
DB time: 3.3298
DB time: 3.4483
DB time: 3.7812
File open time: 0.1538
File open time: 0.5478
File open time: 0.7252
File open time: 3.0453
File open time: 4.2661
File open time: 4.4247
File open time: 4.5484
File open time: 4.6319
File open time: 4.6501
File open time: 4.6646
Open close file time: 11.3647
Open close file time: 12.2849
Open close file time: 18.4093
Open close file time: 18.4202
Open close file time: 21.2621
Open close file time: 22.7267
Open close file time: 23.4597
Open close file time: 25.6293
Open close file time: 26.1119
Open close file time: 29.1471
function debug($d)
{
static $start_time = NULL;
static $start_code_line = 0;
if($start_time === NULL)
{
$start_time = time() + microtime();
$start_code_line = $code_line;
return 0;
}
printf("$d time: %.4f\n", (time() + microtime() - $start_time));
$fp = @fopen('dbg.txt','a');
fprintf($fp,"$d time: %.4f\n", (time() + microtime() - $start_time));
fclose($fp);
$start_time = time() + microtime();
$start_code_line = $code_line;
}
function tfile()
{
$fp = @fopen('t1.txt','a');
for ($i=0;$i<10000;$i++)
{
$txt = $i."How would you log, which do you think is quicker:How would you log, which do you think is quicker:";
fwrite($fp,$txt);
}
fclose($fp);
}
function tfile_openclose()
{
for ($i=0;$i<10000;$i++)
{
$fp = @fopen('t1.txt','a');
$txt = $i."How would you log, which do you think is quicker:How would you log, which do you think is quicker:";
fwrite($fp,$txt);
fclose($fp);
}
}
function tdb()
{
$db = mysql_connect('localhost','tremweb','zzxxcc');
$select_db = mysql_select_db('scratch');
if (!$select_db)
die('Error selecting database.');
for ($i=0;$i<10000;$i++)
{
$txt = $i."How would you log, which do you think is quicker:How would you log, which do you think is quicker:";
mysql_query("INSERT INTO tlog values('".$txt."')");
}
}
debug("");
tfile();
debug("File open");
tfile_openclose();
debug("Open close file");
tdb();
debug("DB");
Es por eso que los diferentes procesos deberían escribir en diferentes archivos ... Agregar más tarde. Todo lo que tiene que preocuparse con la apertura/cierre es almacenar los registros en intervalos de registro (una vez por hora probablemente esté bien para este tipo de carga). – SquareCog
De hecho, sin embargo, no escribiría en ningún archivo de registro. Una vez que comienzas a hacer cosas como tener que agregar y rotar, se convierte en el tipo de proceso que irá mal, y con pocos beneficios en términos de CPU en el primer caso. Las bases de datos son buenas para almacenar y recuperar datos .... –
OP aquí, esto me parece convincente, junto con el inserto retrasado –