电商系统ID生成策略简单介绍

162 篇文章 2 订阅
订阅专栏

在系统中生成ID的方式有很多种,现在简单分析一下各种方式的适用场景以及优缺点。

1. UUID. 唯一性,在单体环境下或者分布式环境下都不会出现重复。但是UUID的劣势也是一大堆

 a.没有可读性,导致程序在调试的时候数据不直观,不能像整型ID一样直观的看到大致运行到了哪条记录,如果比对两条数据,也不能很快看出谁先谁后。

 b. 32位字符串太长,占用数据库资源。

 c. 在对主键进行索引的时候,32位字符串进行索引要比整型数据进行索引费事,而且如果使用UUID作为主键并进行了索引,因为需要维护数据库的字符串索引,那么增删改的速度会降低。

 

2. 数据库自增ID. 这是大部分系统中所用的ID生成方式。简单易用,索引效率高。但是一旦涉及到大数据量的分库分表,会出现ID重复的问题。比如说电商网站的订单数据量很大,用两个结构相同的数据库实例A跟B来存储订单数据,A跟B中的表结构也相同。两者订单ID都设置为自增。在没有任何策略的情况下,订单1存入A库,订单2存入B库,这时候两个订单的ID有可能出现重复,因为A跟B在数据库这一层没有直接的关系,各自为战。A根本不知道B的主键自增情况,B也不知道A的情况。

解决办法就是设置指定的步长与初始参数。假如有3个数据库A,B,C来分担数据,那么步长都设置为3,初始值设置为1,2,3. 这样,无论3个数据库各自怎么自增,都不会出现重复现象。

但是这个带来了扩展性的问题。当数据量加大而想要再增加一个数据库D的时候,就显得非常困难。这时候是不能再简单的设置D一个初始值,因为这样会道来数据重复。解决办法就是数据迁移,然后重新分配初始值与步长。而且这样做需要停止正常业务。

3. 依赖于Redis产生ID. 这是大部分电商网站都使用的方式。Redis是内存操作,速度快,单线程并且能支持高并发,能很好的应对分布式环境。产生方式就是利用键值对的increment操作,key设置为orderId, 每次需要新的ID就在这个键值对上对value加1.

这里有个技巧,就是把最终ID分为两部分,利用当天的时间作为前缀,Redis产生的值作为后缀。如果没有前缀的话,Redis键值对的value产生的ID会越来越大,不好维护。如果用时间作为前缀,比如2020010614(2020-01-06 14:00), 达到指定timeout时间后,比如60分钟,键值对的value就会重新从0开始。因为这时候前缀的值已经变了,所以后缀重复了,但最终的整体ID是不重复的。具体的实现逻辑如下代码。

 

此外,可以在生成的id中加入业务标识,组装成更具体的ID. 以天猫的订单号为例,同一个账户的不同订单,最后都有一个2043标识。这个标识类似于用户的哈希值,在分布式环境或者分布式数据库中,对于路由至关重要。举个例子,在处理该用户的订单的时候,后台有N个负载均衡的数据库实例, 这时候通过一定的路由算法,会把结尾是2043的订单都路由到实例B数据库中,因为那里存着该用户的所有详细数据,存取数据性能很高。

