生成唯一 ID 的可能方法?

不重复的id算法(生成唯一ID的可能方法)(1)

创建唯一 id 的不同方法:

自增ID

与 GUID 相比,自增Id 往往占用更少的空间更容易索引。它是一个很好的聚集索引,随着新记录的有序保存,碎片更少,这更容易连接表。如果我们使用数据库提供的自动生成的增量 id,那么查询和查找数据会变得更快,因为是有序的。但是这种方法可能不是最适合分布式系统,因为 2 个数据库可以生成相同的 id,存在ID碰撞。

GUID

GUID 的唯一性取决于用于生成它的算法。

GUID 会重复吗?

GUID 是一个128 位整数(16 个字节),可以在需要唯一标识符的所有计算机和网络中使用。

GUID 只是微软对 UUID 的实现,UUID/GUID 的问题是尺寸比较大,所以索引不好。因此查询性能会受到影响。

MongoDB 的ObjectId

Objectid 的长度为 12 字节,由以下部分组成:

与类似 sql 的数据库的自增ID相比,它的长度仍然更长。

数据库唯一ID

这种方法使用一个额外的数据库,其主要目的是创建唯一的 id,调用集中数据库创建一个唯一的id。这种方法的问题是我们需要一个额外的数据库,并且性能受限数据库的性能,

Twitter雪花

Snowflake 是一种算法服务,可大规模生成唯一 ID 号,并提供一些简单的保证。ID 为 64 位长。

id 由以下部分组成:

ID 紧凑而简短(与 GUID 和 ObjectId 相比),且有序的。

补充:也可以了解百度 美团的分布式ID算法实现,大同小异;同时也可以基于雪花自定义扩展等

结论

在需要唯一ID的情况下,首先要弄清楚的是想要的数据库架构类型——分布式/分片或单一数据库。

,