高频面试题:自增ID/UUID/雪花算法
面试率极高的一道题,有几位小伙伴都问到了这个问题,本期做个简单的分享,供参考
特点:
数值类型,值递增,由数据库内部生成
优点:
是最简单的方式,开发简单,性能优秀
缺点:
不适合分表分库场景,会出现主键冲突,ID重复,这是硬伤
会有N+1次查询问题,Java代码想获取ID,需要再查询一次
特点:
字符串类型,值没什么规律
优点:
适用于分表分库场景
UUID一般由Java代码生成,Java不需要查询就能知道ID
缺点:
性能不如自增
特点:
数值类型,由Twitter提供的分布式ID算法,递增
优点:
适用于分表分库场景,就是为这场景而生的
由Java代码生成,Java不需要查询就能知道ID
所有需要生成唯一ID的都可用雪花算法,比如登录token、日志编号等
缺点:
性能稍稍不如自增
生成的值较长,传递到前端number类型容易出现精度丢失,可以转成字符串解决
如果是简单的小项目,可以考虑用自增ID
如果是中大型项目,推荐用雪花ID
至于UUID,因为有雪花算法的存在,所以可以放弃UUID
但是,小项目我也建议用雪花算法。以后做的项目多了,就不至于一会是自增ID,一会是雪花ID,不至于思维跳跃
评论