您的位置:首页 > 数据库 > MySQL

基于mysql的全局ID生成方案

2014-02-14 21:32 197 查看
背景介绍——随着数据库容量的增加,在对数据库完成垂直拆分效果不是很理想的情况下需要对数据库进行水平拆分,而由于一个表被分成了多份,不能再使用之前的单表的自增ID作为主键,所以需要一个全局的ID生成器来统一的进行ID分配,全局ID的生成有很多种方案,此处介绍一个最简单的实现。
    实现方案——mysql作为一个成熟的关系型数据库在数据的备份和功能上有很多优势,此处基于mysql的自增ID实现一个全局的ID生成器,能够减少很多的开发工作。下面说一下其实施方案,此处的mysql是单点访问,容灾方面主要靠主从机制。实施中主要是对mysql建立相应的序列表结构和书写客户端代码。此处的序列库是与一个库上的一个表对应的,即数据库名称+表名称会获取一个ID序列。
    mysql上的建库和建表语句如下:
        1.建库语句:
		CREATEDATABASE 数据库名称DEFAULTCHARSETutf8;
	2.建表语句:
		USE数据库名称;
		CREATETABLE `表名`(
  		`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  		`stub` char(1) NOT NULL DEFAULT '',
  		PRIMARY KEY (`id`),
  		UNIQUE KEY `stub`(`stub`)
		) ENGINE=MyISAM DEFAULT CHARSET=utf8;
	3.初始值的设定和步长的设定:
		ALTER TABLE 表名 AUTO_INCREMENT = 起始值;
		REPLACE INTO 表名 (stub) VALUES ('a');
		SELECT LAST_INSERT_ID();
	4.客户端获取全局ID语句:
		REPLACE INTO 表名(stub) VALUES ('a'); 
		SELECT LAST_INSERT_ID();
[code]	5.注意事项:mysql数据库引擎需要使用MyISAM,使用InnoDB性能会差很多,客
户端执行的这两条语句是在同一条连接里的,否则会获取失败。
参考链接:/article/1355659.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: