关于订单号生成的几张方案探讨

废话少说,直接切入主题!

场景:每天新增订单数量在百万级,订单表分库分表存放。订单号必须是数字。


方案一:业务号+年(年份后两位)+月+日+订单数。核心逻辑,新建一张订单表维护每天的订单新增数量,生成订单时,从表中查询到订单数,组合上面的其他几项行成新的订单号码。


方案二:新建一张全局订单表,存放一个自增的id字段,每次生成订单号时候,在全局订单表中插入一条记录,使用id作为新订单的订单号。


以上两中方案都能解决在分库分表的情况下保证订单号的唯一性,但是每次生成订单号的时候都需要去一张表中插入(更新)一条记录。在高并发下会存在性能瓶颈问题。


方案三:在方案二的基础上修改。使用100(table_num)张表作为订单号生成表。根据一定规则,去其中一张表中去生成一个订单号。比如:根据用户id(uid)和表数量取模得到目标表。然后在目标表中插入一条记录得到自增长的id将得到这个id*表的数量+(用户id%表数量)得到最终的订单号。order_no = (uid % tale_num) * table_num + (uid % table_num)。有点,将单表的操作分散到多张表中,提高了系统的并发能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值