基于数据库主键自增的方案,名为 Flicker。主要是利用MySQL的自增主键来实现分布式ID。
以下为 Flicker实现分布式ID的主流做法:
1、需要单独建立一个数据库实例:flicker
create database `flicker`;
2、创建一张表:sequence_id
create table sequence_id(
id bigint (20) unsigned NOT NULL auto_increment,
stub char (10) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY stub (stub)
) ENGINE=MyISAM;
为什么用 MyISAM?不用 InnoDB?个人推测原因是:flicker算法出来的时候,MySQL的默认引擎还依旧是 MyISAM而不是 InnoDB,作者只是想用默认引擎而已,并无其他原因。
stub: 票根,对应需要生成 Id 的业务方编码,可以是项目名、表名甚至是服务器 IP 地址。
stub 要设置为唯一索引
3、使用以下SQL来获取ID
REPLACE INTO ticket_center (stub) VALUES ('test');
SELECT LAST_INSERT_ID();
Replaceinto 先尝试插入数据到表中,如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据, 否则直接插入新数据。一般 stub为特殊的相同的值。
这样,一个分布式ID系统算是可以搭建运行了。但是,有人要问:“这是一个单实例、单点的系统,万一挂了,岂不是影响所有关联的业务方?”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。