常见全局唯一Id生成策略分析

,利用数据库的auto_increment,生成全局唯一Id

      这种方式操作简单,核心功能由数据库提供,唯一性能够得到保证,因为是自增,所以能保证有序,步长固定还能借此来对表进行水平拆分(这样破坏了有序性).最大的缺点是将压力全部压在了数据库上.

,单点批量ID生成服务

     大概的思路就是由单点程序批量生成,唯一且有顺序的Id,当有需要的时候就派发出去,这种策略保证了唯一和数据的有序,但最大的问题在于单点系统的可靠性,当需求量达到一定级别的时候,可能还会出现性能瓶颈.当然可靠性可以通过主从服务来解决,性能就不是这么好解决的了.

,uuid 

      uuid无需赘言,性能好,扩展性好,缺点也很明显,无法有序,长度太长,检索效率低.

,使用毫秒数

     效率高,保证有序,检索效率高,这是其优点,缺点也很明显,当并发里达到1000以上是无法保证唯一性的

,snowflake算法

    snowflake是twitter开源的分布式ID生成算法,其核心思想是:一个long型的ID,使用其中41bit作为毫秒数,10bit作为机器编号,12bit作为毫秒内序列号。这个算法单机每秒内理论上最多可以生成1000*(2^12),也就是400W的ID,完全能满足业务的需求。当然算法提供的最最宝贵的东西是思想,完全可以按照这种思想来自己实现自己的生成算法.

小结

各种生成策略并没有绝对的优劣之分,往往还要看业务需要,所以了解这些之后,关键是选择自己业务适合的.

你可能感兴趣的:(架构师)