77百科网
当前位置: 首页 生活百科

如何把重复的订单号排在一起(订单号和id列可不可以是同一列)

时间:2023-07-23 作者: 小编 阅读量: 6 栏目名: 生活百科

订单号订单号的生成一般有相应的规则,而这些规则是各自产品根据自己情况自行设计的结果。我通过查询发现自己的淘宝id后6位是107280,而我的订单号后6位是108072,还是有规律的。找到了一个淘宝2012年的PPT,可能12年之前的设计又不一样。综上,回答我们标题的问题:“订单号和id列可不可以是同一列?”用与业务无关的id列作主键比较合适。如果是单表,当然是用自增id,如果考虑到分库分表,可以采用像snowflake这样的生成方案。

id 列

首先说 id 列一般作为主键,没有什么业务含义,设计的目的是为了查询和索引方便,如果用单表的情况下一般会设置为自增,有序了以后,无论数据库还是业务检索起来效率都非常高。

在分布式场景中,单表已经不能满足我们的需求了,所以用自增 id 的方案也就不合适了。当比如我们进行分表设计时,主键列到底如何生成就成了一个问题,流行的方法是利用像 snowflake 这样的算法计算出一个趋势有序的值作为 id。(当然还有其他多种方法)这样就满足了扩展性和一定程度上解决了检索性能的问题。

订单号

订单号的生成一般有相应的规则,而这些规则是各自产品根据自己情况自行设计的结果。

举几个例子

京东的:

    京东 2013 年的订单号 : 479000238京东 2014 年的订单号 : 7783813454京东 2018 年的订单号 : 81467423041京东 2020 年的订单号 : 132971864529

淘宝的:

    淘宝 2012 年的订单号 : 230447522918072淘宝 2016 年的订单号 : 2131062693288072淘宝 2019 年的订单号 : 329062467847108072淘宝 2021 年的订单号 : 2075316735066108072

可以看到京东和淘宝的订单号都是在递增的,而且淘宝的看起来是有规律的,这个查了一下有说从 2017 年淘宝升级了订单,原先是用订单号后 4 位识别用户,2017 年以后改为用后 6 位了。

那么淘宝订单编号后 6 位用户 id 后 6 位的目的是什么?

翻遍了百度、知乎,没有找到答案。

我是偶然间翻到一份淘宝技术演变 PPT,看到订单表分库的逻辑时才恍然大悟。

一般的平台型电商,订单量大,为保证查询检索速度,都会采用分库的形式,将巨量的订单信息分库存储,一般情况下订单系统同时维护了一个订单号和 userid 的关联关系,先根据订单号查到 userid,再根据 userid 确定分表进而查询得到内容。而淘宝在订单号上下功夫,通过订单号后 6 位直接锁定库表,大大提升高并发下的系统查询性能。

从这个策略我们也可以看到淘宝用户订单库是按照用户 id 后 6 位存储的,例如:XXXX452154 格式的用户订单都是储存在一个分库中。

我通过查询发现自己的淘宝 id 后 6 位是 107280,而我的订单号后 6 位是 108072,还是有规律的。

找到了一个淘宝 2012 年的 PPT,可能 12 年之前的设计又不一样。

订单号生成规则

不重复 显然,这种具有唯一标识的号码是不能重复的

安全 不能被人为的猜测或推测出来

易识别 易识别就代表位数不要太长,位数控制好了就容易查询检索,占用空间小。

几种常见的规则

    年月日 自增长数字的订单号(比如:2012040110235662)字母 数字字符串式,字母有包含特别意义,C02356652Snowflake 算法生成年月日 机构编码 后四位随机
订单号可不可以作主键 id 列

前提是你根据你自己设计或选择的订单号规则生成了一个可行的订单号,这种情况下,如果你的订单号包含字母等字符串那么是不合适作主键的。虽然唯一,但索引查询性能较差。不过可以做唯一索引。

如果订单号是纯数字呢?

也不建议,数字当然有它的优点,性能好(位数长了也不好),但是订单号毕竟是跟业务相关的,与业务相关的列作主键本身可能会有问题。

假如未来的一天我们要改变业务含义,也许想把数字改字母,加几位或少几位,那么就必须修改主键了,核心数据表的主键修改,可是牵一发而动全身的,会造成极大的维护开销。

虽然直观上感觉“多了一列”,但并不是无用的,对未来的扩展性会有很大帮助。综上,回答我们标题的问题:“订单号和 id 列可不可以是同一列?” 或者说订单号可不可以作主键,我认为可以,但不适合,所以建议不要用订单号做主键。用与业务无关的 id 列作主键比较合适。

主键列怎么设置?

如果是单表,当然是用自增 id, 如果考虑到分库分表,可以采用像 snowflake 这样的生成方案。

