UUID V1 到 V7 各版本详解及 PostgreSQL 中的方法
UUID PostgreSQL Java About 2,389 words含义
英文全称:Universally Unique Identifier
微软体系中使用:Globally Unique Identifier
(GUID)
格式
以连字号分为五段,表现形式为8-4-4-4-12
的32
个字符。
M
表示UUID
版本,目前是1-7
版本。
N
表示UUID
变体,目前是8
/9
/a
/b
四种情况。
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
16095e6a-1c01-11ef-8d8c-de78632ca3f0 -- v1
7f99c45a-1c01-11ef-8d8c-47b90e0f82e8 -- v1mc
efba1db8-0f22-3bcd-954a-a39d36b31eef -- v3
13c508fb-1944-4ca7-957a-2ee41130ac18 -- v4
4acfff1b-ac0e-53d3-baa3-87246d186911 -- v5
1ef1cbff-5179-67ed-ae48-c5359f963ec4 -- v6
018fbe00-fbb2-791e-a519-c815ecea214e -- v7
UUID V1
示例
postgres=# select uuid_generate_v1();
uuid_generate_v1
--------------------------------------
16095e6a-1c01-11ef-8d8c-de78632ca3f0
(1 row)
原理
基于时间戳及MAC
地址。
缺点
- 机器的
MAC
地址出厂后不能保证完全唯一,且之后MAC
地址也可手动修改 MAC
地址的暴露会造成了隐私与安全问题- 若一台机器上的两个进程同时跑,有可能出现重复问题
UUID V2
示例
postgres=# select uuid_generate_v1mc();
uuid_generate_v1mc
--------------------------------------
7f99c45a-1c01-11ef-8d8c-47b90e0f82e8
(1 row)
原理
基于时间戳,将V1
的MAC
地址改为了随机数,更安全。
UUID V3
示例
postgres=# select uuid_generate_v3(uuid_generate_v1(), 'my-name');
uuid_generate_v3
--------------------------------------
efba1db8-0f22-3bcd-954a-a39d36b31eef
(1 row)
原理
不依赖与机器信息和时间信息。
但V3
要求输入命名空间及名称,命名空间本身也是一个UUID
,用来标识应用环境,名称通常是用户账号、用户名之类的内容,通过命名空间、名称、MD5
算出UUID
。
UUID V4
示例
postgres=# select gen_random_uuid();
gen_random_uuid
--------------------------------------
13c508fb-1944-4ca7-957a-2ee41130ac18
(1 row)
原理
基于随机数。
UUID V5
示例
postgres=# select uuid_generate_v5(uuid_generate_v1(), 'my-name');
uuid_generate_v5
--------------------------------------
4acfff1b-ac0e-53d3-baa3-87246d186911
(1 row)
原理
跟V3
差不多,只是把散列算法的MD5
变成SHA1
。
UUID V6
示例
public static void main(String[] args) {
UUID uuidV6 = Generators.timeBasedReorderedGenerator().generate();
System.out.println(uuidV6);
}
// 1ef1cbff-5179-67ed-ae48-c5359f963ec4
原理
对V1
版本的字段顺序进行了调整。
UUID V7
示例
public static void main(String[] args) {
UUID uuidV7 = Generators.timeBasedEpochGenerator().generate();
System.out.println(uuidV7);
}
// 018fbe00-fbb2-791e-a519-c815ecea214e
原理
基于Unix
时间戳和随机数。
UUID V7 转为时间
postgres=# SELECT to_timestamp(x'018fb7e95d1e739e92e2f22929a9ae12'::bit(48)::bigint / 1000);
to_timestamp
------------------------
2024-05-27 10:37:55+08
(1 row)
UUID V7 Java 生成器
https://github.com/cowtowncoder/java-uuid-generator
WIKI
Views: 1,157 · Posted: 2024-06-13
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...