独一无二:探秘生成唯一ID的神奇方法

8,261次阅读
没有评论

共计 1658 个字符,预计需要花费 5 分钟才能阅读完成。

退役魔法少女
2024-03-31 09:02:02
浏览数 (1029)

在互联网,唯一 ID 的生成是一项关键任务,用于标识和区分各种实体,如用户、订单、产品等。本文将详细介绍互联网常用的唯一 ID 生成方式,包括自增 ID、UUID、雪花算法等,并探讨它们的特点和适用场景。

自增 ID

自增 ID 是一种简单而常见的唯一 ID 生成方式,通过数据库的自增字段实现。每次插入新记录时,自动递增生成唯一 ID。这种方式简单高效,适用于单体应用或小规模系统。示例代码(使用 MySQL):

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100)
);

INSERT INTO users (name) VALUES ('John');
INSERT INTO users (name) VALUES ('Jane');

自增 ID 的优点是易于实施和管理,但在分布式系统或多个数据库实例中可能存在冲突的风险。

UUID

UUID(Universally Unique Identifier)是一种标准化的唯一 ID 生成方式,通过算法生成 128 位的字符串。UUID 保证了在全球范围内的唯一性,不依赖于中央控制机构。

独一无二:探秘生成唯一 ID 的神奇方法

在 Python 中,可以使用 uuid 库生成 UUID。示例代码:

import uuid

uid = uuid.uuid4()
print(uid)

UUID 的优点是全局唯一,无需依赖数据库自增或其他机制,适用于分布式系统。然而,UUID 的字符串较长,不适合作为数据库索引或 URL 中的参数。

雪花算法

雪花算法(Snowflake)是 Twitter 开源的一种分布式唯一 ID 生成算法。它将唯一 ID 分为不同的部分,包括时间戳、机器 ID 和序列号。这些部分的组合保证了生成的唯一 ID 在分布式系统中的唯一性和有序性。

独一无二:探秘生成唯一 ID 的神奇方法

示例代码(使用 Python 实现):

import time

class Snowflake:
    def __init__(self, worker_id):
        self.worker_id = worker_id
        self.sequence = 0
        self.last_timestamp = -1

    def generate_id(self):
        timestamp = int(time.time() * 1000)

        if timestamp raise Exception("Clock moved backwards!")

        if timestamp == self.last_timestamp:
            self.sequence = (self.sequence + 1) & 4095
            if self.sequence == 0:
                timestamp = self.wait_next_millis(self.last_timestamp)
        else:
            self.sequence = 0

        self.last_timestamp = timestamp

        
        unique_id = ((timestamp - 1420041600000) 22) | (self.worker_id 12) | self.sequence
        return unique_id

    def wait_next_millis(self, last_timestamp):
        timestamp = int(time.time() * 1000)
        while timestamp 1000)
        return timestamp


snowflake = Snowflake(worker_id=1)
unique_id = snowflake.generate_id()
print(unique_id)

雪花算法的优点是在分布式系统中生成唯一 ID,且具有有序性。它的缺点是依赖于系统时钟的准确性,同时需要分配和管理机器 ID。

总结

唯一 ID 的生成方式多种多样,每种方式都有自己的特点和适用场景。自增 ID 适用于单体应用或小规模系统,UUID 适用于分布式系统,而雪花算法适用于需要分布式、有序、高性能的场景。开发者可以根据实际需求选择合适的唯一 ID 生成方式,确保在互联网应用中实现唯一性标识和数据完整性。

原文地址: 独一无二:探秘生成唯一 ID 的神奇方法

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-19发表,共计1658字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)