Snowflake算法是Twitter发明的一种算法,用于在分布式的高并发环境中,生成64位自增ID。这种算法产生的背景是,Twitter每秒钟能产生上万条信息,对算法的要求是:
- 长度固定,不能太长。
- id要能递增(方便客户端排序)
- 在分布式环境中不能重复。
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
太长,且无序。
参考资料: