首页 > 代码库 > flickrf 分布式主键生成方案【mysql】

flickrf 分布式主键生成方案【mysql】

【相关链接:http://blog.csdn.net/bluishglc/article/details/7710738】

具体做法:

1:找两台服务器,分别配置:

1 TicketServer1:2 auto-increment-increment = 23 auto-increment-offset = 14 5 TicketServer2:6 auto-increment-increment = 27 auto-increment-offset = 2

 

例如:可以在全局global,本地session或者local动态设置这两个参数以控制auto_increment的增量与偏移量。本例在session中设置这二者的值:

具体做法是:
1.1:修改自增量

  

mysql> set @@session.auto_increment_increment=2;Query OK, 0 rows affected (0.00 sec)mysql> show variables like ‘auto_increment_increment‘;+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 |+--------------------------+-------+1 row in set (0.00 sec)mysql>

   

1.2:修改步长 

 

mysql> set @@session.auto_increment_offset=3;Query OK, 0 rows affected (0.00 sec)mysql> show variables like ‘auto_increment_offset‘;+-----------------------+-------+| Variable_name | Value |+-----------------------+-------+| auto_increment_offset | 3 |+-----------------------+-------+1 row in set (0.00 sec)mysql>

  

2:每张表建数据库flickr,建表Tickets:

CREATE TABLE `Tickets` (`id` bigint(20) unsigned NOT NULL auto_increment,`stub` char(1) NOT NULL default ‘‘,PRIMARY KEY (`id`),UNIQUE KEY `stub` (`stub`)) ENGINE=MyISAM

  

注意:

2.1:表中必须包含了一个自增主键和一个unique字段。
2.2:stub字段为char(1)
2.3:引擎选用MyIsam。


3:使用LAST_INSERT_ID()函数取序列值,使用REPLACE INTO插入数据,这是很讨巧的作法,主要是希望利用mysql自身的机制生成ID,不仅是因为这样简单,更是因为我们需要ID按照我们设定的方式(初值和步长)来生成。

4:SELECT LAST_INSERT_ID()必须要于REPLACE INTO语句在同一个数据库连接下才能得到刚刚插入的新ID,否则返回的值总是0

5:使用纯粹的JDBC来实现对表的操作。

flickrf 分布式主键生成方案【mysql】