有数百万个用户帐户,我想将他们的数据分发到数据库的N个表(user_1,user_2,...,user_N)。用户帐户由3~8个字符组成。 所以,我想要一个返回表后缀的函数,如
int getTableSuffix(String userAccount);
结果是从1到N的均匀分布。
你知道这项工作的廉价哈希算法吗?
答案 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
我建议使用数据库的内置分区功能(如果有)。