现在的订单号设计为 6 位数字。 想重新设计一下订单号
1、对客户展示友好 2、尽量以全数字为主
1
3dwelcome 2018-05-14 22:33:11 +08:00 via Android
改成三位数字订单号,技术层面订单号加上用户的手机号当前缀,就不会冲突了。
|
3
loading 2018-05-14 22:37:07 +08:00 via iPhone
旁边给二维码就行
|
4
yhxx 2018-05-14 22:46:13 +08:00
对客户展示友好是指什么?
普通公司应该遇不到淘宝那种超出 int 上限的情况吧 |
5
redtea 2018-05-14 22:49:17 +08:00
参考淘宝,时间戳+6 位用户 ID。不过我还是没有想明白怎么防止用户 ID 尾号相同的用户在同一时间提交生成相同订单号。
|
6
EarthChild 2018-05-14 22:57:40 +08:00
@redtea #5 那就让那个人给你付款吧!
|
7
woscaizi 2018-05-14 23:02:50 +08:00 via iPhone
@redtea 淘宝订单号是单独的系统来生成的吧,这个系统有逻辑可以避免生成重复订单号。打完这句话我发现这简直是句废话。
|
9
Raymon111111 2018-05-14 23:07:00 +08:00
"对用户友好" 有例子吗? 啥意思
|
10
FYK 2018-05-14 23:07:06 +08:00
订单号这个东西超级复杂啊。可以搜一下:
https://www.zhihu.com/question/19805896 |
11
yangqi 2018-05-14 23:07:37 +08:00
订单号对客户友好?这本来就是个假命题,客户谁关心订单号的格式?自己开发方便安全就可以了
|
12
sujin190 2018-05-14 23:16:47 +08:00
其实时间年月日时分秒对人是很容易记的了,每个人都自然对时间自然有理解,管理上也很友好,本身就是时序的,后面加上全局计数器、随机数或者用户 id 都行,都可以在短时间多机快速生成很多订单好
有做法也可以年月日时分秒+1 字节机器 ID+2 字节进程 ID+1 字节进程内计数器,四字节转 10 个数字,一般就可以快速生成订单号了吧 |
13
soli 2018-05-14 23:42:58 +08:00
楼上正解。
|
14
airyland 2018-05-14 23:57:05 +08:00
10 位左右的数字对用户就算友好了,加上日期并没有变得多么易读有用。对用户友好其实是方便用户复制、查看、念给电话客服,所以在排版上格式化下,四位一组就可以了,比如 2345 3446 345。另外订单界面加上复制功能。
|
16
echoZero 2018-05-15 08:43:32 +08:00 via iPhone
从用户角度:订单号需要短 方便用户联系客服
从运营角度:不能连续,防止别人抓取。 从技术角度:不能重复,能包含 sharding key,易于拓展,还要容量足够大。 |
17
opengps 2018-05-15 09:16:49 +08:00
@3dwelcome 别用手机号,容易涉及隐私保护问题,如果需要关联到用户,换成用户的 uuid
订单号设计,可以直接体现下单时间,yyMMddxxxx,x 可以是可变长度,前面订单日期固定 6 位即可,xx 递增或者随机增长打乱接口被采集可能 |
19
opengps 2018-05-15 09:21:42 +08:00
另外订单表单独用一个时间列做聚集索引,不建议订单号做主键,这样有利于将来表太大,分割表分区或者冷数据迁移
|
20
qY3209HZitEb5Zty 2018-05-15 09:53:46 +08:00
年月日+时间戳+随机数+用户 id 后 4 位
|
21
fcten 2018-05-15 18:28:50 +08:00
用户友好的意思是越短越好?那这和技术开发是互斥的,因为要保证不重复不连续一定需要足够的长度。
可以参考 Twitter 的 snowflake 算法。 |