当前位置:   article > 正文

分布式唯一ID的几种生成方案,一次性全掌握!_pcba怎么加入唯一id

pcba怎么加入唯一id

上一篇文章,我们聊了一下分库分表相关的一些基础知识,具体可以参见:《用真实业务场景告诉你,高并发下如何设计数据库架构?》

这篇文章,我们就接着分库分表的知识,来具体聊一下全局唯一id如何生成。


在分库分表之后你必然要面对的一个问题,就是id咋生成?

因为要是一个表分成多个表之后,每个表的id都是从1开始累加自增长,那肯定不对啊。

举个例子,你的订单表拆分为了1024张订单表,每个表的id都从1开始累加,这个肯定有问题了!

你的系统就没办法根据表主键来查询订单了,比如id = 50这个订单,在每个表里都有!

所以此时就需要分布式架构下的全局唯一id生成的方案了,在分库分表之后,对于插入数据库中的核心id,不能直接简单使用表自增id,要全局生成唯一id,然后插入各个表中,保证每个表内的某个id,全局唯一。

比如说订单表虽然拆分为了1024张表,但是id = 50这个订单,只会存在于一个表里。

那么如何实现全局唯一id呢?有以下几种方案。


(1)方案一:独立数据库自增id

这个方案就是说你的系统每次要生成一个id,都是往一个独立库的一个独立表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个id。拿到这个id之后再往对应的分库分表里去写入。

比如说你有一个auto_id库,里面就一个表,叫做auto_id表,有一个id是自增长的。

那么你每次要获取一个全局唯一id,直接往这个表里插入一条记录,获取一个全局唯一id即可,然后这个全局唯一id就可以插入订单的分库分表中。

这个方案的好处就是方便简单,谁都会用。缺点就是单库生成自增id,要是高并发的话,就会有瓶颈的,因为auto_id库要是承载个每秒几万并发,肯定是不现实的了。


(2)方案二:uuid

这个每个人都应该知道吧,就是用UUID生成一个全局唯一的id。

好处就是每个系统本地生成,不要基于数据库来了

不好之处就是,uuid太长了,作为主键性能太差了,不适合用于主键。

如果你是要随机生成个什么文件名了,编号之类的,你可以用uuid,但是作为主键是不能用uuid的。


(3)方案三:获取系统当前时间

这个方案的意思就是获取当前时间作为全局唯一的id。

但是问题是,并发很高的时候,比如一秒并发几千,会有重复的情况,这个是肯定不合适的。

一般如果用这个方案,是将当前时间跟很多其他的业务字段拼接起来ÿ

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/395417
推荐阅读
相关标签
  

闽ICP备14008679号