高频面试题:自增ID/UUID/雪花算法

甲蛙全栈

共 621字,需浏览 2分钟

 ·

2021-04-21 02:29



面试率极高的一道题,有几位小伙伴都问到了这个问题,本期做个简单的分享,供参考




1

自增长ID


特点:

  • 数值类型,值递增,由数据库内部生成

优点:

  • 是最简单的方式,开发简单,性能优秀

缺点:

  • 不适合分表分库场景,会出现主键冲突,ID重复,这是硬伤

  • 会有N+1次查询问题,Java代码想获取ID,需要再查询一次


2

UUID


特点:

  • 字符串类型,值没什么规律

优点:

  • 适用于分表分库场景

  • UUID一般由Java代码生成,Java不需要查询就能知道ID

缺点:

  • 性能不如自增



3

雪花算法


特点:

  • 数值类型,由Twitter提供的分布式ID算法,递增

优点:

  • 适用于分表分库场景,就是为这场景而生的

  • 由Java代码生成,Java不需要查询就能知道ID

  • 所有需要生成唯一ID的都可用雪花算法,比如登录token、日志编号等

缺点:

  • 性能稍稍不如自增

  • 生成的值较长,传递到前端number类型容易出现精度丢失,可以转成字符串解决



4

总结


如果是简单的小项目,可以考虑用自增ID

如果是中大型项目,推荐用雪花ID

至于UUID,因为有雪花算法的存在,所以可以放弃UUID

但是,小项目我也建议用雪花算法。以后做的项目多了,就不至于一会是自增ID,一会是雪花ID,不至于思维跳跃


浏览 105
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报