繁体   English   中英

将10位数的char用户ID分配给1000个服务器中的1个

[英]Assign 10-digit char user ids to 1 of 1000 servers

寻找分片数据库,并根据他们的用户ID将不同的用户分配给不同的家庭服务器。 用户ID是10个字符串,例如“ f4gKUKkj91” ...每个服务器的ID为1-1000。如何在php中创建哈希函数以唯一且一致地将每个用户ID分配给特定的分片? 如果用户ID是整数,则可以执行userid % 1000 ...,但是由于它们是字母数字,所以我不确定如何在php中均匀分配。

谢谢!

您可以使用crc32()为您提供字母数字用户ID的数字哈希。

这不是一个完美的算法,因为对于较小的ID号会有一点偏爱。 可以这么说,它假设用户ID分布均匀。 如果不是,则分布可能不好。

弄清楚您的字母是什么,并将其放在$str = '0123456789abcdefghijklmnopqrstuvwxxyzABCDEFGHIJKLMNOPQRSTUVXYZ';这样的字符串中$str = '0123456789abcdefghijklmnopqrstuvwxxyzABCDEFGHIJKLMNOPQRSTUVXYZ'; 该字符串包含n个字符。 现在,我们基本上将用户ID视为基数n整数。

对于每个字符,在字符串(从0开始)中找到其索引。 取该索引并乘以n x ,其中x是原始字符串中字符的位置,从0开始。将所有这些加在一起,然后求和。

您可能只想对几个字符执行此操作-阅读了几个字符后,总和就变得很大,PHP不能正确处理它,除非您诉诸使用适合于大整数数学的函数(当然可以使用GMP之类的方法,但对于您的情况可能并不理想)。 如果使用本机整数,请在最大可能和超过2 ^ 31(n x + n x + 1 + ... + n)之前停止。

您可以使用从头开始或后退(后退对应于通常的整数符号)。 其中一种可能更适合,具体取决于ID生成的工作方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM