Snowflake算法

Snowflake算法是Twitter发明的一种算法,用于在分布式的高并发环境中,生成64位自增ID。这种算法产生的背景是,Twitter每秒钟能产生上万条信息,对算法的要求是:

  1. 长度固定,不能太长。
  2. id要能递增(方便客户端排序)
  3. 在分布式环境中不能重复。

41位时间戳(精确到毫秒),可以用到2082年。

10位机器id可以表示1024台机器。机器级的话你可以使用MAC地址来唯一标示工作机器,工作进程级可以使用IP+Path来区分工作进程。也可以用oracle的sequence或者Mysql的auto_increment。

12位序列号表示每毫秒能产生4096个ID,如果超过此范围,需要等到下一个毫秒。

现在对比一下其他算法:

1)数据库自增ID

大表不能做水平分表

2)时间戳+随机数

这种算法不能递增,可能重复问题,需要查询是否有过相同ID。

3)时间戳 + 用户ID

这种算法会透露用户信息

4)GUID/UUID

太长,且无序。

参考资料:

Twitter-Snowflake,64位自增ID算法详解 - 漫漫路

高并发环境下生成订单唯一流水号方法:SnowFlake |

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容