固定分片hash规则
在一些需要批量插入连续记录的交易中,如果使用普通的取模算法进行分片的话,很容易造成跨库事务,俾如下面的极端例子
user_id以10进行取模分片,在批量插入user_id为10010~10019的记录时,
user_id=10010的记录,10010 mod 10等于0,路由到分片0上
user_id=10011的记录,10011 mod 10等于1,路由到分片1上
……
如此类推,这10条记录被分配到10个不同的分片上,形成了一个复杂的跨库事务
这种跨库事务的复杂度,会伴随模数的增加、需要处理的连续记录的增多,而变得更加非常难以控制。另外,由于分配(插入)记录时就发生了上面的情况,后面的读取、更新和删除这些连续记录也必然会产生跨库事务。
相对于普通取模算法,此算法提取分片索引字段二进制值的低10位,来进行取模,然后再利用其它部分进行分片——这样能尽量将低10位相近的记录分到同一分片中,从而减少了上述的跨库事务问题的 发生概率 。
网友评论