0

对于分片,我需要好的哈希算法。我需要为 0-2^31 范围内的字符串生成哈希整数值。这可能吗 ?

以下答案给出了一种从 md5 算法生成整数的方法。

在 PostgresSQL 中将字符串散列为数值

但是有没有办法在一个范围内生成这个值?

4

1 回答 1

1

Hashing a String to a Numeric Value in PostgresSQL 中建议的函数中,32 位范围表示为强制转换的宽度bit(N)

它不能作为参数传递,因为类型修饰符必须是常量,但要获得固定的 31 位,您可以像这样调整函数:

CREATE FUNCTION hash_string_into_31_bits(text) RETURNS int AS $$
   select ('x'||substr(md5($1),1,8))::bit(31)::int;
$$ language sql;

那么结果将始终是 31 位宽和正数,这是同样的事情。

于 2014-11-12T12:37:44.053 回答