Test de la solution fichier XML
Jump to navigation
Jump to search
Test
Un script a été utilisé pour créer un fichier de logs de 30000 entrées.
#!/bin/bash i=0 echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > logs.xml echo "<!DOCTYPE logs SYSTEM \"logs.dtd\">" >> logs.xml echo "<logs>" >> logs.xml while [ $i -lt 10000 ] do echo " <log>" >> logs.xml echo " <date>`date`</date>" >> logs.xml echo " <login>login$i</login>" >> logs.xml echo " <droits>droits</droits>" >> logs.xml echo " <operation>connexion</operation>" >> logs.xml echo " <tables>" >> logs.xml echo " </tables>" >> logs.xml echo " </log>" >> logs.xml echo " <log>" >> logs.xml echo " <date>`date`</date>" >> logs.xml echo " <login>login$i</login>" >> logs.xml echo " <droits>droits</droits>" >> logs.xml echo " <operation>modification</operation>" >> logs.xml echo " <tables>" >> logs.xml echo " <tab id=\"table1\">" >> logs.xml echo " <champ id=\"champ1\">valeur1</champ>" >> logs.xml echo " </tab>" >> logs.xml echo " <tab id=\"table2\">" >> logs.xml echo " <champ id=\"champ2\">valeur2</champ>" >> logs.xml echo " </tab>" >> logs.xml echo " </tables>" >> logs.xml echo " </log>" >> logs.xml echo " <log>" >> logs.xml echo " <date>`date`</date>" >> logs.xml echo " <login>login$i</login>" >> logs.xml echo " <droits>droits</droits>" >> logs.xml echo " <operation>deconnexion</operation>" >> logs.xml echo " <tables>" >> logs.xml echo " </tables>" >> logs.xml echo " </log>" >> logs.xml i=$(($i+1)) done echo "</logs>" >> logs.xml
La DTD utilisée pour le fichier XML étant la suivante :
<?xml version="1.0" encoding="utf-8"?> <!ELEMENT logs (log*)> <!ELEMENT log (date, login, droits, operation, tables)> <!ELEMENT date (#PCDATA)> <!ELEMENT login (#PCDATA)> <!ELEMENT droits (#PCDATA)> <!ELEMENT operation (#PCDATA)> <!ELEMENT tables (tab*)> <!ELEMENT tab (champ*)> <!ATTLIST tab id CDATA #REQUIRED> <!ELEMENT champ (#PCDATA)> <!ATTLIST champ id CDATA #REQUIRED>
Temps nécessaire à la création du fichier de logs : 1 minute 31 secondes.
Ensuite, un script PHP est utilisé pour faire une requète sur le fichier logs.xml créé 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];
$file = "logs.xml";
$depth = array();
$last_name = "";
$n = 0;
function startElement($parser, $name, $attrs)
{
global $depth;
global $last_name;
$last_name = $name;
$depth[$parser]++;
}
function endElement($parser, $name)
{
global $depth;
$depth[$parser]--;
}
function characterData($parser, $data)
{
global $n;
global $depth;
global $last_name;
if(($last_name == "LOGIN") && ($data == "login15"))
{
$n++;
}
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if(!($fp = fopen($file, "r")))
{
die("could not open XML input");
}
while($data = fread($fp, 4096))
{
if(!xml_parse($xml_parser, $data, feof($fp)))
{
die(sprintf("XML error : %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
}
}
echo 'Nombre d\'opérations effectuées par login15 : '.$n.'
';
xml_parser_free($xml_parser);
$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 efféctuées par login15 : 3
Le résultat est exact.
- taille du fichier log : 6.8 Mo
- temps de traitement de la requète : 5.8 s