V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhuoyue100
V2EX  ›  问与答

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

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


    @zhuoyue100 京东的订单号有可能不是自增,但返修单号更短,更像是自增。也许可以先算好再存入数据库吧,每次要创建新订单时先获取数据库中最后一个订单号,在此基础上加上一个随机数,比如加一个 1000 以内的随机数,再存入数据库。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5820 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 01:59 · PVG 09:59 · LAX 17:59 · JFK 20:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.