订单表如何分库?

当订单表数据量和访问量大了之后,一般会进行分库。
假设订单表结构为order (order_id,user_id,create_time),数据库分库数量为N。

为了便于查询及性能上的考虑,一般会按user_id分库(user_id 取模 N)。
主要问题是:根据订单ID(order_id)查询订单时,如何知道订单在哪个分库上?

方法1:建一个order_id到user_id的映射表order_map(如果有需要按order_id进行分库)
查询流程:根据order_id到order_map查询user_id,然后根据user_id % N计算分库编号,再到order表中查询订单。

方法2:分库基因法
根据user_id % N计算出订单的分库编号,混入订单ID中(如追加到末尾,固定长度,不足前面补0)。
查询流程:将order_id中的分库基因取出来(如后2位),再根据分库编号到order表中查询订单。
展开
jsam于2020-03-24 10:56发布的图片
评论