|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() Inscription : avril 2006 Messages : 300 ![]() |
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. |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : août 2006 Messages : 1 207 ![]() |
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à.
__________________
Rakken Oneira, un monde imaginaire d'Heroic Fantasy. Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/ |
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : avril 2006 Messages : 300 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com