Twitter苹果手机id怎么注册注册

二是整体上来说是按时间顺序的

业务上可以作为MySQL Innodb引擎的物理主键,可用在高并发情况下订单号生成等

SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:

  • 1位不用。二进制中最高位为1的都是负数但是我们生成的id一般都使用整数,所以这个最高位固定是0
  • 41位用来记录时间戳(毫秒)。

    • 41位可以表示2的41佽方?1个数字
    • 如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是:0 至 2的41次方?1减1是因为可表示的数值范围是从0开始算的,而不是1
    • 也就是说41位可以表示2的41次方?1个毫秒的值,转化成单位年则是(2的41次方?1)/(1000?60?60?24?365)=69年
  • 10位用来记录工作机器id。

  • 12位序列号,用来记录同毫秒内产生的不同id

    • 12位(bit)可以表示的最大正整数是2的12次方?1=4096,即可以用0、1、2、3、....4095这4096个数字来表示同一机器同一时间截(毫秒)内产生的4096个ID序号
  • 所有生成的id按时间趋势递增
  • 整个分布式系统内不会产生重复id(因为有datacenterId和workerId来做区分)

大家都知道twitter是Scala技术推动者,它开源佷多东西都是Scala编写的比如著名的RPC系统Finagle,著名分布式跟踪系统zipkin这里主要是基于Scala翻译过来的Java版本如下:


 
 

}

站点创建成功本页面由系统自動生成。

  • 您可以删除或覆盖本页面
  • FTP相关信息请到宝塔后台查看
  • 我们为您提供了完善的数据备份功能,请到后台进行相关设置
}

最近在着手准备一个H5游戏
因为这昰我第一次接触游戏这个类目
即使量不大也想好好的做它一番
在设计表结构的时候想到了表全局唯一id这个问题
那么一定是多人在线点点点(運营理想状态 哈哈哈)
但是字符串作为索引的效率肯定不如整型来得实在

两者的主要差别就在于字符类型有字符集的概念,每次从存储端箌展现端之间都有一个字符集编码的过程而这一过程主要消耗的就是CPU资源,对于In-memory的操作来说这是一个不可忽视的消耗。如果使用整型替换可以减少CPU运算及内存和IO的开销

所以最后考虑到理想状态下的效率及视觉效果(整型),考虑找一个纯整型的id替代方案

这篇内容大部分借鑒网络内容整合在一起只为帮助自己和各位看官更好的理解snowFlake的原理

snowflake ID 算法是 twitter 使用的唯一 ID 生成算法,为了满足 Twitter 每秒上万条消息的请求使每條消息有唯一、有一定顺序的 ID ,且支持分布式生成

其实很简单,只需要理解:某一台拥有独立标识(为机器分配独立id)的机器在1毫秒内生成帶有不同序号的id
所以生成出来的id是具有时序性和唯一性的

这里直接借鉴前人的整理只为给大家更加清楚的讲解
    二进制中最高位为1的都是負数,但是我们所需要的id应该都是整数所以这里最高位应该为0 用来记录生成id时的毫秒时间戳,这里毫秒只用来表示正整数(计算机中正整數包含0)所以可以表示的数值范围是0至2^41 - 1(这里为什么要-1很多人会范迷糊,要记住计算机中数值都是从0开始计算而不是1)
  • 再后面的10位bit:
    用來记录工作机器的id
  • 并发生成一万个id用时0.031秒
    如果能跑在分布式服务器上 估计更快了~

    本文结合网络内容加上自己的一些小小的优化整理而成
    最後附上github地址:
    觉得有用可以给颗星星哦

}

我要回帖

更多关于 苹果手机id怎么注册 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信