哪个网站可以免费看小说不收费,哪个网站设计素材多,wordpress计时,柏乡县建设局网站文章目录 在后端开发中的ID生成策略1. 数字型 ID特点#xff1a;优点#xff1a;缺点#xff1a;例子#xff1a;常见用法#xff1a; 2. UUID#xff08;通用唯一标识符#xff09;特点#xff1a;优点#xff1a;缺点#xff1a;例子#xff1a;常见用法#xff… 文章目录 在后端开发中的ID生成策略1. 数字型 ID特点优点缺点例子常见用法 2. UUID通用唯一标识符特点优点缺点例子常见用法 3. 雪花算法Snowflake ID特点优点缺点例子常见用法 4. 自定义格式的 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 {IdGeneratedValue(strategy GenerationType.IDENTITY) // 自增IDprivate 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 {IdGeneratedValue(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 适合业务场景通常用于订单编号、用户编号等特定需求。