来自字符串的Python最短唯一ID

时间:2012-06-19 06:18:30

标签: python md5 hashlib

我有超过1亿个唯一字符串(MySQL数据库中的VARCHAR(100)UNIQUE)。现在我使用下面的代码从它们创建唯一的哈希值(VARCHAR(32)UNIQUE)以减少InnoDB表的索引大小(varchar(100)上的唯一索引大约是varchar(32)字段的3倍)。

id = hashlib.md5(str).hexdigest()

还有其他方法可以从这些字符串中创建更短的ID并做出合理的唯一性保证吗?

4 个答案:

答案 0 :(得分:5)

您可以将其保存为整数:

id_ = int(hashlib.md5(your_str).hexdigest(), 16)

或者作为二进制字符串:

id_ = hashlib.md5(your_str).digest()

答案 1 :(得分:3)

一种粗暴的方式可以是,你可以做md5,然后从它中选出前16个字符,而不是全部32个。碰撞仍然不会那么高,你将有合理的唯一性保证。

答案 2 :(得分:2)

最简单的解决方案是将十六进制数据(yor摘要的基数为16)转换为其他数据,例如。以64为基础。

如果您同意某种程度的高风险,则只能使用例如摘要的前十位(十六进制)。它会为您提供16**10(超过10**12)种可能性而不是16**32(超过10**38),但它仍然很大并且是常用的技术(Git和Github)通常使用7位数来识别提交,直到。)

答案 3 :(得分:0)

由于散列和压缩非常相似,显而易见的解决方案是使用压缩算法来压缩密钥。这也将保留键的唯一性。