小工具知识网

当前位置: 首页 > 行业知识 > 分布式ID选型对比(1)

行业知识

分布式ID选型对比(1)

2026-11-06 08:54:26 来源:互联网转载

常见���几种ID生成方式对比:

()

种类

全局唯一

()

高性能

高可用

趋势递增

中心服务

缺点

UUID

是

高(本地生成,(无网络开销)

低(无序,不适用)

否

否

无序、字符串

数据库自增

单表唯一

中

中(宕机就会使业务服务中断)

是

否

安全性差,能猜出来规律

对于分库分表场景无法唯一

数据库自增-集群

是

中

中(宕机就会使业务服务中断)

是

否

通过设置初始值及步长进行自增

不好扩展,增加节点可能导致不唯一

数据库号段模式

是

低(需要频繁更新表maxId)

中(宕机就会使业务服务中断)

是

否

依赖数据库,需要频繁更新数据库maxId

乐观锁方式保证高可用

数据库号段模式+缓存

是

中

中

是

否

在号段模式基础上增加缓存buffer

缓存数据同步到数据库需要保证强一致性,增加了复杂度

redis的incr

单模块唯一

多模块不适用

中

中(宕机就会使业务服务中断)

是

否

多服务情况下单台redis无法满足

多redis集群时,主master宕机,会在较短时间内存在ID重复

雪花算法

高(不考虑回拨情况下)

高(本地生成,(无网络开销)

中(趋势递增)

是

否

存在时钟回拨问题

多节点时可能需要自定义datacenterId和machineId的生成(IP)

百度uid generator

高

高(本地生成,(无网络开销)

高(趋势递增)

是

否

在雪花算法基础上增加启动服务时获取workId(或初始化workId)

项目启动时间会被拉长,依赖数据库

美团Leaf

高

高(本地生成,(无网络开销,需要自己实现)

中(中心服务)

高(自定义方式较复杂)

是

是

百度uid模式下衍生而来

可以实现自己的ID生成中心,即leaf-server,由该项目提供获取ID的方法供调用,但该方式比较耗IO,性能会有所下降

依赖数据库或zookeper

为了提升性能,需要自己在项目里面自定义实现Leaf server

滴滴TynyId

高

高(本地生成,(无网络开销,需要自己实现)

中(中心服务)

高(自定义方式较复杂)

是

是

美团Leaf模式下衍生而来

可以实现自己的ID生成中心,即TynyId-server,由该项目提供获取ID的方法供调用,但该方式比较耗IO,性能会有所下降

依赖数据库或zookeper

为了提升性能,需要自己在项目里面自定义实现TynyId server

----------------------------------------------------------------------------------------------

数据库自增

一, 引入依赖:

    mysql    mysql-connector-java    8.0.19    org.mybatis.spring.boot    mybatis-spring-boot-starter    2.2.2

二, 新建表

CREATE TABLE `auto_generate` (  `id` bigint NOT NULL AUTO_INCREMENT,  `name` varchar(100) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

三, resources目录下编写自动生成代码配置文件: generatorConfig.xml

                                                                                                                                            

上一篇:鸡膜怎么这么贵?

下一篇:软路由服务器怎么设置方法?