美文网首页
snowflake雪花算法

snowflake雪花算法

作者: Superwind20 | 来源:发表于2017-11-19 17:48 被阅读107次

分布式系统中,一些业务场景需要获取全局唯一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。

相关文章

  • snowflake雪花算法

    分布式系统中,一些业务场景需要获取全局唯一ID,常用方法为:twitter的snowflake、UUID/GUID...

  • SnowFlake(雪花算法)

    首先雪花算法就是生成一个64位的二进制数据,最终转换成长度为19的十进制正整数整型数据 解释一下这64位分别代表什...

  • SNOWFLAKE雪花算法

    对比 UUID UUID (Universally Unique Identifier) 的标准型式包含 32 个...

  • ID生成器之-Twitter雪花算法的Java实现

    SnowFlake Twitter 的 雪花算法 算法的 Java 实现版本。 算法思路 8字节(64位)占位的模...

  • Snowflake-雪花算法

    分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一...

  • 高并发和大流量的解决方案

    生成唯一ID-雪花算法:https://github.com/godruoyi/php-snowflake](ht...

  • 基于Redis生成全局ID

    上一篇 <<<基于Twitter的snowflake(雪花)算法实现全局ID[https://www.jiansh...

  • 雪花算法(SnowFlake)Java实现

    分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种。 算法原理 SnowFlake...

  • 雪花算法(Snowflake)顺序ID

    分库分表场景下如何选择主键 数据库本身有自己的自增id,但在分库分表场景下,则无法保证主键的唯一,这时就需要可以替...

  • Java实现雪花算法(SnowFlake)

    雪花算法SnowFlake可以保证: 1.所有生成的id按时间趋势递增2.整个分布式系统内不会产生重复id(通过w...

网友评论

      本文标题:snowflake雪花算法

      本文链接:https://www.haomeiwen.com/subject/usrpvxtx.html