IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[CSV] Optimiser mon script


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut [CSV] Optimiser mon script
    Bonjour à tous,

    je suis sur un projet où il y a de gros traitements:
    Je récupère des milliers de lignes d'un fichier genre csv, et je dois identifier chaque ligne en retrouvant un champ de la ligne csv dans une table de ma bdd.
    Le process pour l'instant est le suivant:

    1. je charge tous les champs de la BDD dans 1 tableau unidimensionnel php
    2. j'ouvre le fichier csv
    3. je parcours chaque ligne de mon fichier, récupère le champ à vérifier, et le compare avec mon tableau php (avec array_search()).

    mon tableau php a + de 4000 indices, donc à chaque vérif je parcours ce tableau jusqu'à ce que je tombe sur la valeur identique...

    Qu'est-ce qui est le plus rapide ? parcourir un tableau php, ou un accès à la base ? ou mieux encore si vous avez des idées

    Merci pour vos avis.

  2. #2
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Parcourir le tableau ou la base... Naturellement je dirait le tableau, mais j'ai déjà été surpris, notamment, si tu mets un index sur le champ de ta base que tu dois tester.

    A la rigeur, plutot que de parcourir ton tableau avec array_search, tu peux tenter d'optimiser un peu la chose en "classant" d'abord ton tableau par ordre alphabétique, ce te permetra une recherche dichotomique.
    Tu cherches au milieu de ton tableau (si tu as 4000 entrée, tu regardes directement l'entrée 2000) et tu regarde si la valeur est alphabétiquement parlant plus grande, plus petite, ou égale. Si elle est plus grande, tu recherche au milieu de la moitié qui reste, soit entre 2000 et 4000 = l'entrée 3000.
    Si elle est égale, t'as trouvé, c'est bon. Si elle est plus petite, tu fait pareil avec l'autre moitié, et ainsi de suite. Le nombre d'accés a ton tableau est au max une puissance de 2 contenant l'intégralité de ton tableau, genre pour 4000 entrée, ca doit faire 2^12, donc 12 itérations max avant de trouver ta valeur ou d'être sur qu'elle n'est pas là.

  3. #3
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut
    Merci pour ta réponse Rakken,

    Ca me va bien, je vais effectivement optimiser la recherche dans le tableau php en suivant l'algo que tu cites.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  2. demande de conseil pour optimiser mon script
    Par seb.garcia dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 11/05/2011, 16h03
  3. [Batch] Optimisation de mon scripte
    Par kinder69 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 20/01/2011, 10h22
  4. Tcsh - Mon script ne marche pas
    Par Aramis dans le forum Linux
    Réponses: 5
    Dernier message: 13/05/2004, 18h26
  5. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo