【服务器开发系列】订单号生成策略

简介: 订单是整个电子商务的核心,整个电子商务的流程也是围绕订单展开的;本文与大家分享一下各大电子商务网站订单号的生成方式。


1
订单号是什么?


它是您在购物网站购物后获得的订单号,记录的是购物订单信息;在您需要与购物网站进行订单查询等操作时,需要给购物网站提供商家订单号。


2几种常见下单途径?


  1. Web网站下单。
  2. 打电话到呼叫中心(CallCenter)下单
  3. 手机Wap下单。


如果采用常见的单数据库来存储的话,随着订单量的增加,单库的写压力增大,造成数据库服务器性能下降。一般会采用分库来缓解数据库服务器的压力。


有的同学可能会问:怎么来进行分库呢?


Web来源订单,存入Web订单库;CallCenter来源订单,存入CallCenter订单库;Wap来源订单,存入Wap订单库;最终,将这三种类型的数据库同步到订单主库中。


那么,问题来了,怎么把不同的订单同步到订单主库呢?


这里就引出了文章的主题订单号。电商网站一般利用订单号来作为订单表的主键;因此,我们必须保证订单号不重复,才能将订单安全的同步到订单主库中。


3订单命名规定


  • 唯一性


这个大家都明白,主要保证订单号不重复。


  • 安全性


订单编号不能透露你公司的真实运营信息,比如你的订单就是流水号的话,那么别人就可以从订单号推测出你公司的整体运营概括了。所以订单编码必须是除了你们公司少部分人外,其他人基本看不懂的。可以参考京东和淘宝的编码规则。


  • 不能使用大规模随机码


因为大规模的随机码随机生成,因为本身就没有意义所以无所谓泄密了。但是事实上这种编码规则在实现上会有很大问题的。随机码满足第二点安全性要求,为了满足唯一性,那就得在生成随机码的时候对比历史数据是否有重复,如果你的订单数量到达了十万次,你每次生成订单编码时就得对比十万条历史数据。


这里有同学可能会问:随机码就不能在编码中使用了吗?


小规模的随机码是可以使用的,比如2~3位,这种随机码一般都是和流水号等结合使用,主要作用是为了隐藏流水号的真实数据而进行使用的。


  • 防止并发


主要针对编码中有时间的设定。


  • 控制位数


订单号的作用就是便于查询。一般正常使用场景应该是订单出异状或者退货的时候,用户将订单号报给客服,由客服进行查询。所以一般在10~15位为好。目前京东11位,淘宝16位。


4怎么保证订单号的唯一性?


作者在此,提供两种思路供大家参考。


  • 订单号命名规则来生成


比如:业务编码 + 时间戳 + 机器编号[前4位] + 随机4位数 + 毫秒数


说明:业务编码(OrderType: Web=1 CallCenter=2 Wap=3) 机器编号(用来表示由那台服务器生成的订单)


见伪代码,如下:


import org.apache.commons.lang3.RandomStringUtils;
public static String genOrderNo(OrderType type){
    Date curDate = new Date();
    String orderType = getType(type);
    String dateStr4yyyyMMddHHmmss = new SimpleDateFormat("yyyyMMddHHmmss").format(curDate);
    String dateStr4SSS = new SimpleDateFormat("SSS").format(curDate);
    String random = RandomStringUtils.random(4,false,true);
    String machineCode = getMachineCode().substring(0,4);
    return orderType+dateStr4yyyyMMddHHmmss+machineCode+random+dateStr4SSS;
}


技术上没有一本万利的方法,这种方法也有缺点的,这种方式在高并发下会频繁更新订单量记录表,很容易产生锁表。但是锁表问题也是可以解决的,加一层缓存。


  • 全局订单号数据池来生成


数据库创建一个订单号数据库表(order_id_generator);利用python脚本生成一批订单号,将这批订单号存入到order_id_generator表中。生成订单时,会首先调用事务GET_ORDER_ID_FOR_REGISTER,获得当前订单号,再生成订单。这样就保证了子库订单号不会重复。


数据库代码如下:


