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`)