扫码关注微信公众号

回复“面试手册”,获取本站PDF版

回复“简历”,获取高质量简历模板

回复“加群”,加入程序员交流群

回复“电子书”,获取程序员类电子书

当前位置: 计算机基础 > MySQL高频面试题 > 50.分库分表后,ID键如何处理?

分库分表后不能每个表的ID都是从1开始,所以需要一个全局ID,设置全局ID主要有以下几种方法:

  • UUID:优点:本地生成ID,不需要远程调用;全局唯一不重复。缺点:占用空间大,不适合作为索引。
  • 数据库自增ID:在分库分表表后使用数据库自增ID,需要一个专门用于生成主键的库,每次服务接收到请求,先向这个库中插入一条没有意义的数据,获取一个数据库自增的ID,利用这个ID去分库分表中写数据。优点:简单易实现。缺点:在高并发下存在瓶颈。系统结构如下图(图片来源于网络)
数据库自增id
数据库自增id
  • Redis生成ID:优点:不依赖数据库,性能比较好。缺点:引入新的组件会使得系统复杂度增加
  • Twitter的snowflake算法:是一个64位的long型的ID,其中有1bit是不用的,41bit作为毫秒数,10bit作为工作机器ID,12bit作为序列号。具体含义,1bit:第一个bit默认为0,因为二进制中第一个bit为1的话为负数,但是ID不能为负数.41bit:表示的是时间戳,单位是毫秒。10bit:记录工作机器ID,其中5个bit表示机房ID,5个bit表示机器ID。12bit:用来记录同一毫秒内产生的不同ID。
  • 美团的Leaf分布式ID生成系统,美团点评分布式ID生成系统

点击面试手册,获取本站面试手册PDF完整版