[php] Trop de temps d'execution

Discussion dans 'Web, design' créé par hasbrak, 4 Février 2010.

Statut de la discussion:
Fermée.
  1. Offline
    hasbrak Touriste
    Bonjour,

    J'expose le problème :

    J'ai un fichier .mdb qui se met a jour tous les 4h. Ce fichier comporte en fin d'année plus de 400 000 lignes. (.mdb initialisé le 1 janvier) Le fichier se compose d'une seule table. Je dois travailler sur 3 champs, je souhaite tous exporter dans mysql. La base de mysql comprend tout les lignes depuis X années.

    Le passage .mdb => mysql, se fait correctement, l'ajout des nouvelle ligne aussi. Mais cela prend du temps beaucoup de temps. Car je lis chaque ligne dans le .mdb puis je compare au mysql si elle est présente je copie pas sinon j'insert.

    Est ce que quelqu'un a autre idée ?

    PHP:
    <?php
    set_time_limit
    (500);
    //Connexion à mysql
    $connection mysql_connect("localhost","root","");
    if ( ! 
    $connection )
    die (
    "connection impossible");
    $sqlbd="telegramme";
    mysql_select_db($sqlbd) or die ("pas de connection");
    // Chemin physique de ma base Access
    $cheminDeMaBase 'F:\Documents\******\Graph de Compteur DB\200910.mdb';
    // Chaîne utilisée pour la connection ODBC sans DSN s'il vous plaît
    $connectionString sprintf("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=%s"$cheminDeMaBase);
    // Connexion
    $cnx odbc_connect($connectionString,"","");
    // Requête SQL
    $resource odbc_exec($cnx"SELECT GASub,TeleDate,Value FROM Telegramme");
    // Pour chaque enregistrement...
    while(odbc_fetch_row($resource))
    {
       
       
        
    $GASub=odbc_result($resource'GASub');
        
    $TeleDate odbc_result($resource'TeleDate');
        
    $result mysql_query("
                        SELECT Compteur, Date
                        FROM telegramme
                        WHERE Compteur = '
    $GASub'
                        and Date = '
    $TeleDate'
                   "
    );
         if(!
    $result)
                   {
                        
    $message "Une erreur est survenue lors connexion à la base de donnée.";
                   }
                   else
                   {
                        if(
    mysql_num_rows($result) == 0)
                        {
                           
    $Valueodbc_result($resource'Value'); 
                           
    $insert mysql_query("INSERT INTO telegramme (Compteur,Date,Valeur) VALUES('$GASub','$TeleDate','$Value')");
                        }     
                    }
    }
    // Et je ferme les connexions
    odbc_close($cnx);
    mysql_close($connection); 
    ?>
    hasbrak, 4 Février 2010
    #1
  2. Offline
    gregsting Elite
    Si tu peux ordonner tes 2 DB sur un même critère il y a moyen de les comparer plus rapidement. Si j'ai bien compris tu veux trouver les éléments communs aux deux listes. Tu peux trier tes "listes" puis utiliser l'algo de la plus longue séquence commune (http://en.wikipedia.org/wiki/Longest_common_subsequence_problem) ca n'est pas spécialement simple à comprendre mais pas trop compliqué a implémenter. Il faut voir aussi si trier ta DB ne prends pas plus de temps qu'autre chose...
    gregsting, 4 Février 2010
    #2
Statut de la discussion:
Fermée.