谈谈全局唯一ID

全局唯一ID就需要保证这两个需求:


全局唯一

趋势有序

全局ID产生的几种方式


数据库自增


当服务使用的数据库只有单库单表时,可以利用数据库的 auto_increment来生成全局唯一递增ID.


优势:


简单,无需程序任何附加操作

保持定长的增量

在单表中能保持唯一性

劣势:


高并发下性能不佳,主键产生的性能上限是数据库服务器单机的上限。

水平扩展困难,在分布式数据库环境下,无法保证唯一性。

UUID


一般的语言中会自带UUID的实现,比如Java中UUID方式 UUID.randomUUID().toString(),可以通过服务程序本地产生,ID的生成不依赖数据库的实现。


优势:


本地生成ID,不需要进行远程调用。

全局唯一不重复。

水平扩展能力非常好。

劣势:


ID有128 bits,占用的空间较大,需要存成字符串类型,索引效率极低。

生成的ID中没有带Timestamp,无法保证趋势递增


#Java#
全部评论

相关推荐

点赞 8 评论
分享
牛客网
牛客企业服务