了解分布式、高并发下的id生成要求
对id有哪些要求?
①全局唯一 ②趋势递增 ③效率高(生成、使用、索引) ④控制并发
趋势递增:并不要求像1,2,3…一样严格有序递增,只要整体式来看是增长的,有规律可循即可。(一般id为数据库索引,对MySQL中的B+树等比较友好)
效率高:生成(每秒生成的id数)、使用(最好是整形的数字,相比字符串更有优势)、索引(对整形有序数字构建索引相比字符串更快,查询也是)
生成id的策略一:UUID(长度为36的字符串)
由以当前日期和时间、时钟序列和全局唯一的IEEE机器识别号(一般为MAC地址)等元素组成。
优点:①使用简单;②不依赖其他组件;③不影响数据库拓展
缺点:①数据库索引效率低;②太过于无意义,用户不友好;③长度36的字符串,空间占用大;④应用集群环境,机器多的时候,重复几率大
生成id的策略二:数据库自增长
MySQL中使用AUTO_INCREMENT,Oracle中使用Sequence系列
集群环境下,不同的库设置不同的初始值,步长一致。
优点:①无需编码