一般常用的订单 ID 怎么生成比较好?

2023-09-07 18:31:11 +08:00
 zhuoyue100
  1. 纯数字好一些还是英文数字混合好一些
  2. 需不需要直观显示日期,比如 xxxxx20230907xxx 这种
  3. 需不需要和订单所属用户关联,比如用户 ID 后 4 位数和订单 ID 后四位一样
  4. 我们目前是用雪花算法生成的 17 位数纯数字 ID ( 41 位时间戳+3 位机器码+12 位随机数) 56 位二进制保证订单 ID 长度为 17 位,可以列出一些场景配合说明一下你是怎么做的嘛?觉得最理想的订单 ID 生成方式应该是怎么样的?我还见过 9 位纯数字的,不知道是怎么实现的
1704 次点击
所在节点    问与答
11 条回复
brader
2023-09-07 18:33:12 +08:00
我们肯定是越长和字符集越多越容易随机和生成效率高,可是老板希望越短越好。。。
zictos
2023-09-07 18:49:35 +08:00
数据库 id 自增就好了,纯数字。
京东的订单号也不是很长。
lovedebug
2023-09-07 18:52:38 +08:00
有带时序的 UUID 算法
lecher
2023-09-07 18:57:36 +08:00
请考虑以下场景
1. 订单出问题了,客户通过电话能不能正确报出订单号进行处理
2. 订单传递的时候有没有数值转换导致精度丢失的情况
3. 只看订单号,不额外查询任何数据,能从订单号中获得什么信息,哪些信息是用户关心的,哪些是客服关心的,哪些是研发人员关心的
4. 订单的生成的真实 qps 诉求是多少,通过什么方式可以在保证一致性的前提下增加生成的 qps
haython
2023-09-07 19:01:30 +08:00
还有一点,不能让人根据单号猜出每天的单量
kkk9
2023-09-07 20:10:24 +08:00
@zictos #2 自增 id 作为订单号认真的吗……
zictos
2023-09-07 20:27:22 +08:00
@kkk9 #6 我不知道,不清楚怎样才是合适的,一般规模小的需求每天也没多少订单的吧?应该比较随意。我不认为楼主是那种很大规模的商城之类的需求。
另外像京东的订单号是 12 位数字,好像也看不出有什么意义,而且是从小到大来的。京东还有售后单号之类的,基本也是很简短的数字。
wordpress 的文章 id 一般也是使用自增 id ,我觉得这个 id 也是很重要的,一旦定下来就不建议轻易改的,不然影响搜索引擎收录。还有很多商城的商品 id ,也是按顺序来的,这个不知道是不是自增的。
giaodadi
2023-09-07 20:29:19 +08:00
订单和用户关联能大幅避免重复
zhuoyue100
2023-09-08 09:43:43 +08:00
@zictos 京东这种比较短的纯数字是怎么生成的?预先生成好存到数据库,用的时候在取?还是设置自增起始数值+步长?还是有别的算法生成?
kkk9
2023-09-08 11:19:20 +08:00
@zictos #7 商品 ID 是 SKU ,按顺序不要紧。订单 ID 不能连续性,会暴露日单量,就可以推算出很多商业机密了
zictos
2023-09-08 13:25:49 +08:00
@kkk9 我觉得即便是京东也不是很在乎会不会暴露,因为每天都有大量的下单又未付款的。


@zhuoyue100 京东的订单号有可能不是自增,但返修单号更短,更像是自增。也许可以先算好再存入数据库吧,每次要创建新订单时先获取数据库中最后一个订单号,在此基础上加上一个随机数,比如加一个 1000 以内的随机数,再存入数据库。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/971823

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX