撸了一个类似snowflake原理,生成int唯一id的库
源码 代码 原理 Twitter的snowflake 为啥写 生产环境的服务器,一直以来用的都是ulid,生成字符串排序的uid。 没写node以前,用的都是int64做唯一id。心里一直想着哪天一定要换掉ulid。 找不到合适的现有库,发现自己对js的与或运算运用不自如。刚好也想试试c++扩展,最后就写成现在这个样子了。 区别和特点 首先,使用的是snowflake原理。 但是有一些区别,js的正数最大是2^53,所以这个库最后生成是 int53位的uuid 。
53 位 bit 是这样分配的 32bit 时间戳秒:能用最多100多年。 9bit 机器:最多512台机器/线程 12bit 自增:每秒最多4096个
欢迎测试、使用、提意见、交流。
2 回复
data center id 和 work id 区分开好一些; 保证机器标示自增位够用, 尽可能给把剩余位数给时间;
@chenzeZzz 我想着这个本身可能是配置的,想着就全交由配置管理了。datacenter和workid分开设计这块,我没太理解他的应用场景,所以没写进去。 确实,时间现在是个很大的问题。不过我想着,int64普及直接换就好了。