业务实践系列(1):ID号(订单ID,用户ID)设计思路分析

项目中对订单号进行重新设计,参考了网上的方案加上自己的思路,根据不同的业务场景进行分析。

订单号

订单号:是给订单一个唯一的标识,通过该订单号,可以查询该订单的信息,主要是给用户、客服、后台管理等使用。

订单号设计:首先明确,所有的设计和规则都应是为业务服务而制定的;方案应适用于当前业务规模、业务类型或适应市场需求。

设计要求

订单号的设计都会有一个基本的要求。

  1. 唯一性
    不允许存在重复的可能性发生;要防止并发的情况。
  2. 安全性
    外部人员无法从订单号推测出业务相关的信息,如自增订单号可知订单量。
  3. 精简可读
    精简可读是为了能方便汇报、输入和记录。
    订单号尽可能简短,当然这是相对的,随着业务量增大,适当增加长度也是可以的;
    最好使用数字,不要使用连接符,杜绝包含特殊符号。

组成要素

订单号通常由以下几种元素的编号组成,根据场景需要进行组合; 或只取出编号中的某几位用于组合成订单号。

  1. 数据库主键自增的值
    利用数据库主键自增的值,适用于内部使用小系统;对外开放使用的系统不建议使用。
  2. 类型编号
    主要是与业务相关的编号。
    如:业务类型编号、产品类型编号、平台类型编号、终端类型编号、渠道类型编号、仓库类型编号、区域编号等。
  3. 时间信息
    如:年月日时分秒、时间毫秒值、时间戳等。
  4. 随机数
    如:按需生成固度长度的随机数,常用3到6位。
  5. 商家ID
    如:订单号包含了商家编号中的某几位。
  6. 用户ID
    如:如淘宝订单号,后6位为用户ID的某几位数字(2018年的订单号)。

开发设计

  1. 如果订单表存储使用了分表分库,那订单号的某几位数字用作分库分表规则。
  2. 如果还考虑分布式部署,其中一两位可用来标识系统部署的路由规则。
    使用专门生成订单ID的服务器,如果业务量大时,服务器部署在多台主机上,需要预留位数作为机器ID的标识。
  3. 可先预预估订单量,提前生成订单ID并存储,使用时直接来拿,做一个监控,当剩余订单号小于某个值时就再次批量生成。

现项目更改后的订单ID共18位: 3位业务类型编号+10位精确到秒的时间戳+3位用户ID+2位随机数

相关参考

业务实践系列(1):ID号(订单ID,用户ID)设计思路分析

http://blog.gxitsky.com/2018/03/07/Business-01-orderId-design/

作者

光星

发布于

2018-03-07

更新于

2023-03-07

许可协议

评论