水平分表后,某条数据具体属于哪个切分后的子表,需要增加路由算法进行计算。
常见的路由算法有如下几种:
1)范围路由
以最常见的用户ID为例,路由算法可以按照1000000的范围大小进行分段,1~999999放置于数据库1的表中,1000000~1999999放到数据库2的表中,以此类推。
优点: 随着数据的新增可以平滑地扩充新的表。缺点是分布可能不均匀。
2)Hash路由
选取某个列(或者某几个列的组合)的值进行hash运算,然后根据Hash的结果分散到不同的数据库表中。同样以用户ID为例,假如一开始规划了10个数据库表,路由算法可以简单地用user_id%10的值来表示数据所属的数据库表编号。
缺点:增加子表数据非常麻烦,可能所有数据都需要重分布。
3. 路由配置
用一张独立的表来记录路由信息
缺点:多查询一次,会影响整体性能;如果路由表本身如果太大,性能同样又成为瓶颈,面临死循环式的路由算法选择问题。