高并发下的订单号设计规则

5,647 阅读3分钟

实际数据

以下是淘宝的实际的交易数据。

支付订单号

实际数据
支付宝交易号:20180701 2100100112 0555709512
支付宝交易号:20170924 2100100112 0275850112


格式
1.日期:年月日 //6位
2.固定数据 //10位
3.变化数据 //10位


长度
总共26位


特点
比订单号长很多

订单号

实际数据
订单编号:169307238912 880512
订单编号:61820557812 880512


格式
后6位:用户id


长度
以前17,后来18 //早期更短,12 13 14 16,是一步一步变长的

物流订单号

实际数据
物流公司: 韵达快递
运单号: 3967967825112

物流公司: 中通快递
运单号: 455455326212

长度

不是越长越好,1.因为越长,存储越麻烦2.产品层面,用户体验不好,很多产品很多业务很可能需要手动输入订单号查询数据。比如,客服。快递。

总结

有意思,你看发展历史。就知道为什么要这么设计订单号?然后,再结合实践,就是实际的各大电商平台的订单号生成规则。


几个原则
1.尽量短,因为技术存储和用户体验
2.尽量有意义,即包含业务字段,因为用户体验


哪怕是淘宝 京东,他们的订单号,也是包含了商家号,同一个商家的并发数据,并没有那么高。支付的时候,同一个商家,一般没有这么高的并发量。除非是秒杀库存,还有京东自己的自营商品,并发量可能比较大。就算是同一个商家的并发量很大,还可以加入用户id字段。

设计规则

字段
1.日期:年月日时分秒 //14或8(只要日期)位
2.随机数字 //6或2位
3.商家id //哪个商家的数据
4.用户id //哪个用户的数据。取后4位
5.商品id
6.业务id字段 //支付通道
7.其他唯一id字段


规则
1.根据业务需求,组合以上字段。技术和产品沟通,确认最终需要的字段。
2.位数。根据需要选择不同的位数。

并发

其实加了年月日时分秒,商家id,用户id,之后,就基本上不会有并发问题了。因为1s内,同一个商家的数据不会很多,就算很多,同一个用户在1s内也只有一次请求。所以,不同用户的操作,基本上不会有订单号重复的问题。哪怕就算是系统的并发量很大。

参考

www.zhihu.com/question/19…

www.jianshu.com/p/544ab3d60…