道琼配资

期货配资网站

分布式全局唯一ID生成方案之snowflake算法

   炒股配资 来源:PZsqNCtDH

已有的方案:

可大致分为:

完全依赖关系/非关系型数据库递增的方案

完全不依赖数据源作为生成因子的UUID

半依赖数据源作为生成因子的snowflake

为什么推荐snowflake?

这个问题,可以从前两个方案的缺点来讲。

期货配资网站完全依赖关系/非关系型数据库递增的方案:

期货配资网站关系/非关系的区别细节就不展开了,只说说关系型。它最大的缺点是并发的瓶颈,其次是拓展性的问题,再就是还需要考虑数据库的可用性。

噢对了高可用也挺难搞的,不是说难度哈,只是这玩意是真滴麻烦啊,因为一般来说也得双写部署,不然挂掉一个master怎么办,对吧?那双写之后还需要给master配上中间件吧?噢中间件也需要高可用吧?好吧那最后还需要上个nginx或者keepalived…到了这里回头一看“完了我只想生成一个ID而已为什么还要增加那么多东西,需要额外考虑那么多东西?真蛋疼”。所以毙掉这个方案!

UUID:

UUID,神奇的东西(我没仔细研究,所以用“神奇”这个词来蒙混过去),无需数据源作为生成因子却能生成全球唯一ID。屌哇!但是用它作为ID的话还是太大了,16个字节啊,浪费空间不说还影响索引的效率。

期货配资网站不过最大的缺点还不是它的大小,而是它是生成的ID是无序的,但是主流的数据库的索引数据结构都是B+树结构,所以你明白了吧。(这里不懂的朋友请自行搜索 B+树分裂问题 ,我没有能力在三言两语内解释清楚)

所以什么是snowflake?

snowflake 算法是 twitter 开源的分布式 id 生成算法,采用 Scala 语言实现,是把一个 64 位的 long 型的 id,1 个 bit 是不用的,用其中的 41 bits 作为毫秒数,用 10 bits 作为工作机器 id,12 bits 作为序列号。(这句话是复制来的)


http://www.51songda.com