开发者社区> 问答> 正文

数据库主键自增(Flicker)需要怎么操作?

数据库主键自增(Flicker)需要怎么操作?

展开
收起
kun坤 2020-04-24 11:07:15 716 0
1 条回答
写回答
取消 提交回答
  • 基于数据库主键自增的方案,名为 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系统算是可以搭建运行了。但是,有人要问:“这是一个单实例、单点的系统,万一挂了,岂不是影响所有关联的业务方?”

    2020-04-24 11:11:21
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载