2010-03-31 2 views
1

Я храню несколько версий файла на основе дайджеста исходного имени файла и его версии, например:Результат кэша SHA1?

$ filename = sha1 ($ original. ':'. $ Version);

Стоит ли кэшировать дайджест ($ filename) в memcache как пару ключ/значение (ключ, являющийся исходной + версией и значение хэш-файла sha1), или генерирует дайджест достаточно быстро (для веб-приложение с высоким трафиком php)?

Спасибо,

Johnathan

+1

Хэш-алгоритмы предназначены для быстрого (а также безопасного). Я предполагаю, что вы будете в действительно хорошей форме, если производительность вашего веб-приложения ограничена скоростью вычисления хэша. Теперь, если вы вычисляете сотни из них для каждого запроса, это другая история ... –

+0

Я также укажу, что если вы используете какой-либо TLS/SSL для подключения к вашему веб-приложению, что веб-сервер уже делая много хэширования, возможно, с SHA1 и на гораздо более длинных входах, чем имена файлов. –

ответ

2

You» гораздо лучше не кэшировать хеши. Вычислительные 100000 хэш на короткие имена файлов занимает около 1/2 секунды на моем ноутбуке (достаточно быстрый Core 2 Duo):

 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)); 
     } 

Всего: 00: 00: 00,5186110 Времени на хэш: 00: 00: 00,0000014

+0

Плакат использует PHP, а не C# –

0

Хэши чрезвычайно быстро, особенно для небольших входов (например, название и версию файла).

Теперь, если вы хеширование самих файлов, и они были очень большими, что бы другая история (просто потому, что она так долго, чтобы прочитать весь файл с диска)

Смежные вопросы