Nicolas Repentin
nicolas.repentin@gmail.com 2009
Gérard Baylard
Geodebay@gmail.com 2010
Bruno Brouard
annoa.b@gmail.com 2010,2012
Yoann Fievez
yoann.fievez@gmail.com 2013

# Effets dommageables des recherches sur disque

La recherche sur disque est une des opérations les plus coûteuses que vous puissiez peut-être réaliser. Vous pouvez ne pas le savoir à partir de l’examen du décompte des recherches effectuées, mais croyez-moi, elles sont coûteuses. Par conséquent, abstenez-vous des piètres comportements ci-après :

disperser nombre de petits fichiers un peu partout dans le disque,

ouvrir, inspecter et lire beaucoup de fichiers partout sur le disque.

exécuter les opérations précédentes sur des fichiers montés à plusieurs reprises, comme pour s’assurer de leur fragmentation et provoquer des recherches encore plus coûteuses,

exécuter les opérations précédentes sur des fichiers situés dans des répertoires différents, comme pour s’assurer qu’ils soient dans des groupes de pistes différents et provoquer des recherches encore plus coûteuses,

faire les opérations précédentes plusieurs fois alors qu’on aurait pu se contenter d’une seule.

Voici des conseils pour optimiser votre code pour des recherches optimales :

rassemblez les données dans un seul fichier,

gardez l’ensemble des données dans un même répertoire,

mettez en cache les données afin de ne pas avoir à les relire constamment,

partagez les données afin de ne pas avoir à les relire à partir du disque à chaque chargement de l’application,

envisagez la mise en cache de toutes les données dans un fichier binaire unique, bien aligné et qui peut être mappé.

Le problème de la recherche sur disque est aggravé dans le cas des lectures, qui est malheureusement ce que nous faisons. N’oubliez pas, les lectures s’effectuent en règle générale de manière synchrone tandis que les écritures s’effectuent de manière asynchrone. Ce seul fait complique le problème : sérialiser chaque lecture contribue à la latence du programme.