随机生成用户名(中文、英文昵称)
09-30
经过整理过的用户昵称
数据库id使用数字自动累加还是使用uuid好?
07-12 1701
又碰到一个小白问题。数据库id使用数字自动累加还是使用uuid好?这是要分情况的:1、先要弄清楚这两种id的区别。 数据库id用数字优点:有利于排序,而且肉眼看起来会比较舒服;自动累加,可以计算。缺点:有上限,一般用int型的话好比较好记,如果用long型的话记起来也会比较费劲。缺点里面要命的是他的上限问题。如果超过数据表的数据是无限的,那就不要用,否则将来会出麻烦。 数据库id用uuid优点:重复几率很小,几乎不可能,算出来的32位长度的uuid是根据时间和本机信息加密出来的,所以很难重复;
数据库使用自增还是uuid,推荐雪花算法
怪只怪满眼尽是人间烟火
05-29 1219
自增id:存储空间小,性能高,但在分布式系统,以及多数据库数据交换,会出现问题。 uuid:优点就是保证唯一,本身具有无序性,正式系统推荐使用uuid。 但是因为UUID是无序性的,本身的size过大,作为主键会涉及大量索引重排。 名称 有序 分布式 自增 是 否 uuid 否 是 因为分布式的优先级大于是否有序,所以数据库不能使用自增主键。 这时候需要一份分布式且有序的主键生成算法:雪花算法。 /** * @author qushen *
简单了解一下电商系统中的SPU、SKU、ID,它们都是什么意思,三者又有什么区别和联系呢?
云祁QI
08-17 3万+
电商时代,数据为王。
分布式ID生成器-订单号的生成(全局唯一ID生成策略)
netuser1937的博客
06-02 1202
跨库问题、分布式事务问题、查询数据结果集合并、全局唯一性id保证。本文掰扯下全局唯一性id。:UUID、数据库递增、snowflake、Redis全局唯一性id保证的4个要求:全局唯一、数据递增、信息安全、高并发高可用---a.全局唯一:不能出现重复的id号;---b.数据递增:保证下一个id一定大于上一个id;---c.信息安全:防止恶意用户根据id规则来获取数据;---d.高并发高可用:短时间内快速生成可用,解决线程安全问题。
elasticsearch 主键生成策略以及如何指定特定字段为id主键列
01-07
es种一共两种主键生成策略,一个是手动指定和一个是自动生成 1.document的id 1)根据应用情况来说,是否满足是否指定document id的手动指定,一般情况,是从某些其他的系统中,导入一些数据到es时,会采用这种方式,...
基于多维隐藏特征的电商推荐系统排名设计与实现研究.pdf
07-08
在当前互联网环境下,电商推荐系统扮演着至关重要的角色,它能够帮助电商平台高效地为用户提供个性化商品推荐,从而增加用户满意度和购买概率。本文研究的“基于多维隐藏特征的电商推荐系统排名设计与实现”是一篇...
第二代微服务电商项目实战笔记
04-07
6. **雪花算法**: 生成全局唯一ID,适用于分布式系统中的主键生成。 7. **Spring-Session**: 分布式Session管理,解决了单体应用拆分成微服务后Session共享的问题。 8. **ZipKin**: 分布式服务追踪系统,用于构建...
06.交易流水号的艺术:掌握支付系统的业务ID生成指南_V20240130.pdf
05-08
### 交易流水号的艺术:掌握支付系统的业务ID生成指南 #### 一、业务ID的概念及其重要性 **1. 什么是业务ID?** 业务ID,又称为业务键,是在支付系统中用来唯一标识一笔业务的ID。它不同于数据库自增ID,业务ID...
python-电影推荐系统简单介绍
最新发布
06-12
在这个简单案例中,系统用户1推荐了电影ID。推荐过程依据用户间的相似度和评分历史,能够有效预测用户可能感兴趣的电影。虽然这是一个非常基础的例子,但它展示了推荐系统的基本原理及其潜在的应用价值。在实际...
商品id- item_id /条形码/skuid
时刻学习
09-27 2494
商品id商品唯一标识 条形码中国69开头 TM开头的代表是组合商品套装 skuid最小存货单位
电商高并发、高流量下分布式 ID 的解决方案(主键生成策略
GitChat
07-03 2899
在互联网应用中,应用需要为每一个用户分配一个 ID,在使用分布式数据库情况下,已经不能依靠自增主键来生成唯一性 ID 了。几乎所有的业务系统,都有生成一个记录标识的需求,例如:order_id,user_id。 数据在分片时,典型的是分库分表,就有一个全局ID生成的问题。 在这些大型电商技术日积月累的今天,本 Chat 带你领略一线电商正在使用的主键生成策略: 自增的生成 ID 策略在互联网的高...
电商的SPU、SKU、ID
清平乐的技术专栏
10-07 1980
电商时代,数据为王。 所以电商人入门要懂的第一课,我们通常会培训基础理论,涉及到各种常用名词,UV、PV、GMV、CPC、CPS、CPA、CPM等等,这里对比一下几个常见的产品名词,SPU、SKU、ID,它们都是什么意思,三者又有什么区别和联系呢? 首先,无论是哪一个电商平台,都是有spu和sku的,只是叫法会不同,以淘宝和京东为例,商品,淘宝叫item,京东叫product。所以淘宝我们虽然看不...
一个简单唯一ID生成规则
weixin_34198583的博客
02-24 3050
为什么80%的码农都做不了架构师?>>> ...
SnowFlake 生成全局唯一id
weixin_30911451的博客
04-24 266
public class SnowFlakeUtil { private long workerId; private long datacenterId; private long sequence = 0L; private long twepoch = 1288834974657L; // Thu, 04 Nov 2010 01:42:54 GMT...
订单号的生成规则和不同生成策略-总结
热门推荐
厚积薄发
01-16 4万+
订单号的不同生成策略-总结 一. 订单命名的几种规则 不重复:订单号的唯一行 安全性:订单编号中不要透露任何和公司有关的信息,不要使用流水号,容易暴露公司的运营情况 不要使用大规模随机码:随机编码可以满足安全性,但为了满足不重复性要费很大的力气。比如现在已经有了10万条订单,如果再新生成的订单,它的订单号需要与之前的10万条数据的订单号进行比较,结果可想而知。 防止并发 控制位数:一般在10~1...
简单聊聊电商系统的订单号生成规则
qq_57222058的博客
04-01 5211
一、订单编号作为唯一标识码在业务中的应用场景 单号在实际的业务过程中是做为一个订单的唯一标识码的存在,提供订单号就很方便业务人员快速定位订单信息,给予用户帮助。 1. 用户订单遇到问题,需要找客服进行协助 我们日常在电商平台上面购买商品的时候,很多时候需要去向平台客服反馈在订单过程中遇到的问题,一般这个时候平台客户都是要求用户填写订单编号的,这样客服可以快递锁定订单信息,给用户信息问题的解答和处理。 2. 对订单进行操作,如线下收款,订单核销 我们在第三方平台上购买了某一个店铺的线下优惠券的时候,
写文章

热门文章

  • 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题 1302184
  • 通过编程自动化增加CSDN博客的访问量 327178
  • 解决Failed to parse SourceMap: http:xxx 问题 139821
  • Http协议与TCP协议简单理解 97866
  • 在64位Win7操作系统中安装Microsoft Access Engine的解决方案 89628

分类专栏

  • 技术积累 162篇
  • 常见异常处理 35篇
  • 设计模式 2篇
  • 自己动手写ORM框架 7篇
  • Visual Studio 13篇
  • Windows Application Type 2篇
  • Assembly Improvement 1篇
  • Windows Tricky Skills 6篇
  • Thread Programing 1篇
  • Office 开发 5篇
  • Network Related Piles 1篇
  • Web Front Tech 1篇
  • 微信 1篇
  • .NET Core 1篇
  • 数字证书 2篇
  • HTTP 3篇
  • XML与XSD 1篇
  • 数据库 3篇
  • 金融学习 2篇
  • Java Program 2篇
  • 多线程编程 1篇
  • SpringBoot 2篇

最新评论

  • 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题

    m0_59217213: 感谢!我是出在解决办法1,xml文件指向的是xxDao,但我的查询是在xxMapper

  • [无法读取项目文件xxxx, xxx未能加载项目文件,名称不能以“<”字符(十六进制值 0x3C)开头]异常的处理方法

    入门到卸载: 删了这玩意 我项目嘎嘎报错

  • 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题

    李作非: 找了好久好久,才发现,target下没这个文件

  • 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题

    李作非: 以上情况都不是,然后我去target下去看了看,发现没有对应的xml,于是破案了 https://blog.csdn.net/haroroc/article/details/120325509

  • 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题

    加州阳光橙: xml的包要用/命名,不要用.!!!血的教训

最新文章

  • Fiddler无法捕获C#中HttpClient与HttpWebRequest发出的localhost请求
  • 127.0.0.1 / localhost This site can‘t provide a secure connection 该网站无法提供安全的连接
  • IIS Express调试ASP.NET网站出现Oracle.DataAccess incorrect format问题
2023年1篇
2022年4篇
2021年5篇
2020年4篇
2019年15篇
2018年8篇
2017年5篇
2016年37篇
2015年13篇
2014年42篇
2013年80篇
2012年23篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家广东园林玻璃钢雕塑冀州玻璃钢游乐场门头雕塑永宁玻璃钢雕塑施工徐州深圳玻璃钢卡通雕塑安庆户外玻璃钢雕塑供应商南京佛像玻璃钢雕塑批发金华商场美陈道具广东秋季商场美陈采购漯河不锈钢太湖石玻璃钢雕塑公司安庆玻璃钢艺术雕塑上海户外商场美陈有哪些玻璃钢骆驼雕塑哪家不错大同小品系列玻璃钢雕塑定做合肥商场美陈深圳玻璃钢大猫雕塑玻璃钢雕塑天鹅达州玻璃钢卡通雕塑定制商场美陈版权甘肃玻璃钢马雕塑艺术摆件陕西大型玻璃钢家居雕塑生产厂置办玻璃钢动物雕塑偃师玻璃钢雕塑厂家云南玻璃钢浮雕不锈钢人物雕塑惠州商场美陈江门玻璃钢雕塑批发禹王台玻璃钢花盆花器芜湖玻璃钢造型雕塑重庆人物玻璃钢雕塑销售厂家陕西创意玻璃钢雕塑销售厂家超值的玻璃钢音符雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化