怎样保证生成10位唯一订单号?
订单号规则
第1位随机1-9;
第2位,我自己在程序中根据业务指定;1,2,3,4,5,6,7,8,9
剩下的3-10位都随机。
怎样保证唯一性呢?
我有一个办法,就是每次生成之前,先随机一把,然后去订单表里面查一下是否有重复的,有就再随机一把,再查,直到没有一样的,然后在保存订单到数据库。
这种效果咋样,数据多了,是不是影响性能。订单表最多允许500万数据吧,用户20万。web金融业务,用户不是长期在线那种,每天每个用户也就平均登陆5次。
系统只保存最近3个月订单,多了就转移到一个历史数据里面,不让订单表无限扩大。
现在纠结的是这样做,会不会很影响性能?目前没更好的想法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
业务编号1-9 + 时间戳 + 用户id
一个用户在某个业务某一秒内只能一下一单,并且不会出现重复
最好就是不要随机,要制定一个规则。
第一位代表什么,后面几位代表什么,并且保证新订单号有某种形式的自增来避免重复。
可以搜一下订单号的生成规则,会有些启发的。
会影响性能,因为你的查询次数不可预料。随着写入的订单数越来越多,生成的订单ID的冲突概率也越来越高
建议用时间戳+自增数字+随机数的方式来填充剩下的3~10位,类似于Snowflake算法的思路