登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
Gitee AI
NEW
我知道了
查看详情
登录
注册
代码拉取完成,页面将自动刷新
开源项目
>
程序开发
>
常用工具包
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
1
Star
17
Fork
6
竹智
/
bamboo-leaf
代码
Issues
0
Pull Requests
0
Wiki
统计
流水线
服务
Gitee Pages
JavaDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
我知道了,不再自动展开
发行版
最新版
v1.0.2
d2099fc
2021-06-01 22:44
对比
分步式序列Bamboo-leaf V1.0.2
竹智
1、优化配置。 2、新增shortDateSegmentId算法。
最后提交信息为:
优化配置
预览版本
v1.0.1
cc37eed
2021-03-29 22:03
对比
分步式序列Bamboo-leaf V1.0.1
竹智
1、解决部分BUG 2、bamboo-segment 支持动态步长。 3、优化日志 4、优化注释 5、优化Demo
最后提交信息为:
demo优化
预览版本
1.0.0
185be57
2021-02-26 23:53
对比
分步式序列Bamboo-leaf V1.0.0
竹智
# bamboo-leaf简介 > Bamboo-leaf是用Java开发的一款分布式id生成系统,基于数据库号段(segment)算法、雪花(snowflake)算法实现,基于数据库号段(segment)算法是参考了滴滴出行的tinyid及阿里巴巴的tddl-Sequence的思路,取了两都的优点,同时加入了新的实现方式,扩展算法。让能适合更多的场景,高并发、高可用得到提升,接入更方便简洁。雪花(snowflake)算法,参考了原生算法及百度(uid-generator)实现方式,重定义了snowflake各段的长度,解决了workerid的节点限制问题及时间回拨序列重复的问题,提升了每毫秒产生的序列个数。 同时提供了Bamboo-leaf-client(sdk)使id生成本地化,获得了更好的性能与可用性。均通过Bamboo-leaf-client方式接入,每天生成百亿级别的id。 # bamboo-leaf架构图 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0109/232350_635a122a_68305.jpeg "bamboo-leaf.jpg") # bamboo-leaf代码结构 bamboo-leaf ----bamboo-leaf-server ----bamboo-leaf-client ----bamboo-leaf-core ----bamboo-leaf-autoconfigure ----bamboo-leaf-demo # bamboo-leaf接口列表 ## 1、snowflake算法接口列表 接口类:BambooLeafSnowflakeClient | 序号 | 接口 | 名称 | 功能说明 | |----|----|----|------| | 1|public long snowflakeId(String namespace);| 原生雪花算法 | 返回Long类型 | | 2|public String snowflakeId16(String namespace); | 原生雪花算法+随机数 | 返回16位字段串:<br>13位(原生雪花算法转36进制), <br>3位(随机数转36进制) | | 3|public String snowflakeId20(String namespace); | 原生雪花算法+namespace+随机数 | 返回20位字段串:<br>13位(原生雪花算法转36进制), <br>3位(namespace转36进制), <br>3位(随机数转36进制) | ## 2、segment算法接口列表 接口类:BambooLeafSnowflakeClient | 序号 | 接口 | 名称 | 功能说明 | |----|----|----|------| | 1|public Long segmentId(String namespace);| 返回1~Long.MAX_VALUE | 返回Long类型 | | 2|public Long dateSegmentId(String namespace); | 返回19位日期long的序列<br>格式:8位yyyyMMdd+11位序列 | 例如:202101010000000001<br>序列大于99999999999后会重置。<br>该算法每天最大99999999999序号 | | 3|public String dateSegmentId(String namespace, String prefix);| 返回前缀+日期String的序列<br>格式:前缀+8位yyyyMMdd+11位序列| 例如:P202101010000000001<br>序列大于99999999999后会重置。<br>该算法每天最大99999999999序号 | | 4|public Long timeSegmentId(String namespace); | 返回19位时间long的序列<br>格式:12位yyMMddHHmmss+7位序列 | 例如:2101010101010000001<br>序列大于9999999后会重置。<br>该算法每秒最大9999999序号 | | 5|public String timeSegmentId(String namespace, String prefix);| 返回前缀+时间String的序列<br>格式:前缀+12位yyMMddHHmmss+7位序列 | 例如:P2101010101010000001<br>序列大于9999999后会重置。<br>该算法每秒最大9999999序号 | # 性能与可用性 ## 高性能 1. leaf-segment 单节点qps可达20w+(取决于step,服务器性能)。 2. leaf-snowflake 单节点qps最大可达262143。 说明:集群的qps=单节点qps*节点数。 ## 可用性 1. leaf-segment 依赖DB,当DB不可用时,因为client有缓存,还可以使用一段时间(取决于step及序列生成的QPS). 可以支持多个DB(必须保证DB间数据的一致性). 2. leaf-snowflake 启动时获取Worderid依赖DB,之前当DB不可用时不受影响。 总结:Local client去中心化的模式最高可用性,不因bamboo-server中心化服务不可用而影响。 # Bamboo的特性 1、全局唯一的long型id. 2、趋势递增,整体连续. 3、提供中心化 Remote server模式和去中心化 Local client模式方式接入. 4、支持segment及snowflake两种基础算法扩展算法. 5、leaf-segment支持不同IDC同序列不同的序号生成机制(A机房:1、3、5... B机房:2.4.6...). 6、leaf-snowflake解决workerid的节点限制问题及时间回拨序列重复的问题. 7、支持高并发、高可用的保障机制. # 使用场景 适用场景: 1、纯数字的序列(如:日志表ID编号). 2、有业务属性的序列(如订单号:P2101010101010000001). 3、完全无序的字符串序列(如二维码号:023eqt01pd6o001a04ui). 4、分库分表,多机房部署的,各表的ID序列。 不适用场景: 1、对顺序有严格要求的场景。 # 依赖 JDK1.8+,maven,mysql, java client目前仅依赖jdk.
最后提交信息为:
优化文档
下载
请输入验证码,防止盗链导致资源被占用
取消
下载
Java
1
https://gitee.com/sunney/bamboo-leaf.git
git@gitee.com:sunney/bamboo-leaf.git
sunney
bamboo-leaf
bamboo-leaf
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册