我正在根據原始文件名及其版本的摘要存儲幾個版本的文件,如下所示:緩存SHA1摘要結果?
$ filename = sha1($ original。':'。$ version);
將memcache中的摘要($ filename)緩存爲鍵/值對(關鍵字是原始+版本並賦值sha1哈希值),還是快速生成摘要(對於高流量的PHP網絡應用程序)?
謝謝,
喬納森
我正在根據原始文件名及其版本的摘要存儲幾個版本的文件,如下所示:緩存SHA1摘要結果?
$ filename = sha1($ original。':'。$ version);
將memcache中的摘要($ filename)緩存爲鍵/值對(關鍵字是原始+版本並賦值sha1哈希值),還是快速生成摘要(對於高流量的PHP網絡應用程序)?
謝謝,
喬納森
你」沒有緩存哈希好得多。在我的筆記本上計算短文件名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:00:每個哈希00.5186110 時間00.0000014
海報使用PHP,而不是C# – 2010-04-01 14:10:53
哈希是極其快,特別是對於小輸入(例如名稱和文件的版本)。現在
,如果你是散列文件本身,他們是非常大的,這將是一個不同的故事(僅僅是因爲它會需要很長時間來讀取從磁盤整個文件)
散列算法被設計爲快速(以及安全)。我的猜測是,如果你的網絡應用程序的性能受計算散列速度的限制,你的狀態會非常好。現在,如果您按照每個請求計算數百個這樣的數據,那麼情況就不一樣了...... – 2010-03-31 03:18:23
我還要指出,如果您使用任何類型的TLS/SSL連接到您的Web應用程序,並且Web服務器已經做大量散列,可能使用SHA1,並且輸入的文件比文件名要長得多。 – 2010-03-31 17:39:18