gpt4 book ai didi

java - 对于长度 < 255 个字符的字符串,哪个哈希函数具有最小冲突且相对足够快?

转载 作者:行者123 更新时间:2023-12-01 18:22:26 24 4
gpt4 key购买 nike

我们获得交易 ID 长度小于 255 个字符的交易数据,并且始终是唯一的。

但这里的限制是我们不允许将事务 ID 存储在数据库中。

因此,为了唯一地标识交易,我们想到使用哈希 fn 来生成使用交易 id 作为输入的哈希。

因此,我们不会保存重复的事务,因为它会损坏我们想要计算的元数据。例如:平均值、标准差等。

对于大量交易数据进入系统,您会推荐哪个哈希 fn 具有较低的冲突概率且足够快?

我所说的“足够快”是指在 < 100 ns 内生成哈希。

此交易数据的提供者没有遇到同样的问题,因为他们是生成者,而我们是第一个消费者。

我还在 StackOverFlow 上查找了一些答案,这些答案表明 SHA-512 在 64 位系统上比 SHA-256 快一点。

另外,有没有更好的方法来解决这个问题?

谢谢

最佳答案

不要(ab)为此使用哈希函数。散列对于保护密码或散列映射很有用,在散列映射中,您有一个辅助标准来验证对象实际上是您期望的对象。但是使用哈希作为大概唯一的 key (当不能保证唯一时)本身就有风险。

正如最近提到的,SHA256 冲突的可能性非常小,因此您可以以较低的风险这样做。

因为哈希函数不能(也永远不能)保证绝对不冲突,所以可能有替代方案。

问题:可以存储交易时间戳吗? - 如果是这样,您可以将时间戳与数字后缀结合起来,以获得内部 ID(与您最初拥有的交易 ID 不同)。就唯一性而言,这比哈希要优越得多。它具有速度极快的优点。但是您必须将该后缀与原始对象一起存储才能重现此内部 id。

本质上,您需要的是一个函数,用于根据允许存储的属性从事务对象中确定(明确的)唯一键。假设您可以存储时间戳和数字后缀,以下示例是一个可能的解决方案。

如果你遇到时间戳冲突,你可以增加数字后缀,这样你就会得到:

2020-02-18-14-26-15-420-0 (postfic here is -0)
2020-02-18-14-26-15-420-1 (postfic here is -1)
2020-02-18-14-26-15-420-2 (postfic here is -2)
2020-02-18-14-26-15-423-0 (postfic here is -2)

这里有一些交易同时到达。然而,它们仍然是唯一可识别的。

关于java - 对于长度 < 255 个字符的字符串,哪个哈希函数具有最小冲突且相对足够快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60281864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com