J'ai un fichier de 1,2 Go qui contient une chaîne d'une ligne. Ce dont j'ai besoin est de rechercher le fichier entier pour trouver la position d'une autre chaîne (actuellement j'ai une liste de chaînes à rechercher). La façon dont je le fais maintenant est d'ouvrir le gros fichier et de déplacer un pointeur à travers des blocs de 4Kb, puis de déplacer les positions du pointeur X dans le fichier et d'obtenir 4Kb de plus.recherche de chaîne de vitesse en PHP
Mon problème est qu'une plus grande chaîne de recherche, plus il prend de temps pour l'obtenir.
Pouvez-vous me donner quelques idées pour optimiser le script afin d'obtenir de meilleurs temps de recherche?
ceci est ma mise en œuvre:
function busca($inici){
$limit = 4096;
$big_one = fopen('big_one.txt','r');
$options = fopen('options.txt','r');
while(!feof($options)){
$search = trim(fgets($options));
$retro = strlen($search);//maybe setting this position absolute? (like 12 or 15)
$punter = 0;
while(!feof($big_one)){
$ara = fgets($big_one,$limit);
$pos = strpos($ara,$search);
$ok_pos = $pos + $punter;
if($pos !== false){
echo "$pos - $punter - $search : $ok_pos <br>";
break;
}
$punter += $limit - $retro;
fseek($big_one,$punter);
}
fseek($big_one,0);
}
}
Merci à l'avance!
Qu'est-ce qui se passe quand vous utilisez les strpos plaine() Fonctionne sur le fichier 1.2Go? – powtac
J'ai trouvé un benchmark pour différentes méthodes de correspondance en PHP, mais strpos() est le plus rapide. http://www.hashbangcode.com/blog/fastest-way-match-string-php-200.html – powtac
Quelle est la taille d'options.txt et à quoi cela ressemble-t-il? – 0scar