记一次 golang 实现Twitter snowFlake算法 高效生成全局唯一ID

本文详细介绍了如何使用Golang实现Twitter的SnowFlake算法,该算法用于高效生成全局唯一ID。文章涵盖了算法原理、构成和具体实现,并提供了代码示例,展示了在17版Macbook Pro上并发生成一万个ID仅需0.031秒的高性能。
摘要由CSDN通过智能技术生成

记一次 golang 实现Twitter snowFlake算法 高效生成全局唯一ID

holdno · 2018-05-08 01:34:36 · 430 次点击 · 预计阅读时间 5 分钟 · 34分钟之前 开始浏览    

这是一个创建于 2018-05-08 01:34:36 的文章,其中的信息可能已经有所发展或是发生改变。

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

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

所以最后考虑到理想状态下的效率及视觉效果(整型),考虑找一个纯整型的id替代方案 
无意间看到了Twitter的snowFlake算法

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

snowFlake 雪花算法

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

原理

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

构成

这里直接借鉴前人的整理,只为给大家更加清楚的讲解

snowflake ID 的结构是一个 64 bit 的 int 型数据。

clipboard.png

  • 第1位bit: 
    二进制中最高位为1的都是负数,但是我们所需要的id应该都是整数,所以这里最高位应该为0
  • 后面的41位bit: 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值