Python ID 生成(UUID、自增、19位雪花算法ID)

您所在的位置:网站首页 雪花id生成 Python ID 生成(UUID、自增、19位雪花算法ID)

Python ID 生成(UUID、自增、19位雪花算法ID)

2024-01-07 12:10| 来源: 网络整理| 查看: 265

UUID UUID(Universally Unique Identifier)是通用唯一识别码,在许多领域用作标识,比如我们常用的数据库也可以用它来作为主键,原理上它是可以对任何东西进行唯一的编码的。

import uuid name = "Li" namespace = "Frank" ''' 基于MAC地址,时间戳,随机数来生成唯一的uuid,可以保证全球范围内的唯一性。 ''' print(uuid.uuid1()) ''' 算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。不过需要注意的是 python中没有基于DCE的算法,所以python的uuid模块中没有uuid2这个方法。 ''' print(uuid.uuid2()) ''' 通过计算一个命名空间和名字的md5散列值来给出一个uuid,所以可以保证命名空间中的 不同名字具有不同的uuid,但是相同的名字就是相同的uuid了。【感谢评论区大佬指出】 namespace并不是一个自己手动指定的字符串或其他量,而是在uuid模块中本身给出的一些值。 比如uuid.NAMESPACE_DNS,uuid.NAMESPACE_OID,uuid.NAMESPACE_OID这些值。 这些值本身也是UUID对象,根据一定的规则计算得出。 ''' print(uuid.uuid3(uuid.NAMESPACE_DNS,name)) ''' 通过伪随机数得到uuid,是有一定概率重复的 ''' print(uuid.uuid4()) ''' 和uuid3基本相同,只不过采用的散列算法是sha1 ''' print(uuid.uuid5(uuid.NAMESPACE_DNS,name)) 数据库自增ID

默认情况下在数据库每一个表里都有一个名为id的字段,它也被称之为主键ID,它的特点是从1开始,当每新增一条数据,id里的值就会自动加1,因为它的内容是int类型的且数据具有连续性,也适合用来作为索引,看起来我们找到了唯一ID的办法。 自增ID的问题在于以下两点:

当数据量太大,比如客户信息一张表的数据超过上千万条时,我们就面临着要分表存储的问题,在多张表的情况下,如何划分自增ID是一个很麻烦的问题。安全问题,客户端可以根据自增ID很轻易猜出我们的业务数据,按照顺序遍历就是了。 雪花算法(snowflake)

Snowflake 以 64 bit 来存储组成 ID 的4 个部分:

1、最高位占1 bit,值固定为 0,以保证生成的 ID 为正数;

2、中位占 41 bit,值为毫秒级时间戳;

3、中下位占 10 bit,值为工作机器的 ID,值的上限为 1024;

4、末位占 12 bit,值为当前毫秒内生成的不同 ID,值的上限为 4096 雪花算法

Python 代码:

import time import logging # 64位ID的划分 WORKER_ID_BITS = 5 DATACENTER_ID_BITS = 5 SEQUENCE_BITS = 12 # 最大取值计算 MAX_WORKER_ID = -1 ^ (-1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3