不懂就问:如何正确设计一个订单号?

目前可能主要是考虑体量大了,查询索引优化问题。大牛们你们各家都是咋做的?
参考: 如何正确设计一个订单号???

目前可能主要是考虑体量大了,查询索引优化问题。大牛们你们各家都是咋做的?
参考: 如何正确设计一个订单号???
一天生成好几千万的单号没问题
如果不需要特别的意义,只需要是唯一 ID,那么雪花算法挺好的,正常情况下也不会改服务器时间。查询效率和数据库自增差距不大。
只要存储类型是数字,且有一定的增长趋势,那么查询效率都还可以的。别往里面丢字符就行。
内部订单号需要:数字格式的纯数字,方便索引和传输;生成过程高并发
外部订单号需要:尽可能提供责任归属信息,方便任务分发;没有歧义字符(无论声、光);生成过程高并发;难以遍历;最好带校验位提供冗余信息
显然,前者本机 ID+自增 ID 完全可以承载,或者雪花;后者依赖具体情况,典型是身份证号码,每段含义明确,不是纯数字也没有关系,无论是读出来还是写出来,X 都不会造成歧义,并且最后一位是校验位提供了冗余信息错误的身份证号码可以被离线检测出来。
然后做一个显示变换,在显示给用户和用户传入到后台进行一次 encode/decode
举例:
有一个订单,创建时间 123,客户 250,主键 10000,查找范围(使用场景)是客户登录时根据单号查询订单
那么生成一个 verbose 的订单号可以=250+123+随机,当然保存的时候需要验证订单号是否已经占用
查找时验证头是否是当前客户,不匹配者订单号不合法,合法就去数据库里查即可
总的来说不需要刻意设计,因为没有订单号也没关系,订单在数据库里能调出来就行,它只是 verbose