分布式ID生成之雪花算法
2020-06-24 04:23
686 查看
一 数据库和UUID方案的不足之处
采用数据库自增序列:
- 读写分离时,只有主节点可以进行写操作,可能有单点故障的风险
- 分表分库,数据迁移合并等比较麻烦
UUID随机数:
- 采用无意义字符串,没有排序
- UUID使用字符串形式存储,数据量大时查询效率比较低
二、关于雪花算法
有这么一种说法,自然界中并不存在两片完全一样的雪花的。每一片雪花都拥有自己漂亮独特的形状、独一无二。雪花算法也表示生成的ID如雪花般独一无二。
1. 雪花算法概述
雪花算法生成的ID是纯数字且具有时间顺序的。其原始版本是scala版,后面出现了许多其他语言的版本如Java、C++等。
2. 组成结构
分布式ID生成–雪花算法
大致由:首位无效符、时间戳差值,机器(进程)编码,序列号四部分组成。
3. 特点(自增、有序、适合分布式场景)
时间位:可以根据时间进行排序,有助于提高查询速度。
机器id位:适用于分布式环境下对多节点的各个节点进行标识,可以具体根据节点数和部署情况设计划分机器位10位长度,如划分5位表示进程位等。
序列号位:是一系列的自增id,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号
三、雪花算法的缺点
雪花算法在单机系统上ID是递增的,但是在分布式系统多节点的情况下,所有节点的时钟并不能保证不完全同步,所以有可能会出现不是全局递增的情况。
相关文章推荐
- SnowFlake雪花算法生成分布式id
- 分布式ID生成解决方案——推特雪花算法
- 基于twitter的雪花算法生成不重复id
- 分布式全局不重复ID生成算法
- mybatis plus 主键生成 Twitter雪花算法 id 及修改id为字符型
- 全局唯一ID生成常见的几种方式和twitter/snowflake(雪花算法)解析
- 分布式ID生成算法总结
- 分布式ID方案SnowFlake雪花算法分析
- C语言实现分布式自增有序的唯一ID生成算法-snowflake算法
- 分布式ID生成器 snowflake(雪花)算法
- 雪花算法 Snowflake 分布式自增id
- C语言实现分布式自增有序的唯一ID生成算法-snowflake算法
- 分布式全局不重复ID生成算法
- 理解分布式id生成算法SnowFlake
- 雪花算法(snowflake) :分布式环境,生成全局唯一的订单号
- 雪花算法【分布式ID问题】【刘新宇】
- (六)实际项目中分布式ID生成算法
- 【Zanuck 镇】编写php高性能snowflake算法插件(分布式64位唯一性自增id生成算法)
- 分布式全局ID的Twitter的Snowflake(雪花算法)
- Twitter的分布式自增ID雪花算法snowflake (Java版)