【发布时间】:2014-01-27 18:58:08
【问题描述】:
现在,我们正在寻找为某些字符串值(文件 URL)生成一些唯一且确定性的 ID。基于此链接How to Create Deterministic Guids,看起来我们可以基于 MD5 哈希或 Sha1 哈希(类型 3 或类型 5,请参阅 GUID wiki page)创建 GUID。我也在互联网上进行了一些搜索,我认为它几乎相同,基本上是基于哈希生成一个确定性的 GUID。
当我第一次看到它时,它看起来很棒,但是我仍然不愿意将它用作识别某些东西的关键。我认为一般hash是用来检查的:
- 2个字符串是否匹配,不泄露原字符串内容
- 某些字符串/文件内容是否改变
这里,即使hash值发生冲突,也不是很好,但没关系,一旦数据再次更改,它会自我纠正,不会覆盖其他不相关的数据。但是,如果我们使用哈希作为主键来识别某些数据,那么冲突将意味着我们将覆盖一些不相关的数据,一旦发生覆盖就无法自我纠正。
所以在我看来,我们应该在这里使用数据库来真正生成确定性 GUID,而不是依赖 Hash:
- 在数据库中有一个包含 2 列的表:str_val、guid_val。 str_val 是PK
- 如果我们需要为 string1 生成一个 guid,我们会尝试在表中找到记录
- 如果我们能找到指南,我们就完成了。
- 如果找不到 guid,我们会执行插入逻辑。如果插入失败,很可能是因为其他线程只插入了一个,但可能没关系,因为插入竞争很少发生。
就在我要发布我的问题之前,我看到了这个 stackoverflow 帖子:How safe is it to rely on hashes for file identification?,它使用哈希作为文件标识,接受的答案认为可以使用哈希作为密钥。再一次,我觉得我在这里仍然需要更多的说服力。
如果有人能提供更多建议,将不胜感激。
【问题讨论】:
-
请看一下这个问题,它可能会回答你的问题 [stackoverflow.com/questions/9727090/… [1]: stackoverflow.com/questions/9727090/…