栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python生成唯一id,分布式唯一id,雪花算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python生成唯一id,分布式唯一id,雪花算法

关于toollib 什么是唯一id
- 就是不重复唯一的
- 唯一id生成的几种方式:
    - 1)数据库自动增长序列
        - 增加数据库写压力
        - 数据库故障后会出现不可用风险
        - 会暴露数据量
        - 分库分表设计难,不易扩展
    - 2)uuid
        - 数据太长
        - 数据无序
        - 若基于mac地址生成则会暴露
    - 3)使用redis的原子操作INCR和INCRBY来实现
        - 需要增加redis组件
        - 需要配置redis和编码来生成相对麻烦
    - 4)Twitter的snowflake算法
    - 5)其他方式
什么是雪花算法
- 最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本。
- 雪花算法的原理就是生成一个的 64 位比特位的 long 类型的唯一 id。
    - 最高位 1 位固定值 0,因为生成的 id 是正整数,如果是 1 就是负数了。
    - 往后的 41 位存储毫秒级时间戳,2^41/(1000*60*60*24*365)=69,大概可以使用 69 年。
    - 往后的 10 位存储机器码,包括 5 位 datacenterId 和 5 位 workerId。最多可以部署 2^10=1024 台机器。
    - 最后的 12 位存储序列号。同一毫秒时间戳时,通过这个递增的序列号来区分。即对于同一台机器而言,同一毫秒时间戳下,可以生成 2^12=4096 个不重复 id。
为什么要用雪花算法
- 数据是有序的,有利于查询及排序
- 数据长度相比uuid还是很有优势
- 不需要其他插件
- 分布式(最早就是用于分布式环境下生成唯一ID)
使用说明
- 1) 安装toollib
    pip install toollib
- 2) 调用方法
    - 方式一)直接使用
    from toollib.snowflake import snow
    uid = snow.guid()
    - 方式二)自定义相关参数
    from toollib.snowflake import SnowFlake
    snow = SnowFlake(worker_id=1, datacenter_id=1)  # 分布式需要根据ip或其他唯一标识映射机器码:worker_id与datacenter_id 
    uid = snow.guid() 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034451.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号