分库分表后数据库全局一致性Id如何生成

自增主键

拆分了多少张表就使自增主键的自增跨度是多少,这样就是每台机器的Id都是固定的唯一的一套等差数列

缺点就是不能随意扩容,扩容起来很麻烦

UUID

UUID使用Java自己生成的64位的序列码。数字字母混合,无顺序。很难重复

无序的id做为主键给索引重建带来了性能浪费

snowFlake 算法

根据时间戳 + 服务器号 + 自增***生成全局一致性id
分库分表后数据库全局一致性Id如何生成
优点:

  1. 毫秒数在高位,符合递增规则
  2. 不依赖三方数据库
  3. 配置方便

缺点:
每台服务器的时间强一致性

leaf

有一个单独的服务器对应一张表,表字段包含了当前的号码号段以及每次号段增长的增幅,以及当前的号码使用情况

程序使用加锁 synchronized 保证每次只能有一个请求去拿号,拿到号之后会对比当前的号码还在不在号码段内,还在号码段内就直接返回,不在号码段内的话就在生成一个号码段,将号码使用情况在填充上

分库分表后数据库全局一致性Id如何生成
弱依赖zk

分库分表后数据库全局一致性Id如何生成