Scripts
Honderd miljoen records toevoegen
Hieronder vind je een script om een textbestand vol te laden met random gegevens om deze later in je database te gooien. Het tweede script is voor MySQL, de onderste voor PostgreSQL. Let op de volgende dingen: - PHP's max execution time moet uit staan - Je krijgt na een half uurtje een error 500, maar je database gaat gewoon door Op een P4, 2,8ghz, 512mb PC duurt 50 miljoen records ongeveer 30 minuten om in database in te laden als er een PRIMARY KEY (of INDEX) is. Anders duurt het ongeveer 2 a 5 minuten. Het aanmaken van de textfile gaat iets sneller. Bij onderstaand script ben ik uitgegaan van een dergelijke table: id bigint(10) primary key getalgroot bigint(12) tijd timestamp getalletje smallint(1)
honderd-miljoen-records-toevoegen
BESTAND VOLGOOIEN
<?php
# start speedtest
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
# delete file and make new one
$file = "SQLdump.txt";
if ( file_exists($file) ) unlink($file);
$fp = fopen($file, "a");
#add random data
for ( $i = 1111111111; $i <= 1211111111; $i++ )
{
fputs($fp, $i. ',' .rand(100000000000, 256000000000). ',' .time(). ',' .rand(0,9). '
');
}
fclose($fp);
# end speedtest
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "This page was created in ".$totaltime." seconds";
?>
MYSQL DUMP
<?php
# start speetest
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
# connect to database
mysql_connect("localhost", "***", "***") or die(mysql_error());
mysql_select_db("***") or die(mysql_error());
# the database query, don't forget the absolute path to the TXT file
mysql_query(
"
LOAD DATA INFILE 'C:/htdocs/SQLdump.txt'
INTO TABLE tabel
FIELDS
TERMINATED BY ','
"
) or die(mysql_error());
# end speedtest
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "This page was created in ".$totaltime." seconds";
?>
POSTGRESQL DUMP
<?php
# start speetest
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
# connect to database
$conn_string = "host=localhost port=5432 dbname=DB user=USER password=PASSWORD";
$db = pg_connect($conn_string) or die(pg_last_error());
# the database query, don't forget the absolute path to the TXT file
pg_query($db,
"
COPY trans FROM 'C:/htdocs/SQLdump.txt'
WITH
DELIMITER ','
"
) or die(pg_last_error());
# end speedtest
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "This page was created in ".$totaltime." seconds";
?>
Reacties
0