参考
    https://www.zhihu.com/question/19805896http://www.woshipm.com/pd/3742068.html
    推荐阅读
  • 冬瓜粥的做法(冬瓜粥的烹饪方法)

    下面内容希望能帮助到你,我们来一起看看吧!冬瓜粥的做法材料:冬瓜300克、粳米180克、瘦猪肉100克、湿淀粉、盐、香油、葱花各少许。猪肉洗净,剁茸、加盐、湿淀粉拌匀;冬瓜削皮,洗净,切片;粳米淘净入锅,加适量水煮约25分钟。放猪肉茸,冬瓜片,再煮10分钟,待粥液浓稠后即可盛出,淋上香油,撒上葱花即可。

  • iphone11有夜景模式吗(iphone11怎么拍夜景听语音)

    iphone11有夜景模式吗iphone11是有夜景模式的,而且iphone11系列的三款手机都支持该功能,也是ios13新增的一个功能,对于这一点还是需要了解的。不过需要注意的是,iphone11的夜景模式并没有单独的开关,用户在iphone11拍照的时候,若是光线比较暗的话,手机会自动进入到夜景模式下。在光线不足环境下,相机左上角出现一个黄色月亮形状,也会带有数字。而黄色月亮形状内数字表示曝光时间。手持不要晃动等待。夜景照片就好了。

  • 保姆的心计小说(女佣嘲讽她靠孩子上位)

    洛初颜回到唐宫时,小胖墩还在午睡,房间安排在了一楼。“总裁,这是市场部制定的新产品上市规划。”这时,君御起身,拿起外套穿上,径直走向电梯。洛初颜兴高采烈的购物回来,却发现三楼的房间并没有布置。洛初颜看到她们时,完全在意料之中,其中一名就是上次打电话透露她隐私,却被她撞破的女佣。丁梅愣住,却没有再反驳她,引来同伴诧异的目光。张管家准备带两名女佣离开。焦红却不愿意走,她突然朝洛初颜下跪道。

  • 猩红热怎么辨别(猩红热近期再袭香港)

    猩红热虽无预防疫苗,但打流感针或水痘针,有助减轻其严重程度及后遗症。专家表示,近期天气变化、抵抗力差及季节性流感等多方面因素影响,令猩红热个案出现回升,预料本月至下月的感染情况会持续上升。猩红热一直在发生,只是一旦群体的抗体降低了,就会出现流行。但要确诊是猩红热,还需进行病菌培养等。孩子得了猩红热要及早进行治疗并保证治疗时间,减少并发症,缩短传染期。

  • 路由器wifi密码忘了怎么找回(忘记WIFI密码怎么办)

    前两天挨踢妹听朋友抱怨自己忘了WIFI密码,连不上网,回家还要重置路由器,挨踢妹赶紧拦住她,并向他传授了两招不用重置路由器也能找回WIFI密码的方法。还有更简单的,一串代码搞定!

  • 穿越民国成为帝皇带系统的小说(现代青年穿越成了玉皇大帝)

    中央宝座旁,站着一名风姿卓越的女子,她身穿五彩云霓裳,宝光闪烁,长裙拖地,流光溢彩,两只玉手环于身前,端庄大气,母仪天下。她是瑶池金母,三界女仙之首。她樱唇轻启,口中发出了悦耳的奇妙声音,震动了整个凌霄宝殿。瑶池金母,也就是后世人熟知的王母娘娘,昊天名义上的妻子。“叮!任务发布,瑶池金母篡权夺位,必须严惩,以儆效尤!”

  • 家用摄像头怎么挑选(家用智能摄像头选购)

    值得一提的是,这三台200元档的智能摄像头全部具备微光全彩夜视功能,还是很厚道的。以上三款机型全部支持双向语音,不过360花了点小心思进行了升级。智能摄像头虽然可以双向语音,不过一般情况下都是由使用APP的一方掌握主动权,单向发起呼叫。②「AI异动识别」主要是针对有娃家庭,360云台7P当监测到宝宝哭泣等声响时,摄像机将自动开启巡航和跟踪拍摄,并通知给父母。

  • 济宁拥军卡办理有哪些规定(济宁市拥军卡各县市区都通用吗)

    如发现持卡人违反该项规定,驾驶员有权没收持卡人的拥军卡。持卡人乘车时需主动向公交车驾驶员出示拥军卡并接受驾驶员的监督,刷卡时按语音提示操作。拥军卡没有照片的,驾驶员有权拒绝其刷拥军卡乘车。

  • 新郎婚礼中毒身亡(新郎婚礼当天喝杏仁露后身亡)

    新郎和新娘来自济南市章丘区文祖镇两个相距约3公里的村子。李秀站在自己家门口,抻着头等着接新娘的车队返回。但在找鞋过程中,新郎忽然说自己头晕,便坐在了婚床上,慢慢的,新郎又倒在了婚床上,刚刚喝下的白色杏仁露也开始往外吐了出来。120急救人员赶到现场后对新郎进行了简单施救,并建议立马送往医院。要想查明新郎的死因,需要法医进行解剖,家人决定,还是算了吧。