将用户帐户分配到N个表

时间:2009-05-05 13:03:40

标签: algorithm hash distribution

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

  int getTableSuffix(String userAccount);

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

你知道这项工作的廉价哈希算法吗?

2 个答案:

答案 0 :(得分:1)

您可以获取前1-3个字符的ascii值,并找到这些字符的产品,以便返回您的号码。

或者,您实际上可以将这些字符用作表格前缀,例如。 Users_AA,Users_AB等

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

答案 1 :(得分:0)

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

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

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

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

table = hash % count

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