[gull] Petit problème de maths, pour créer de liens

Yves Martin ymartin59 at free.fr
Thu May 1 18:55:48 CEST 2008


 Bonjour,

Comme Sébastien, il me semble judicieux de faire un "stat" sur le fichier
pour faire une première comparaison sur la taille du fichier avant de
faire un hachage sha512sum par exemple sur des fichiers de taille identique.

Tout dépend des données manipulées mais SHA a nettement de risque de collision
que MD5... Mais il reste encore possible que si les fichiers sont des logs
répétitifs d'une application, des collisions soient fréquentes (même hash pour
des contenus différents)

Ce qui est dommage en terme de performance est de lire un fichier deux fois:
une fois pour le hash, une fois pour le diff.

Quelque soit le type de données, un "diff -q" sur des fichiers de taille
identique devrait être fournir une réponse fiable sans passer par des sommes de
contrôle - en supposant que le diff sorte au premier octet différent, c'est
autant d'économisé en accès disque.

Tes temps d'exécution me laisse penser qu'il y a une optimisation possible de
ton implémentation.
En effet, si la génération des hash sur 80 Go te prend 6 heures, avec une
lecture complète des fichiers donc - je ne comprends pas que le diff des
fichiers avec hash identique (donc moins de fichiers) prennent 3/4 jours ??

En moyenne, combien de multiples sont détectés pour un fichier ?
En fonction de cette statistique, une optimisation pourrait être l'usage d'un
algorithme de comparaison de N fichiers en une passe (N lectures) - au lieu de
les comparer 2 par 2 (2*(N-1) lectures).
Au pire, cela devrait te prendre 12 heures de comparaison - les commandes "rm"
et "ln" étant négligeables je pense.

Comment implémenter une comparaison par N: ouvrir N file descriptor en mmap et
comparer par bloc de 4k - 2 par 2 en mémoire - normalement la gestion des
fichiers en mémoire cache par Linux devrait t'éviter des lectures multiples du
disque, le bloc du premier fichier servant de référence étant en cache.

Voilà pour la théorie - en pratique il faut voir avec les possibilités de ton
langage de programmation favori.

--
Yves Martin



More information about the gull mailing list