我根据原始文件名及其版本的摘要存储了几个版本的文件,如下所示:
$ filename = sha1($ original。':'。$ version);
将memcache中的摘要($ filename)作为键/值对(密钥是原始+版本并将sha1散列值)缓存,或者足够快地生成摘要(为高)是否值得交通php web app)?
谢谢,
乔纳森
答案 0 :(得分:2)
你最好不要缓存哈希。在短文件名上计算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
答案 1 :(得分:0)
哈希非常快,特别是对于小输入(例如文件的名称和版本)。
现在,如果您自己对文件进行哈希处理,并且它们非常大,那将是一个不同的故事(仅仅因为从磁盘上读取整个文件需要很长时间)