MySQL分片存储存储 生成全局唯一ID

Time:2021/07/11 19:11:17   Click:

把一个系统的数据库转为分片数据存储时,经常需要在多台的MySQL数据库服务器上生成全局唯一的ID。单一的数据存储时通常用AUTO_INCREMENT列来取得唯一的ID。但涉及到多台的服务器就不好办了。下面简介几种解决方案。


1、使用auto_increment_increment和auto_increment_offset

其实这种方式理解起来很简单,这是使用MySQL的AUTO_INCREMENT偏移来实现的。比如有两台MySQL服务器,我们就设置偏移量为2,初始值一个为0.一个为1,这样两台服务器一台为奇数,一台为偶数。这里主要重点就是服务器的初始配置和服务器数据备份。


2、全局节点创建表

也就是做一张全局的AUTO_INCREMENT表,其它节点都是从该节点取得ID。这样就可以保证多台服务器的ID唯一。


3、使用memcached

在memcached的API中有一个incr()函数,可以自动增长数字并且返回结果。另外也可以使用Redis。其实原理与上一条的差不多


4、批量的分配

向不同的服务器分配一段ID,当服务器的ID段用完,然后重新请求分配。

5、使用GUID值

可以用GUID()函数来实现全局唯一ID,但对于InnoDB存储引擎来说,这样不规则的主键对MySQL很不利。






TAG
TOP

四川尚狐网络@2012 版权所有
蜀ICP备12016524号-2

立即咨询
成都网站建设,成都做网站,四川尚狐网络