ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-22 13:33:12  阅读:140  来源: 互联网

标签:唯一性 主键 简介 生成 并发 Mysql 全局 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有