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

jac*_*ack 5 python md5 hashlib

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

id = hashlib.md5(str).hexdigest()
Run Code Online (Sandbox Code Playgroud)

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

sim*_*izz 6

您可以将其保存为整数:

id_ = int(hashlib.md5(your_str).hexdigest(), 16)
Run Code Online (Sandbox Code Playgroud)

或者作为二进制字符串

id_ = hashlib.md5(your_str).digest()
Run Code Online (Sandbox Code Playgroud)


Hri*_*esh 3

一种粗略的方法是,您可以执行 md5,然后从中选择前 16 个字符,而不是全部 32 个。冲突仍然不会那么高,并且您将获得合理的唯一性保证。