CREATE TABLE `order_id_generator` (
  `RANDOM_VALUE` bigint(20) NOT NULL,
  `ORDER_ID` int(11) NOT NULL,
  PRIMARY KEY (`RANDOM_VALUE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP PROCEDURE IF EXISTS `GET_ORDER_ID_FOR_REGISTER`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `GET_ORDER_ID_FOR_REGISTER`()
BEGIN
    declare userMid int default 0; 
    declare randomValue bigint default 0;
    start transaction;
        select ORDER_ID, RANDOM_VALUE into orderId, randomValue from order_id_generator limit 1 for update;
            if userMid > 0 then
                delete from order_id_generator where RANDOM_VALUE = randomValue;
            end if;
    commit;
    select orderId from dual;
END
;;
DELIMITER ;


伪代码如下:

/**
 * 得到一个订单号。
 *
 * @return
 */
Long getIdForOrder();

总结:订单号的生成方案,需要根据目前的订单量而定;因为任何方案都有自己特定的业务场景。

相关文章
|
存储 分布式计算 监控
阿里云服务器实例经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i详解与选择策略
在阿里云现在的活动中,可选的云服务器实例规格主要有经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例,虽然阿里云在活动中提供了多种不同规格的云服务器实例,以满足不同用户和应用场景的需求。但是有的用户并不清楚他们的性能如何,应该如何选择。本文将详细介绍阿里云服务器中的经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例的性能、适用场景及选择参考,帮助用户根据自身需求做出更加精准的选择。
|
存储 机器学习/深度学习 人工智能
2025年阿里云GPU服务器租用价格、选型策略与应用场景详解
随着AI与高性能计算需求的增长,阿里云提供了多种GPU实例,如NVIDIA V100、A10、T4等,适配不同场景。2025年重点实例中,V100实例GN6v单月3830元起,适合大规模训练;A10实例GN7i单月3213.99元起,适用于混合负载。计费模式有按量付费和包年包月,后者成本更低。针对AI训练、图形渲染及轻量级推理等场景,推荐不同配置以优化成本和性能。阿里云还提供抢占式实例、ESSD云盘等资源优化策略,支持eRDMA网络加速和倚天ARM架构,助力企业在2025年实现智能计算的效率与成本最优平衡。 (该简介为原文内容的高度概括,符合要求的字符限制。)
|
弹性计算 安全 数据库
【转】云服务器虚拟化内存优化指南:提升性能的7个关键策略
作为云计算服务核心组件,虚拟化内存管理直接影响业务系统性能表现。本文详解了内存优化方案与技术实践,助您降低30%资源浪费。
519 0
【转】云服务器虚拟化内存优化指南:提升性能的7个关键策略
|
弹性计算 安全 Linux
阿里云服务器镜像解析:镜像类型对比、适用场景与选择策略参考
阿里云服务器镜像,作为ECS实例的“装机盘”,不仅提供了操作系统,还包含了初始化应用数据和预装软件,云服务器镜像的选择对于云服务器的性能和稳定性起着至关重要的作用,选择合适的镜像对于云服务器的性能和稳定性至关重要。本文将深入解析阿里云服务器提供的多种镜像类型,从公共镜像到社区镜像,全面介绍每种镜像的特点、优势以及选择建议,帮助用户根据自身需求做出适合自己的选择。
1552 12
|
存储 机器学习/深度学习 算法
阿里云X86/ARM/GPU/裸金属/超算等五大服务器架构技术特点、场景适配与选型策略
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别。本文将深入解析这些架构的特点、优势及适用场景,帮助用户更好地根据实际需求做出选择。
|
存储 人工智能 监控
新手小白购买阿里云服务器省钱策略、配置选型与注意事项
针对初次使用阿里云服务器的用户,本文提供系统化的指导方案以优化成本并满足业务需求。首先介绍配置选型,包括实例类型(通用型、计算型、内存型)与基础配置建议;其次阐述省钱策略,如企业认证、合理选择计费模式及批量购买;最后提醒注意事项,涵盖带宽存储规划、地域网络优化及安全管理。新手可通过明确需求、选择配置、优化购买和持续监控四步快速上手,实现高效稳定的云端部署。 注:推荐配置基于2025年阿里云产品体系,具体信息请参考官网。
|
存储 弹性计算 安全
阿里云服务器配置选择策略参考及后期使用注意事项
对于初次购买阿里云服务器的一些新手用户来说,在云服务器配置选择和后期使用过程中有一些不清楚的地方,小编分享几点阿里云服务器配置选择策略,以及后期使用注意事项,购买过程中注意好下面这些事项,能让我们选对选好阿里云服务器,购买之后,在使用过程中,注意下面这些事项,能够让我们更好、更安全的使用阿里云服务器。下面是小编分享的一份详尽的阿里云服务器配置与使用指南,以供参考和借鉴。
|
存储 数据库 虚拟化
无缝过渡:企业级服务器迁移的策略与最佳实践
【10月更文挑战第4天】随着企业数字化转型的加速,服务器迁移成为企业IT基础设施升级的重要环节。本文从架构与规划的视角,探讨了企业级服务器迁移的策略与最佳实践,旨在帮助企业实现无缝过渡,降低迁移风险,提高迁移效率。
1155 4

热门文章

最新文章