php hash分表实现方法
/**
* $string 分表使用的字段
* $tab_count 表数量
**/
static public function getStringHash($string, $tab_count)
{
$unsign = sprintf('%u', crc32($string));
if ($unsign > 2147483647) // sprintf u for 64 & 32 bit
{
$unsign -= 4294967296;
}
return abs($unsign) % $tab_count;
}
简要来说就是对$string(比如用户表的userid)做crc32的hash计算,crc32计算结果为一个10进制数,在不同bit位的操作系统下,得到的值可能会不同,所以对其进行统一的处理,然后对这个自然数进行取余计算,取余的除数就是你的分表数,比如这里为100。
这样我们就得到了一个在0-99以内的表后缀数index,然后拼接固定的表前缀user_,得到完整的分表表名user_index
之后的操作和不分表情况下的写库操作一致,将数据插入到对应的表中即可。
原文链接:https://blog.csdn.net/dengjiexian123/article/details/53860948