把一个系统的数据库转为分片数据存储时,经常需要在多台的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很不利。