[原创]MySQL分片存储存储 生成全局唯一ID_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 22489 | 回复: 0   主题: [原创]MySQL分片存储存储 生成全局唯一ID        下一篇 
    本主题由 tngou 于 2014-11-10 11:02:04 置为精华
tngou
注册用户
等级:中校
经验:2433
发帖:192
精华:15
注册:2014-4-28
状态:离线
发送短消息息给tngou 加好友    发送短消息息给tngou 发消息
发表于: IP:您无权察看 2014-11-10 11:01:45 | [全部帖] [楼主帖] 楼主   主页

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

该贴由system转至本版2014-11-10 16:05:07




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论