flickr
这是Flickr团队在2010年撰文介绍的一种主键生成策略(Ticket Servers: Distributed Unique Primary Keys on the Cheap )
flickr巧妙地使用了mysql的自增ID,及replace into语法,十分简洁地实现了分片ID生成功能。
首先,创建一个表:
CREATE TABLE
Tickets64
(
id
bigint(20) unsigned NOT NULL auto_increment,
stub
char(1) NOT NULL default '',
PRIMARY KEY (id
),
UNIQUE KEYstub
(stub
)
) ENGINE=MyISAM
使用上面的sql可以得到一个ID:
REPLACE INTO Tickets64 (stub) VALUES ('a');
SELECT LAST_INSERT_ID();
因为使用了replace into的语法,实际上,Tickets64这个表里的数据永远都是这样的:
id | stub |
---|---|
72157623227190423 | a |
那么如何解决单点故障呢。
很简单,利用mysql的自增ID即可。比如有两台ID生成服务器,设置成下面即可:
TicketServer1:
auto-increment-increment = 2
auto-increment-offset = 1TicketServer2:
auto-increment-increment = 2
auto-increment-offset = 2
优点:
- 非常简单,利用现有数据库系统的功能实现,成本小,有DBA专业维护。
- ID号单调自增,可以实现一些对ID有特殊要求的业务。
缺点:
- ID只是一个ID,没有带入时间,shardingId等信息。
网友评论