我正在开发一个搜索系统的后端应用程序。搜索系统将文件复制到临时目录并随机命名,然后将临时文件名传递给我的应用程序。我的应用程序必须在有限的时间内处理每个文件,否则它会被关闭 - 这是一种类似看门狗的安全措施。处理文件可能需要很长时间,因此我需要设计能够处理这种情况的应用程序。如果我的应用程序下次被关闭,搜索系统想要索引相同的文件,它可能会给它一个不同的临时名称。
显而易见的解决方案是在搜索系统和后端之间提供一个中间层。它将对请求进行排队,并等待结果到达。如果中间层中的请求超时 - 没问题,后端将继续工作,只有中间层被重新启动,并且当搜索系统稍后重复请求时,它可以从后端检索结果。
问题在于如何识别文件。它们的名称随机更改。我打算使用哈希函数(如MD5)对文件内容进行哈希。我很清楚生日悖论并使用链接文章中的估计来计算概率。如果我假设我没有超过100,000个文件,则两个文件具有相同MD5(128位)的概率约为1.47x10-29。
我应该关注这种碰撞概率,还是只假设相等的哈希值意味着相等的文件内容?
显而易见的解决方案是在搜索系统和后端之间提供一个中间层。它将对请求进行排队,并等待结果到达。如果中间层中的请求超时 - 没问题,后端将继续工作,只有中间层被重新启动,并且当搜索系统稍后重复请求时,它可以从后端检索结果。
问题在于如何识别文件。它们的名称随机更改。我打算使用哈希函数(如MD5)对文件内容进行哈希。我很清楚生日悖论并使用链接文章中的估计来计算概率。如果我假设我没有超过100,000个文件,则两个文件具有相同MD5(128位)的概率约为1.47x10-29。
我应该关注这种碰撞概率,还是只假设相等的哈希值意味着相等的文件内容?