前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库 ID 生成方案:百度 UidGenerator

数据库 ID 生成方案:百度 UidGenerator

作者头像
happyJared
发布2019-12-03 14:06:04
1.6K0
发布2019-12-03 14:06:04
举报
文章被收录于专栏:happyJared

UidGenerator 是用 Java 语言实现的基于 Snowflake 算法的唯一 ID 生成器。

UidGenerator 是以组件形式工作在应用项目中, 支持自定义 workerId 位数和初始化策略, 从而适用于 Docker 等虚拟化环境下实例自动重启、漂移等场景。在实现上,UidGenerator 通过借用未来时间来解决 Sequence 天然存在的并发限制;采用 RingBuffer 来缓存已生成的 UID, 并行化 UID 的生产和消费,,同时对 CacheLine 补齐,避免了由 RingBuffer 带来的硬件级「伪共享」问题,最终单机 QPS 可达600万。

Github地址:uid-generator

uid-generator 使用的就是 snowflake,只是在生产机器 id,也叫做 workId 时有所不同。

uid-generator 中的 workId 是由 uid-generator 自动生成的,并且考虑到了应用部署在 docker 上的情况,在 uid-generator 中,用户可以自己去定义 workId 的生成策略,默认提供的策略是:应用启动时由数据库分配。说的简单就是:应用在启动时会往数据库表 ( uid-generator 需要新增 WORKER_NODE 表)中去插入一条数据,数据插入成功后,返回的自增唯一 id 就是该机器的 workId,而数据由 host 和 port 组成。

对于 uid-generator 中的 workId,占用了22个 bit 位,时间占用了28个 bit 位,序列化占用了13个 bit 位,需要注意的是,和原始的 snowflake 不太一样,时间的单位是秒,而不是毫秒,workId 也不一样,同一个应用每重启一次就会消费一个 workId。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档