SnowFlake
分布式ID生成一个很小但是很重要的基础应用,比如想要手动给数据库中的一条数据设置一个id。
最先能想到是UUID。UUID保证对在同一时空中的所有机器都是唯一的。UUID的缺点是太长(32位),并且既有数字又有字母。
如果想要生成纯数字的id,则Twitter的SnowFlake是一个非常优秀的id生成方案。
实现也非常简单,8Byte是一个Long,8Byte等于64bit,SnowFlake就是由毫秒级的时间41位 + 机器ID 10位 + 毫秒内序列12位组成。当然也可以根据需要调整机器位数和毫秒内序列位数比例。
SnowFlake的优点是:
- 比UUID短,一般9-17位左右
- 性能非常出色,每秒几十万
Java实现:
1 | public class SnowFlake { |
参考资料:
https://leokongwq.github.io/2016/11/02/distributed-id-generation.html
https://www.cnblogs.com/relucent/p/4955340.html
https://github.com/beyondfengyu/SnowFlake/blob/master/SnowFlake.java