Test de la solution base de données
Test
Un script PHP a été utilisé pour créer une base de données de 30000 logs.
<?php mysql_connect('host', 'user', 'password'); mysql_select_db('openflyers'); mysql_query('drop table if exists logs'); mysql_query('drop table if exists journal'); mysql_query('create table journal ( login VARCHAR(255), num_log INTEGER auto_increment, date_log DATETIME, droits TEXT, operation TEXT, primary key(num_log) )'); mysql_query('create table logs ( num_log INTEGER references journal.num_log, table_name TEXT, field_name TEXT, field_value TEXT )'); for($i = 0 ; $i < 10000 ; $i++) { $today = date("Y-m-d G:i:s"); $query = 'INSERT INTO journal(login, date_log, droits, operation) VALUES (\'login'.$i.'\', \.$today.'\', \'droits\', \'connexion\')'; mysql_query($query); $num_log = mysql_insert_id(); $query = 'INSERT INTO logs(num_log) VALUES ('.$num_log.')'; mysql_query($query); $today = date("Y-m-d G:i:s"); $query = 'INSERT INTO journal(login, date_log, droits, operation) VALUES (\'login'.$i.'\', \.$today.'\', \'droits\', \'modification\')'; mysql_query($query); $num_log = mysql_insert_id(); $query = 'INSERT INTO logs VALUES ('.$num_log.', \'table1\', \'champ1\', \'valeur1\')'; mysql_query($query); $query = 'INSERT INTO logs VALUES ('.$num_log.', \'table2\', \'champ2\', \'valeur2\')'; mysql_query($query); $today = date("Y-m-d G:i:s"); $query = 'INSERT INTO journal(login, date_log, droits, operation) VALUES (\'login'.$i.'\', \.$today.'\', \'droits\', \'deconnexion\')'; mysql_query($query); $num_log = mysql_insert_id(); $query = 'INSERT INTO logs(num_log) VALUES ('.$num_log.')'; mysql_query($query); } ?>
Temps nécessaire à l'insertion des logs : 14 secondes.
Ensuite, un script PHP est utilisé pour faire une requète sur la base créée et pour chronometrer le temps necessaire à l'obtention du résultat. La requète consiste à demander combien d'opérations ont été effectuées par la personne ayant l'identifiant 'login15'.
<?php $temps = microtime(); $temps = explode(' ', $temps); $debut = $temps[1] + $temps[0]; mysql_connect('host', 'user', 'password'); mysql_select_db('openflyers'); $query = 'SELECT COUNT(login) FROM journal WHERE login=\'login15\; $result = mysql_query($query); echo 'Nombre d\'opérations efféctuées par login15 : '.mysql_result($result, 0, 0).'
'; $temps = microtime(); $temps = explode(' ', $temps); $fin = $temps[1] + $temps[0]; echo 'Page générée en '.round(($fin - $debut), 6).' secondes.'; ?>
Résultat
Nombre d'opérations effectuées par login15 : 3
Le résultat est exact.
- taille de la base de données : 2.8 Mo
- temps de traitement de la requète : 0.04 s