解析各大电子商务网站订单号的生成方式

摘要:订单是整个电子商务的核心。整个电子商务的流程也是围绕订单的状态执行的。这篇博客主要向大家介绍订单号的生成方式...

订单是整个电子商务的核心。整个电子商务的流程也是围绕订单的状态执行的。这篇博客主要向大家介绍订单号的生成方式。

现在大型电商网站大多都有好几种下单途径。比如:通过Web网站下单,通过打电话到呼叫中心下单(CallCenter),使用手机Wap下单。如果只采用单数据库来存储订单信息的话,其随着订单量的增加,单数据库写压力必然增大,数据库服务器就会不堪重负,所以大都会根据业务采用分库做法。如下:


目前几个大型电子商务网站是如何生成订单号的呢。让我们先看看订单号的格式吧。
京东商城订单号格式:157444499;苏宁易购订单号格式:2000839647;凡客诚品订单号格式:213052230059;银泰网订单号格式:10030522161715。Web网站来源订单调用生成订单API后,存储在Web订单库。CallCenter网站调用生成订单API后,存储在CallCente订单库。Wap来源订单调用订单生成API后,存储在Wap订单库。最后需要把Web订单库,CallCenter订单库,Wap订单库等数据同步到后台订单主库中。后台订单主库是我们的核心库,存储所有订单数据。那么我们怎么才能把不同库中的订单数据同步到后台主库中,需要满足什么条件呢?电商网站中订单表大多都是以订单号做表的主键,我们必须保证各个子订单库中存储的订单号不能重复。这样才能保证可以安全的同步到后台主库中。

我们先来分析一下凡客诚品和银泰网的订单号生成规则。初看一下,凡客诚品和银泰网订单号都含有0522,这是因为这2张订单都是2013年5月22号下的订单。我们总结一下,凡客的订单规则:业务编码+年的后2位+月+日+订单数。银泰网的订单号规则:年的第三位数+业务编码+年的后1位+月+日+订单数。其实现方式应该是在数据库中新建一张订单量记录表维护每天的订单量。生成订单时,根据当天的日期查询这张表的订单数量加1,然后组合业务编码(比如业务编码Web=1,CallCenter=2,Wap=3)即为订单号。生成订单成功后在回写数据库(需记录订单量)。这种方式在高并发下会频繁更新订单量记录表,很容易产生锁表。

京东商城和苏宁易购的订单号看不出规则。我们猜想应该是 有一个全局数据库,这个数据库中只有一张订单表(Order),表Order只有一个自增的字段Id,这个自增的字段Id就是订单号。所有生成订单的API会首先访问全局数据库的Order表获得订单号,然后再生成订单。这样就可以保证子库订单号不重复。其实现方式避免了频繁的更新操作,只有Insert操作,性能要好很多

你可能感兴趣的:(javaEE)