比如把 users 用户表分为 100 个表,users_1 ~ users_100,可以根据 userid 进行哈希,这样分成 100 张表,我们的算法是:
function hashID($id, $max)
{
$md5 = md5($id);
$str1 = substr($md5, 0, 2);
$str2 = substr($md5, -2, 2);
$newStr = intval(intval($str1 . $str2, 16));
$hashID = $newStr % $max + 1;
return $hashID;
}
参数 $id ,就是分表的字段,如 userid,$max 是分成多少张表。
为什么不直接 userid%100+1 这样获取分表呢?分布也是比较均匀的吧,为什么要采用如上的函数,各位业务中分表的算法是怎样的?
少用% 取模 扩展表的话就蛋疼了