(自用)自增 ID、雪花 ID、UUID 的定义及优缺点对比

1. 自增 ID
  • 定义:数据库中自动生成的递增数值(如 MySQL 的 AUTO_INCREMENT),依赖数据库自身特性。
  • 优点:占用空间小,检索速度快。在数据量小的系统中通常一个int(8)即可满足使用要求。
  • 缺点
    • 分布式唯一性问题:多个数据库实例无法保证全局唯一。
    • 扩展性差:分库分表时需复杂策略(如设置不同起始值)。
    • 依赖数据库:强依赖数据库可用性,无法在离线场景使用。
    • 每次获取最新主键ID都需要一次额外的数据库查询操作,高并发场景每多一次操作都是性能的浪费。存在信息泄露的问题,主键id可能关联很多表,前端url中存在短数字串容易被猜到是主键id,也容易被推测出数据量,比如新注册的用户,通过报文得知id编号推测出整个系统的用户量。

2. 雪花 ID(Snowflake ID)
  • 定义:Twitter 开源的分布式 ID 生成算法,由 64 位二进制组成,包含时间戳、数据中心 ID、机器 ID 和序列号。
  • 优势:数字类型,顺序增加,不会重复,占用空间相比UUID更小。兼顾检索速度和分布式不会冲突的特点。
  • 劣势:存储内容较长、前端 Long 转换有精度丢失问题(需要实现 Json 转换解决精度问题)、服务器时钟回拨问题导致重复 ID (概率较低)、插入性能没有自增 ID 好

3. UUID(通用唯一标识符)
  • 定义:由 128 位二进制组成的字符串(通常以 36 字符表示),遵循 RFC 4122 标准。
  • 优点
    • 全网唯一、适合分布式分库分表存储、ID 没有规律不会被恶意猜测
  • 缺点
    • 占用空间大,不论数据量大小占用容量都是varchar(36)以上。因为UUID是随机数值,在批量查找数据时,数据的分布可能是随机的,会造成很高的磁盘随机读取消耗而降低效率,当然也可以选择使用顺序UUID。UUID包含MAC地址,存在隐私泄露风险。
  • 关于 UUID 还有一种有序 UUID,有序 UUID 会有更好的性能,Hibernate 依赖包中有关于有序 UUID 的实现类:org.hibernate.id.UUIDHexGenerator。
  • 特性自增 ID雪花 IDUUID
    全局唯一性仅数据库内唯一全局唯一全局唯一
    性能高(依赖数据库)极高(本地生成)较高(本地生成)
    有序性递增有序时间戳有序无序
    存储成本低(整数)低(64 位长整数)高(字符串)
    复杂度简单需配置数据中心 / 机器无依赖
    典型场景单体数据库分布式系统通用唯一标识

占用空间:自增 < 雪花 < UUID

检索效率:自增 < 雪花 < UUID

伸缩性:自增不支持,雪花、UUID支持。

引用:数据库主键选用数据库自增ID、UUID和雪花算法的优缺点_雪花算法和自增id优缺点-CSDN博客

自增、UUID、雪花算法ID对比_雪花算法和uuid的优缺点-CSDN博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值