【发布时间】:2023-03-22 14:52:01
【问题描述】:
我需要生成一个哈希值,用于 Java 中数十亿条记录的唯一性。麻烦的是,我只有 16 个数字可以玩。在研究这一点时,我发现了 32 位散列算法,它返回 Java 整数。但这太小了,因为它只有 +/ 20 亿的范围,并且会有更多的记录。我无法使用 64 位哈希,因为这会给我返回太大的数值(+/4 quintillion,或 19 位)。麻烦的是,我正在处理一个强制我使用 16 位静态密钥长度的遗留系统。
建议?我知道没有哈希函数可以保证唯一性,但我需要一个适合这些限制的好函数。
谢谢
【问题讨论】:
-
您打算如何存储数据?所有记录都会存储在内存中(如果您有足够的内存来执行此操作)还是会实现分页到磁盘或类似的东西?如果您确实使用页面/存储桶,则可以为每个存储桶使用不同的 32 位哈希函数。
-
您能否澄清一下是 16 位数字(如小于 9999999999999999),还是 16 位数字(如 16 个字母数字字符)?您可以将数字另存为数字以外的数字(例如十六进制或基数 36)吗?
-
Goldy locks 说“48 位刚刚好”。我找的不是很多,但是快速的谷歌搜索给出了一些其他的点击,所以可能存在。
-
而且,不是散列,而是自动增加的主键呢?
-
您搜索数字的正确单词不是numeric,而是decimal。
标签: java hash md5 apache-commons uniqueidentifier