该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。
该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。
python版详见开源项目https://github.com/erans/pysnowflake。
核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:
1
0
---
0000000000
00000
00
在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。
这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。
hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。
https://github.com/dcshi/lua-resty-UUID我一直用这个UUID的库,还挺方便的。。就是不太好看在 2014年10月23日星期四UTC+8上午9时01分42秒,xinqiyang写道:hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。 --
个人建议,使用写一个库,编译为so文件,然后通过ffi调用在 2014年10月23日 下午3:30,Xiaohui Sun <1lo...@gmail.com>写道:https://github.com/dcshi/lua-resty-UUID我一直用这个UUID的库,还挺方便的。。就是不太好看在 2014年10月23日星期四UTC+8上午9时01分42秒,xinqiyang写道:hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。 --
似乎不用这么麻烦。。。。直接用lua写就行在 2014年10月23日 下午3:51,lhmwzy <lh...@gmail.com>写道:个人建议,使用写一个库,编译为so文件,然后通过ffi调用在 2014年10月23日 下午3:30,Xiaohui Sun <1lo...@gmail.com>写道:https://github.com/dcshi/lua-resty-UUID我一直用这个UUID的库,还挺方便的。。就是不太好看在 2014年10月23日星期四UTC+8上午9时01分42秒,xinqiyang写道:hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。 --
https://github.com/dcshi/lua-resty-UUID我一直用这个UUID的库,还挺方便的。。就是不太好看在 2014年10月23日星期四UTC+8上午9时01分42秒,xinqiyang写道:hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。
https://github.com/liexusong/ukghttp://www.tuicool.com/articles/nyUFni像这个,但我没看明白,如何生成。最后生成的ID是什么样子的?在 2014年10月23日 下午4:03,lhmwzy <lhm...@gmail.com>写道:似乎不用这么麻烦。。。。直接用lua写就行在 2014年10月23日 下午3:51,lhmwzy <lhm...@gmail.com>写道:个人建议,使用写一个库,编译为so文件,然后通过ffi调用在 2014年10月23日 下午3:30,Xiaohui Sun <1lo...@gmail.com>写道:https://github.com/dcshi/lua-resty-UUID我一直用这个UUID的库,还挺方便的。。就是不太好看在 2014年10月23日星期四UTC+8上午9时01分42秒,xinqiyang写道:hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。 --
似乎不用这么麻烦。。。。直接用lua写就行在 2014年10月23日 下午3:51,lhmwzy <lhm...@gmail.com>写道:个人建议,使用写一个库,编译为so文件,然后通过ffi调用在 2014年10月23日 下午3:30,Xiaohui Sun <1lo...@gmail.com>写道:https://github.com/dcshi/lua-resty-UUID我一直用这个UUID的库,还挺方便的。。就是不太好看在 2014年10月23日星期四UTC+8上午9时01分42秒,xinqiyang写道:hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。 --
我就是不想走网络,就自己写了个了,这个是基于时间的,不同机器时间也不一样,还是得去一个服务那去取比较好。还是得用个独立的库,如果就一台机器还好。。在 2014年10月23日星期四UTC+9下午6时13分42秒,lhmwzy写道:https://github.com/liexusong/ukghttp://www.tuicool.com/articles/nyUFni像这个,但我没看明白,如何生成。最后生成的ID是什么样子的?在 2014年10月23日 下午4:03,lhmwzy <lhm...@gmail.com>写道:似乎不用这么麻烦。。。。直接用lua写就行在 2014年10月23日 下午3:51,lhmwzy <lhm...@gmail.com>写道:个人建议,使用写一个库,编译为so文件,然后通过ffi调用在 2014年10月23日 下午3:30,Xiaohui Sun <1lo...@gmail.com>写道:https://github.com/dcshi/lua-resty-UUID我一直用这个UUID的库,还挺方便的。。就是不太好看在 2014年10月23日星期四UTC+8上午9时01分42秒,xinqiyang写道:hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。 -- --
是想自己写个,还是已经写完了?在 2014年10月24日 上午9:55,xinqiyang <xinq...@gmail.com>写道:我就是不想走网络,就自己写了个了,这个是基于时间的,不同机器时间也不一样,还是得去一个服务那去取比较好。还是得用个独立的库,如果就一台机器还好。。在 2014年10月23日星期四UTC+9下午6时13分42秒,lhmwzy写道:https://github.com/liexusong/ukghttp://www.tuicool.com/articles/nyUFni像这个,但我没看明白,如何生成。最后生成的ID是什么样子的?在 2014年10月23日 下午4:03,lhmwzy <lhm...@gmail.com>写道:似乎不用这么麻烦。。。。直接用lua写就行在 2014年10月23日 下午3:51,lhmwzy <lhm...@gmail.com>写道:个人建议,使用写一个库,编译为so文件,然后通过ffi调用在 2014年10月23日 下午3:30,Xiaohui Sun <1lo...@gmail.com>写道:https://github.com/dcshi/lua-resty-UUID我一直用这个UUID的库,还挺方便的。。就是不太好看在 2014年10月23日星期四UTC+8上午9时01分42秒,xinqiyang写道:hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。 -- --
我就是不想走网络,就自己写了个了,这个是基于时间的,不同机器时间也不一样,还是得去一个服务那去取比较好。还是得用个独立的库,如果就一台机器还好。。在 2014年10月23日星期四UTC+9下午6时13分42秒,lhmwzy写道:https://github.com/liexusong/ukghttp://www.tuicool.com/articles/nyUFni像这个,但我没看明白,如何生成。最后生成的ID是什么样子的?在 2014年10月23日 下午4:03,lhmwzy <lhm...@gmail.com>写道:似乎不用这么麻烦。。。。直接用lua写就行在 2014年10月23日 下午3:51,lhmwzy <lhm...@gmail.com>写道:个人建议,使用写一个库,编译为so文件,然后通过ffi调用在 2014年10月23日 下午3:30,Xiaohui Sun <1lo...@gmail.com>写道:https://github.com/dcshi/lua-resty-UUID我一直用这个UUID的库,还挺方便的。。就是不太好看在 2014年10月23日星期四UTC+8上午9时01分42秒,xinqiyang写道:hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。 --
不知道不走网络保证唯一性可有法子实现?我现在的思路是事先就对每一台机器的lua代码分配好了id段在 2014年10月24日星期五 UTC+8上午9:55:36,xinqiyang写道:我就是不想走网络,就自己写了个了,这个是基于时间的,不同机器时间也不一样,还是得去一个服务那去取比较好。还是得用个独立的库,如果就一台机器还好。。在 2014年10月23日星期四UTC+9下午6时13分42秒,lhmwzy写道:https://github.com/liexusong/ukghttp://www.tuicool.com/articles/nyUFni像这个,但我没看明白,如何生成。最后生成的ID是什么样子的?在 2014年10月23日 下午4:03,lhmwzy <lhm...@gmail.com>写道:似乎不用这么麻烦。。。。直接用lua写就行在 2014年10月23日 下午3:51,lhmwzy <lhm...@gmail.com>写道:个人建议,使用写一个库,编译为so文件,然后通过ffi调用在 2014年10月23日 下午3:30,Xiaohui Sun <1lo...@gmail.com>写道:https://github.com/dcshi/lua-resty-UUID我一直用这个UUID的库,还挺方便的。。就是不太好看在 2014年10月23日星期四UTC+8上午9时01分42秒,xinqiyang写道:hi,大家最近在看twitter的Snowflake的实现自增ID的算法,也想在openresty里面做个,或者说大家已经实现了么?看他们已经有其他语言版本的实现了!挺强大的,现在自己写着,最终生成一个string,如果想得到64bit的Long类型的数的话,得使用哪个库?查了下 bignumber就只有bc的库,可是是lua 5.1下的。。不能用。。。该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。python版详见开源项目https://github.com/erans/pysnowflake。核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:10---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。 -- --