使用散列函数进行ID是一种很好的做法吗?

时间:2018-03-11 11:27:57

标签: java hash

我有一个文件列表,我必须放在没有提供序列的DB中。此DB具有ID(VARCHAR 256)列,该列必须是唯一的。

我想知道我是否能以这种方式处理我的身份证件:

hash(/completepathtofile/filename + creationdate) --> ID

文件路径对每个文件都是唯一的,而创建日期允许我甚至拥有不同日期的同一文件的副本,以便支持某种版本控制。

我的想法是将此连接赋予哈希函数以生成ID。 如果发生碰撞,我会以这种方式回退:

hash(/completepathtofile/filename + creationdate + random salt) --> NEW_ID

这是一个好习惯吗?是否有任何推荐的算法可供使用?

显然,最重要的是在保持合理的性能速度的同时最小化冲突的算法。

1 个答案:

答案 0 :(得分:1)

您只需创建一个通用唯一标识符(UUID)

https://en.wikipedia.org/wiki/Universally_unique_identifier

  

因此,任何人都可以创建一个UUID并使用它来识别某些内容,这些内容几乎可以确定标识符不会复制已经或将要创建的标识符以识别其他内容。因此,独立方标记为UUID的信息可以稍后组合到单个数据库中,或在同一信道上传输,而无需解决标识符之间的冲突。