分享

适用于分布式唯一标识码的生成算法有哪些?

 昵称11935121 2018-05-07

现在分布式大行其道,由于数据库分布在不同的服务器上,如果用传统的自增等方式生成ID,不同的数据库上的ID难以保证不重复,而有业务影响风险!

可以说唯一标识码是分布式数据库所要面临的第一道关!

我接触分布式多年,对于唯一标识码的生成遇见过这么几种方式!

1,UUID:算法有很多种,使用同一台机器上的时间生成字节来区分同一台机器上的不同ID,使用IEEE机器识别号或者IP地址等来区分不同机器上的ID,这样不同的机器间和同一个机器都进行了区分,保证生成的UUID是全局唯一的!

JAVA有自带的UUID.randomUUID()算法来实现!

局限性:生成的ID没有顺序性!

2,snowflake:twitter自己开发的唯一ID算法,使用41位时间序列,10位机器号的标志,12位的顺序的计数,每毫秒可以生成4096个唯一序列号!

3,基于redis的原子函数incr或者incrby方法:因为redis是单线程的工作模式,利用自增方法可以得到全局唯一的ID,不过如果是没有引入redis组件的,可能需要额外的成本!

4,mongodb的objectid:因为mongodb一开始就是为了分布式而生,所以生成objectID算法也保证全局唯一性!生成的objectID也是由时间戳+机器唯一标志+进程ID+计数器!每秒钟可以生成2563个不一样的objectID!

以上是我用过的唯一ID生成算法,有问题随时找我交流!更多的技术分享,敬请关注。。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多