2010-03-31 3 views
1

Je stocke plusieurs versions d'un fichier basé sur un résumé du nom de fichier original et sa version, comme ceci:Cache SHA1 digest résultat?

$ filename = sha1 ($ original. ':'. $ Version); Cela vaut-il la peine de mettre en cache le condensé ($ filename) dans memcache en tant que paire clé/valeur (la clé étant la version originale + et la valeur du hachage sha1), ou génère le résumé assez rapidement application web PHP trafic élevé)?

Merci,

Johnathan

+1

Les algorithmes de hachage sont conçus pour être rapides (ainsi que sécurisés). Ma conjecture est que vous seriez en très bonne forme si les performances de votre application Web sont limitées par la vitesse de calcul d'un hachage. Maintenant, si vous en calculez des centaines par requête, c'est une histoire différente ... –

+0

Je tiens également à préciser que si vous utilisez un type de TLS/SSL pour les connexions à votre application web, le serveur web est déjà faire beaucoup de hachage, probablement avec SHA1 et sur des entrées beaucoup plus longues que les noms de fichiers. –

Répondre

2

» beaucoup mieux de ne pas mettre en cache les hachages. Calcul 100.000 hash sur BRÈVES autour des noms de fichiers 1/2 seconde sur mon ordinateur portable (un Core 2 Duo raisonnablement rapide):

 byte[][] fileNames = Enumerable.Range(0, 100).Select(i => new UnicodeEncoding().GetBytes(System.IO.Path.GetRandomFileName())).ToArray(); 
     Stopwatch stopWatch = new Stopwatch(); 

     using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider()) 
     { 
      stopWatch.Start(); 
      for (int j = 0; j < 1000; j++) 
      { 
       for (int i = 0; i < 100; i++) 
       { 
        sha1.ComputeHash(fileNames[i]); 
       } 
      } 
      stopWatch.Stop(); 
      Console.WriteLine("Total: {0}", stopWatch.Elapsed); 
      Console.WriteLine("Time per hash: {0}", new TimeSpan(stopWatch.ElapsedTicks/100000)); 
     } 

Total: 00: 00: 00,5186110 Temps par hachage: 00: 00: 00,0000014

+0

Affiche utilise PHP, pas C# –

0

hashs sont extrêmement rapide, en particulier pour les petites entrées (telles que le nom et la version d'un fichier).

Maintenant, si vous Hashage les fichiers eux-mêmes, et ils étaient très grandes, ce serait une autre histoire (tout simplement parce que cela prendrait tant de temps pour lire le fichier entier à partir de disque) Vous