其他分享
首页 > 其他分享> > 全局唯一ID生成常用方案简介

全局唯一ID生成常用方案简介

作者:互联网

问题由来:分库分表之后面临的一个主要问题就是:如何保证表的主键的唯一性。而且数据路由一般是通过ID来路由的。那么如何来保证一个分布在多个库的一张表的主键的唯一性呢?

UUID:

一长串的东西,随机性高,一般不会出现重复。

但不适用于Mysql的Innodb引擎的表的主键,InnoDB存储引擎底层使用B+Tree数据结构,而且主键所在的索引为聚集索引,要求主键是有序插入的,像UUID这种没有顺序的主键会导致频繁的页分裂,降低效率。

常用于命名生成的临时文件。

数据库生成:

单独搞个数据表,这个数据表就是利用Mysql的主键递增特性,来生成ID,但具体这个表最多可以搞到多少行,生成多少ID,有待验证。。。

因为每次需要访问Mysql来获取全局唯一ID,所以降低了响应速度与并发量,适用于海量数据、并发量不高的场景中。

表字段拼接生成:

就是自定义一种方式来作为主键ID,比如时间戳,或者是:时间戳 + 库序号 + 序列号,或者是根据一些业务字段等等。但还是要注意那个问题:如果使用的是InnoDB存储引擎,还是要保证主键的有序性。

Snowflake算法生成:

0 (代表正数) + 时间戳(毫秒)+ 机房号 + 机器号(数据库所在机器) + 递增序列号 生成的一个64bit的long型数值。



Redis生成:

利用redis的incrBy来生成,原子操作,在高并发环境下可以保证唯一性。

标签:唯一性,主键,简介,生成,并发,Mysql,全局,ID
来源: https://blog.csdn.net/weixin_35794878/article/details/122636005