Кэш SHA1 переварить результат? - PullRequest
1 голос
/ 31 марта 2010

Я храню несколько версий файла, основанных на дайджесте исходного имени файла и его версии, например:

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

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

Спасибо

Johnathan

Ответы [ 2 ]

2 голосов
/ 31 марта 2010

Тебе гораздо лучше не кэшировать хеши. На моем ноутбуке вычисление 100 000 хэшей для коротких имен файлов занимает около 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 голосов
/ 31 марта 2010

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

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

...