一. 为什么不推荐使用数据库自增主键?
- 采用自增主键加大数据库压力,并且业务层无法拿到新生成的ID。
- 分布式场景下容易造成主键冲突
- 无法进行数据库的水平扩展(比如电商平台在双11和618的数据量会激增这时平台方会增加数据库来应对)
二. 如果使用uuid作为主键会有什么问题?
- 生成的字符串太长, 主键作为数据的唯一标识多次重复存储的可能性很大, 空间占用大
- uuid无序随机生成, 太过杂乱, 主键最好要是递增的
- 有些版本的算法不完善, 会有一些问题(但我不太清楚)
三. 雪花算法作为业务主键有什么优缺点?
雪花算法: 时间戳+机器码(保证不同服务器不会有相同主键)+序列号(防止同一服务器1毫秒内生成多条数据导致主键相同)
时间戳可能因为机器出现误差(电信号异常)导致时钟回拨(下一秒比上一秒相同甚至早); 可以做一个判断来报异常或者sleep几毫秒来解决
要进行时间校准, 留给时间戳的位置只有41位, 而时间戳有64位(时间戳一般是用long记录的), 我们可以不必从1970年1月1日开始, 记录一个初始值, 从初始值开始, 当前时间戳减去初始值就可以得到了
-
全局唯一
-
趋势递增
-
信息安全
-
不能单调递增