职场笔记 | 电商订单号设计思考

职场笔记 | 电商订单号设计思考_第1张图片
(图 by 榜耶--电商订单号结构化思考)


关于电商订单号,网购一族一定不陌生。其实也不熟悉,想想谁会对一串数字/字符感兴趣呢?如果不需要售后服务,正常情景下我们是不会去关注那一串字符的。当哪天关注到订单号的时候,甚至感兴趣研究起电商订单号的,估计会被这一串字符背后的设计逻辑给震撼。


原来,这不起眼的小东西,还蕴含这么多值得思考的东西。

1、为什么淘宝单号这么长?前几年还12、13位,现在都16位了?

2、为什么自己的淘宝单号最后4位都一样呢?这4位数字代表什么?

3、凡客单号是日期+订单量吗?

4、从订单号可以推算出竞品的销量吗?

5、从订单号可以判断出竞品业务发展的速度吗?

6、从订单号可以猜想出竞品的业务策略和布局吗?

7、如何解决订单号重复的问题?

8、如何解决业务发展快,订单号长度不够用问题?

9、客服OR物流如何快速解读订单号的关键信息,从而提高工作效率?

10、业务变更,如果有拆单等需求,如何设计编码来满足业务的灵活和拓展需求?

11、编码变长之后,如何解决数据库的存储和读取性能?

等等等等

职场笔记 | 电商订单号设计思考_第2张图片
(图 by 榜耶--电商订单号结构化思考)


以下小故事摘录知乎:

http://www.zhihu.com/question/19805896#answer-31069940


日期+6位自增数字

这就是最基本的流水号的问题,不仅仅会暴露你的交易量,而且有规律的订单号很容易成为安全隐患。


即时生成‘日期+6位随机数字’

这就是即时随机数的问题,不仅仅是检测重复的性能差,你想一下一共六位数字理论值100万条,假设当天下单记录已有80w,接下来再下单可能会不断的随机并且产生的随机数都已经存在,而且,这种方式并发如果处理不好就会导致下单失败(数据库unique)或者相同订单号(数据库非unique)。

你苦思冥想,终于想到了解决办法,我每天把明天要用的订单号先随机好,放进redis之类的缓存里里随用随取,这样就不会有性能和并发的问题了,回家发现老婆不在家,于是你开心的玩起了dota。

这里已经很接近订单池的概念了,不过因为这个池子没有流动性,就让我们暂且叫做订单桶吧,每天都要往桶里打水。

随着用户量的增长,你们决定在三月三号做一个"对3促销节",你在办公室监视着服务器,突然老王用你家座机给你打电话,大兄弟你快看下,下不了单了,你熟练的连接上服务器查找着问题,发现生成的订单号已经被用完了,这一天的促销不得不停止。

于是你又连续加班了三个月,做了一个实时监控订单号熟练的系统,当低于xxxxx的时候迅速生成新的订单号,并且买了更多的服务器,做了更多的集群,可以同时预留出更多的订单号等等等等。

这就是现在订单池的概念,随着订单号的被消费还继续生成着订单号,这个涉及的内容就很复杂了。


以下设计规则摘录知乎:

http://www.zhihu.com/question/19805896#answer-31069940


从用户体验和数据库优化的角度来看

1.利用数据库主键值产生一个自增长的订单号(订单号即数据表的主键)

2.日期+自增长数字的订单号(比如:2012040110235662)

3.产生随机的订单号(65865325365966)

4.字母+数字字符串式,字母有包含特别意义,C02356652

5.订单号无重复性;

6.如果方便客服的话,最好是“日期+自增数”样式的订单号,客服一看便知道订单是否在退货保障期限内容;

7.订单号长度尽量保持短(10位以内),方便用户,尤其电话投诉时,长的号码报错几率高,影响客服效率;

8.订单号尽量保持数字型(纯整数),在数据库订单索引查询中,长整数字型的数据索引与检索效率,远远高于文本型,因此尽量避免“字母+数字字符串式”!


作者:榜耶

版权所有:公众号笔记Bang(notesbang)

你可能感兴趣的:(职场笔记 | 电商订单号设计思考)