如何确保分布式节点生成的ID唯一,且不会发生冲突?
这里有6种策略:
1. UUID或GUID(128位)
一个UUID由32个十六进制字符组成,每个字符是4位。所以,总共是128位。当你把4个连字符也包括进去后,你会看到总共有36个字符。
NanoID (126位)借鉴UUID的概念NanoID将其简化为只有21个字符,但这些字符来自包含连字符和下划线的64个字符的字母表。
3. 序列
可能会想到序列或自动增量,因为这是 PostgreSQL 和 MySQL 等数据库常用的方法。
4.对象ID(96位)
ObjectID 是 MongoDB 对唯一文档 ID 的回应,这个 12 字节标识符通常驻留在文档的“_id”字段中,如果您不自己设置它,MongoDB 会介入为您做这件事。
5. Twitter Snowflake(64 位,约 70 年)
该系统通常被称为“雪花 ID”,由 Twitter 开发,旨在为其庞大的用户群高效生成 ID。
Sonyflake(64位,~174年)受 Snowflake 的启发,Sonyflake 对位的分布进行了一些更改。