分库分表的雪花算法

lamda表达式先驱 / 2023-05-13 / 原文

简而言之就是数据拆分:将一个表数据分片后放入多个表。

1.数据库自增的id,非常简单,有序递增,方便分页和排序,但是吞吐量低,不能满足高并发的情况

2.我们也可以用 Redis生成ID,通过redis的自增 INCR/INCRBY 自增原子操作命令,能保证生成的ID肯定是唯一有序的,本质上实现方式与数据库一致。比mysql的自增id效率要高,但是redis容易宕机,发生宕机时,找回最新的id比较麻烦

3.我们也可用uuid 来本地生成当成主键,但缺点是无序并且太长会消耗性能,我们的b+树的索引会有过多的写操作,所以这个用做文件名啥的可以用,但不推荐作为主键

4.我们可以用雪花算法来生成主键 ,保证其有序和唯一,他是分段式的,原始是时间差+机器的id+序列号,

毫秒数在高位,自增序列在低位,整个ID都是趋势递增的。

不依赖数据库等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的。

可以根据自身业务特性分配bit位,非常灵活。