Bonjour à tous,
J'ai un fichier assez énorme (43Go) contenant des mots, un par ligne. Ce fichier est destiné à grandir.
Il me faut maintenant pouvoir effectuer des recherches dans ce fichier le plus vite possible, pour cela j'avais d'abord pensé à indexer les mots selon la ligne, mais je ne trouve rien pour faire une recherche instantanée en spécifiant une ligne (sed prend un certain temps, la recherche doit se faire en quelques ms).
Donc j'ai ensuite pensé à fseek, qui lui est instantané, mais a besoin de l'offset. J'ai donc crée un script perl pour créer un fichier contenant les références de chaque mot avec leur offset, mais l'offset prend vite beaucoup de place, et il me faut en plus stocker le nombre d'octets du mot pour le retourner (sauf si vous pensez à une autre solution, genre je fais un fseek à partir d'un offset jusqu'au prochain retour à la ligne ?).
Mon problème est donc de stocker l'offset sur le minimum de place possible, là il atteint les 10 à 11 caractères, ce qui fait beaucoup. Mon fichier wordlist contient des mots dont la moyenne est de 10 caractères, donc il me faudrait stocker l'offset sur 9 ou moins pour gagner de l'espace.
Auriez-vous une idée concernant le meilleur moyen d'indexer des mots dans le but de les lire avec fseek ?
Merci, et désolé si ça n'est pas très clair
EDIT : J'ai aussi essayé d'utiliser fwrite pour stocker le tout sous forme binaire, mais au final ça prenait plus de place. A moins que ne l'utilise mal ? Je fais un fopen en append puis j'écris avec fwrite avant de fclose.








Répondre avec citation
Partager