1

有数百万个用户帐户,我想将他们的数据分发到数据库的 N 个表(user_1,user_2,...,user_N)中。用户帐号由 3~8 个字符组成。所以,我想要一个返回表后缀的函数

  int getTableSuffix(String userAccount);

结果是从 1 到 N 的均匀分布。

你知道这项工作有什么便宜的哈希算法吗?

4

2 回答 2

1

您可以取前 1-3 个字符的 ascii 值并找到这些字符的乘积以返回您的号码。

或者,您实际上可以使用字符作为表前缀,例如。用户_AA、用户_AB等

但是,您使用什么数据库存储这些数据?在大多数现代数据库中,您应该不需要创建多个表来存储相同的数据。即使有数百万条记录。表上的良好索引应该足以解决您可能遇到的任何性能问题。

于 2009-05-05T13:13:50.967 回答
0

目前尚不清楚您是在寻找字符串散列函数,还是基于字符串的分区方法。

一个好的字符串散列函数使用每个字符,并考虑字符的位置。例如,djb2 使用这样的东西(伪代码):

hash = 5381
foreach (ch in str) 
  hash = hash * 33 + ch

无论您的哈希是什么,都使用模运算按表的数量进行分区:

table = hash % count

我建议使用数据库的内置分区功能(如果有的话)。

于 2009-05-05T13:52:04.993 回答