使用NoHashHasher的风险

at5*_*321 6 performance hashmap rust

Rust 的默认HashMap哈希器是SipHash,在某些情况下(例如,对于整数)速度要慢得多,但它提供了 HashDoS 保护。如此处所述,它NoHashHasher比默认哈希器快 50 倍,比 FNV 和 FX 哈希器快 10-20 倍(当然,并不总是如此,但在某些情况下,就像那里描述的那样)。

根据我个人的经验,我很少需要针对 HashDoS 攻击的额外保护。例如,如果我将数据库 ID 作为键,并且这些 ID 是基于自动增量的,那么我确实认为那里没有太大风险。尽管如此,我知道有充分的理由将更安全的哈希器作为默认值(安全总比后悔好)。

因此,当我们知道我们不会面临任何 HashDoS 攻击的风险并且需要使用 64 位或更小的整数作为密钥时,是否有任何理由不使用NoHashHasher?显然,性能并不总是更好,而且很明显在某些情况下它甚至可能比 FNV/FX 哈希器表现更差。我特别询问的是在链接问题中描述的情况下需要遵循的不明显的风险、缺点或特殊规则,在这些情况下,很明显NoHashHasher表现出出色的性能。