美文网首页雪花算法学习(完)
雪花算法(04)机器信息

雪花算法(04)机器信息

作者: 郭艺宾 | 来源:发表于2019-08-11 16:29 被阅读0次

时间部分生成后,下一步是机器信息,占10位。我们这里把机器信息分成两部分,一部分是数据中心id,占5位,一部分是机器id,占5位。这两个id可以在部署项目的时候根据不同的机器自定义不同的id,这样能人为的保障每个id都不同。比如:

/** 设置数据中心id为1 */

private static final long DATA_ID = 1L;

/** 设置机器id为2 */

private static final long WORK_ID = 2L;

也可以根据自己机器的情况自动生成,不过有很小很小的风险会重复,这个风险碰到的几率不大,当然如果能手动设置还是最好的。我们来说一下自己生成的情况。

我们的jdk库中,有api可以获取本地机器的hostname和hostaddress,我们来看一下:

我们来把hostname的信息作为数据中心id,把hostaddress的信息作为机器id,如何把两个字符串改为两个数字id呢?其实很简单。获取字符串的字节数组,然后把数组的每个数字相加,对节点数的最大值取余:

每个id的长度都是5,二进制中5个1的最大值就是31,所以数据id和机器id每个的最大值也是31,下面是获取两个id的方法:

如果出现异常,返回一个随机数,保证id的可靠性。下面可以定义两个的id了:

因为机器信息分成了两部分分别生成的,所以,要分别位移,数据id要向左位移17位,机器id要向左位移12位。正好占据10位。

现在我们再来看下第二部分机器信息的限制,这两个id每个的值都占五位,二进制的值从 00000  到11111,整数的范围就是0-31之间共32个。那么雪花算法可以部署的机器数就是32*32=1024个,这是机器信息的限制,现在看这数字也是足足的够了。注意如果自己给这两个参数赋值,也要限制在31之内。

代码地址:https://gitee.com/blueses/snowflake-demo  04

相关文章

  • 雪花算法(04)机器信息

    时间部分生成后,下一步是机器信息,占10位。我们这里把机器信息分成两部分,一部分是数据中心id,占5位,一部分是机...

  • 雪花算法(07)雪花算法最终版

    雪花算法初步完成后,我们讨论了几个位运算的写法,大家知道雪花算法一旦确定后,很多数字都是定死的,比如机器占多少位,...

  • 雪花算法(05)毫秒内序列

    前面的内容把雪花算法的时间部分和机器信息部分都生成了,下面来生成最后一部分,就是毫秒内的序列。什么意思呢?我们在生...

  • 1 Introduction and Motivation

    1 什么是机器学习 机器学习:能从数据中自动提取有价值信息的算法设计。三要素:数据、模型、学习。模型(model)...

  • GBDT入门教程之原理、所解决的问题、应用场景讲解

    来源:GBDT入门教程之原理、所解决的问题、应用场景讲解2017-04-23 机器学习算法与Python学习GBD...

  • DeepWalk学习

    DeepWalk Background 使用机器学习的算法解决问题需要有大量的信息,但是现实世界中的网络中的信息往...

  • 雪花算法

    public class IdSnowCreate { }

  • 雪花算法

  • 雪花算法

    世界上没有两片一样的雪花.雪花算法不会生成一样的的ID 基本原理: 采用的是时间戳+机器号+没毫秒生成的序列号 第...

  • 雪花算法

    雪花算法的原理和实现Java_雨夜青草的博客-CSDN博客_雪花算法 64 = 1 41 10 12

网友评论

    本文标题:雪花算法(04)机器信息

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