水平分表之基因法

假设有下面的订单表,字段为order_id, uid, award,假设订单的量很大,要进行拆表

1. 需求:查询某个订单order_id的详情

        开始的时候拆分方式,按照order_id % 2的方式,进行拆分,如下图

              

        查询某个订单的详情:直接通过order_id%2,找到对应的表,就可以查到

2. 后面又新增了一个需求:查询某个用户uid所有的订单

        分析:按照上面的order_id%2的方式分表 ==> 由于相同的用户uid=101被分到了2张表,查询造成很大的困难。

        有人说,可以使用uid进行拆表,那么想查询某个uid下面的所有订单,就可以直接去某一张表查询了。

          

        ==> 分析:该方法当然可以,但是对于需求1“查询某个订单order_id的详情”,又造成了困难,因为不知道该order_id坐落在哪张表(所以,查询某个order_id的详情,就需要遍历所有的表)

------------------有没有两种查询场景都符合的分表方式呢?------------------------

基因法

1. 把uid的尾部,截取片段作为基因

2. 在生成订单号order_id的时候,传入基因,拼接成最后的订单号,即order_id = 雪花算法id + 基因 (说明,订单号order_id的生成规则要修改,即,传入uid)

3. 采用生成的订单号order_id,进行水平分表(拆分表的规则是,基因必须坐落在相同的表中)

效果:相同uid的订单号,因为有相同的后缀,一定会落到相同的表中

1. 查询每个订单详情:直接可以查询到

2. 查询每个用户所有订单:因为在同一个表中,也方便查询

         

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值