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

生成唯一 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 字节,由以下部分组成:

  • 以秒为单位的 4 字节的时间戳,
  • 一个 3 字节的机器标识符,
  • 一个 2 字节的进程 ID,以及
  • 一个 3 字节的计数器,从一个随机值开始。

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

数据库唯一ID

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

Twitter雪花

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

id 由以下部分组成:

  • 时间 — 41 位
  • 配置的机器 id — 10 位 — 最多 1024 台机器
  • 序列号 — 12 位

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

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

结论

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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页