Snowflake雪花算法
来源:互联网 发布:十八掌大数据视频 编辑:程序博客网 时间:2024/04/27 20:57
分布式系统中,一些业务场景需要获取全局唯一ID,常用方法为:twitter的snowflake、UUID/GUID、mongodb的objectId。
【UUID】
1. 使用36位的UUID,jdk的util包中UUID类生成
2. 缺点:数据长,且无序
【snowflake】
1. 数据相对短,按时间有序
2. snowflake的结构如下(每部分用-分开):
0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
1. 第一位是标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0
2. 接下来的41位为毫秒级时间(41位的长度可以使用69年),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69
3. 然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点)
4. 最后12位是毫秒内的计数。12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
一共加起来刚好64位,为一个Long型。(转换成字符串后长度最多19)
snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。经测试snowflake每秒能够产生26万个ID。
【UUID】
1. 使用36位的UUID,jdk的util包中UUID类生成
2. 缺点:数据长,且无序
【snowflake】
1. 数据相对短,按时间有序
2. snowflake的结构如下(每部分用-分开):
0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
1. 第一位是标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0
2. 接下来的41位为毫秒级时间(41位的长度可以使用69年),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69
3. 然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点)
4. 最后12位是毫秒内的计数。12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
一共加起来刚好64位,为一个Long型。(转换成字符串后长度最多19)
snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。经测试snowflake每秒能够产生26万个ID。
阅读全文
0 0
- 雪花算法(snowflake)
- Snowflake雪花算法
- 关于全局ID,雪花(snowflake)算法的说明
- Twitter的雪花算法(snowflake)自增ID
- Twitter的分布式自增ID雪花算法snowflake (Java版)
- SnowFlake算法
- snowflake 算法
- Snowflake算法
- Snowflake Snow Snowflakes寻找相似雪花
- Snowflake Snow Snowflakes 相同的雪花
- 雪花算法
- Koch snowflake fractal (科赫雪花分形)
- nyoj 130相同的雪花 || poj 3349 Snowflake Snow Snowflakes
- Snowflake算法核心
- C# 实现 Snowflake算法
- Twitter Snowflake算法详解
- Twitter Snowflake算法详解
- Snowflake算法核心
- vector/List 实现 (顺序表与双向循环链表实现)
- 门与电路
- 蓝桥杯 算法训练 6-1 递归求二项式系数值
- Win10 小问题备忘
- Kotlin高阶函数笔记1
- Snowflake雪花算法
- MyBatis全版教程+源码分析(一)
- 移动计算学习资源
- hdu 1711Number Sequence (KMP~)
- python爬虫知识点三--解析豆瓣top250数据
- c++map使用总结
- Maven学习笔记(二)-Maven中核心概念介绍
- Linux输入子系统相关文章
- 关于Python爬虫之获取海量表情包+存入数据库+搭建网站通过关键字查询表情包