后端开发中唯一ID的生成方式详解
创作时间:
作者:
@小白创作中心
后端开发中唯一ID的生成方式详解
引用
CSDN
1.
https://blog.csdn.net/weixin_43972437/article/details/143021065
在后端开发中,唯一ID的生成方式是一个基础但重要的技术问题。不同的ID生成策略适用于不同的应用场景,从简单的数字型ID到复杂的雪花算法ID,每种方式都有其独特的优缺点。本文将详细介绍几种常见的ID生成方式,帮助开发者根据实际需求做出合适的选择。
在后端开发中的ID生成策略
在后端开发中,用户的ID或一条记录的ID通常称为主键(Primary Key),其格式和生成方式取决于系统的需求、设计和数据库类型。以下是常见的几种ID生成方案:
1. 数字型 ID
特点:
- 纯数字的ID,通常为整数(int、bigint等)。
- 关系型数据库(如 MySQL、PostgreSQL)默认使用自增(Auto Increment)整数作为主键。
- 适合简单系统或需要高效存储的场景。
优点:
- 简单易用:便于排序、检索和存储。
- 节省存储空间:数字占用的存储空间较小。
缺点:
- 不安全:自增ID容易被猜测,暴露系统中的记录数和顺序。
- 分布式环境下难处理:自增ID在多个服务或数据库节点之间可能冲突。
例子:
id
1
2
3
常见用法:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 自增ID
private Long id;
}
2. UUID(通用唯一标识符)
特点:
- UUID 是128位标识符,通常表现为32个字符长的十六进制数字,格式为8-4-4-4-12。
- UUID 是全局唯一的,不依赖数据库自增机制,适合分布式系统和跨服务的标识。
优点:
- 全球唯一性:在分布式系统中几乎不可能重复。
- 安全性更强:无法轻易猜测下一个ID,适合公开暴露的场景。
缺点:
- 存储开销大:UUID占用较多存储空间(16字节)。
- 性能较差:UUID作为主键进行排序和查询时,性能较低。
例子:
550e8400-e29b-41d4-a716-446655440000
常见用法:
import java.util.UUID;
import javax.persistence.*;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private UUID id;
}
或使用 Hibernate 的 UUID 生成器:
@Id
@org.hibernate.annotations.GenericGenerator(name = "uuid", strategy = "uuid2")
@GeneratedValue(generator = "uuid")
@Column(name = "id", updatable = false, nullable = false)
private UUID id;
3. 雪花算法(Snowflake ID)
特点:
- 雪花算法生成的ID通常是一个64位的长整型数字,格式为时间戳 + 机器ID + 序列号。
- ID 依赖当前时间,可以保证在分布式环境中的唯一性。
优点:
- 高性能:在分布式环境中,可以高效生成唯一的ID。
- 排序性能好:ID基于时间戳生成,因此是有序的。
缺点:
- 依赖时间:如果服务器时间不同步,可能会生成重复的ID。
例子:
715972992927380480
常见用法:
public class SnowflakeIdGenerator {
private static final Snowflake snowflake = new Snowflake();
public static long generateId() {
return snowflake.nextId();
}
}
4. 自定义格式的 ID
特点:
- 有时系统需要自定义格式的ID,可能包含日期、业务相关的信息等。这类ID通常通过字符串拼接生成。
例子:
USER-20231012-001
优点:
- 可读性好:可以通过ID看出一些业务信息,比如日期、类别等。
缺点:
- 复杂度高:生成规则需要自定义,可能增加管理复杂度。
- 冲突风险:生成逻辑不严谨可能会导致ID冲突。
不同类型 ID 的选择依据
- 数字型 ID:适合简单的系统,不需要分布式唯一性或不需要公开暴露ID的场景。
- UUID:适合分布式系统,跨服务、跨数据库的全局唯一标识,适合API公开场景。
- 雪花算法 ID:适合高并发、分布式系统,尤其适合需要排序的场景,如日志、时间戳排序等。
- 自定义 ID:适合业务场景,通常用于订单编号、用户编号等特定需求。
热门推荐
房子没还完贷款可以过户吗?带押过户需要注意哪些地方?
上湾煤矿智能辅助运输系统建设与应用
电工证有效期内未复审的法律风险与后果分析
腰围2尺4等于多少厘米?解读腰围测量与健康关系
硅谷银行倒闭会波及A股吗?多位券商首席解读!潘石屹紧急发声,上市公司密集回应
樟树樟蚕的虫害防治方法
探讨为何些经济行为被视为剥削吸血却未触犯法律
喝桃花水有什么好处和坏处
深圳惊现70年一遇"三角梅花妖"!上亿人打卡春日限定花瀑
《棉花帝国》:棉花,为什么是理解资本主义的最佳作物?
狗狗定期驱虫多久一次,如何确保狗狗健康无虱?
天然气灶和液化气灶通用不通用
黄芪炖鸡汤:月子期间的营养滋补佳品
通过一致性评价的仿制药与原研药疗效相同吗?
期权价值评估的基本步骤有哪些?
医用高分子夹板常见问题及解决办法
哪吒之魔童闹海:数字孪生技术助力影视腾飞的典范
绩效薪资是否必须计入个税申报范围?2025年最新解析与合规建议
他睡没睡,是宋朝最大的悬案
哈佛大学统计学专业详解:从课程设置到就业前景
浙贝母的功效与主治范围
上海交大医学院团队发现心梗治疗新靶点:Nrf3-Pitx2通路
自己清洗空调的方法
行驶证丢失、破损怎么办?交管12123线上办理指南来了!
张嘉佳生平简介 张嘉佳人生经历
钓鱼技巧:如何选择合适的鱼饵与钓具搭配
深圳最经典的5道小吃,酥软脆甜,鲜香解馋,皆是当地人的心头爱
鹌鹑蛋与鸡蛋的价值比较
A股午后深V,三大股指涨跌互现:机械、家电板块表现活跃
护栏高度国家标准介绍 参数规定说明