专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

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

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 21:32:14       共计:3640 浏览

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

谢邀~

关于这个问题,有几个方案和大家分享一下。

利用数据库生成

先说最笨的方法,利用数据库的自增长序列生成,数据库内唯一。

优点:理解起来最容易,用起来也最容易。

缺点:也非常明显了,每种数据库的实现不同,如果数据库需要迁移的话比较麻烦;最大的问题是性能问题,不太好扩展,如果并发大的时候,数据库很可能扛不住。

利用Redis/MongoDB/zookeeper生成

Redis的单线程的,利用incr和increby;MongoDB的ObjectId;ZK通过znode数据版本;都可以生成全局的唯一标识码。

优点:性能高于数据库;可以使用集群部署。

缺点:需要引入对应的组件,增加系统的复杂度。

UUID

这个是分布式架构中,生成唯一标识码最常用的算法。

UUID有基于MAC地址的,加上时间和时钟序列的,也有基于伪随机数的,基于加密哈希的。

优点:本地生成,不需要第三方组件,生成比较简单,性能好。

缺点:长度长,不利于存储,并且没有排序,是个字符串,不利于查询。解决无序问题,可参考Comb算法(combined guid/timestamp)。

Snowflake

Twitter开源,基于zk,41位时间戳(毫秒数)+10位机器的ID+12位毫秒内的流水号+1位符号位(永远是0)。

优点:性能不错,单机内递增。

缺点:依赖zk;依赖于机器时钟,分布式环境内可能会不是全局递增。

UidGenerator

百度开源,基于snowflake算法。

Leaf

美团开源。

优点:能保证全局唯一性、高可用、趋势递增(不太安全,比如泄露公司订单数量)、单调递增等。

缺点:依然会依赖第三方组件,zk或数据库。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:map的四种遍历方法_java | ·下一条:女生学python好就业吗_java

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有