雪花算法+sharding-jdbc实现分表

本文介绍了如何使用雪花算法优化ID生成,确保在分表情况下达到均匀分布,以及结合Sharding-JDBC在MySQL中实现分表操作。通过调整雪花算法使每毫秒内的ID不超过4096个,并利用实际序列号在0-4095之间循环,以实现ID的均匀分布。此外,详细说明了Sharding-JDBC的配置和数据库表的创建步骤,以完成分表功能。
摘要由CSDN通过智能技术生成
1. 雪花算法

雪花算法原理和实现网上都很多,大家自行搜索,但是网上的基本都存在一个问题,由于每毫秒从0开始计数,如果id生成不频繁,即每毫秒只会生成一个甚至几毫秒才需要生成一个,那么计数器就永远都是0,生成的id用于取模分表的话,就会出现永远都是插入到一个表(或规律的那几个表),无法达到均匀分布在各表的目的,所以我这里做了一下优化,能让生成的id达到均匀分布在各表的目的

思路是:原sequence现只用来控制一毫秒内生成的id不会超过4096个(这个数跟配置的MAX_SEQUENCE有关),重新定义一个变量actualSequence用来在0-4095间循环,这样就能让生成的id达到均匀分布在各表的目的,具体代码见gitee地址雪花算法+sharding-jdbc实现分表

2. sharding-jdbc实现分表

先实现好单表的功能,启动好,能实现单表的功能,然后继续。

首先,需要在mysql数据库建好你要分的表,例如我这里是0-7共8个order表,t_order_0到t_order_7

CREATE TABLE `t_order_0` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `price` decimal(10,2) NOT NULL COMMENT '单价',
  `user_id` bigint(20) unsigned NOT NULL COMMENT '用户id',
  `status` varchar(16) DEFAULT NULL COMMENT '状态',
  PRIMARY KEY (`id`)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值