mysql 生成唯一自增id 订单号_全局ID生成(1)方案讨论

1、需求背景

在大型分布式系统中,需要对大量数量进行唯一标识。一般来说,我们需要两种类型的全局唯一标识:主键形式的(mysql 索引特性,用整形自增方式);业务模式的,如订单号,需要冗余一些业务特性,如业务类型+团队标识+时间+机器+序列。但不管哪种方式,一般都有下列特性: 1、全局唯一; 2、高并发,高性能(1000个并发,1000000W数据,18S内完成); 3、高可靠,容错单点故障; 4、易扩展,易迁移。

2、操作环境:

Mysql 5.8

3、全局ID生成方案

我们常用的ID生成器方案如下:

75663e0accd03f20117969ce09b6f86f.png

3.1 数据库自增

mysql auto_increment 自增: 优点:单库单表下,简单快捷; 不足:     单库下,数据库压力大,无可靠性,一挂全挂.不易扩展,分布式下无法简单保障唯一。

3.2 UUID

优点:     无需数据库介入,就可以全局唯一; 不足:     长度为128位,存储空间大;     非自增,无法排序,特别是用在MYSQL中索引时;     可读性不佳。

3.3 redis方案

优点:     比数据库性能高;     可以自增; 不足:     需要引入redis组件;     增加运维成本;

3.4 Zookeeper方案

    通过znode生成32位或者64位数据库版本号,很少用到,因为需要zookpeeker,而且是多步调用API,在高并发下表现不是很理想。

3.5 雪花算法:

    twitter开源的算法,很多企业所用的都是根据此算法再结合本身业务需求进行改造的。

优点:

    1、简单轻量,无需要依赖其它

    2、支持高并发,并高性能。

不足:     如果用于做业务ID,可读性不好。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值