美文网首页
阿里云DRDS Sequence

阿里云DRDS Sequence

作者: bluexiii | 来源:发表于2017-07-31 19:24 被阅读651次

    以下大部分内容非原创,整理自阿里云官方文档

    DRDS Sequence简介

    DRDS 全局唯一数字序列(64 位数字,对应 MySQL 中 Signed BIGINT 类型)的主要目标是为了生成全局唯一和有序递增的数字序列,常用于主键列、唯一索引列等值的生成

    显式与隐式

    • 显式 Sequence,通过 Sequence DDL 语法创建和维护,可以独立使用;通过select seq.nextval;获取序列值,seq 是具体 Sequence 的名字;
    • 隐式 Sequence,在为主键定义 AUTO_INCREMENT 后,用于自动填充主键,由 DRDS 自动维护。

    注意:仅拆分表和广播表指定了 AUTO_INCREMENT 后,DRDS 才会创建隐式的 Sequence。
    非拆分表并不会,非拆分表的 AUTO_INCREMENT 的值由底层 RDS(MySQL)自己生成。

    三种类型

    Group Sequence(GROUP)

    全局唯一的 Sequence,产生的值是自然数序列,但是 不保证连续和单调递增。如果未指定 Sequence 类型,DRDS 默认使用 Group Sequence。

    Time-based Sequence(TIME)

    基于时间戳 + 节点编号 + 序列号组合而成的一种 Sequence,保证全局唯一和 宏观自增(产生的序列不连续)。

    Simple Sequence(SIMPLE)

    支持自定义步长、最大值和循环/非循环利用。但每产生一个值都要进行一次持久化操作,性能不好。

    大部分场景下建议选用Group Sequence
    如果业务强依赖连续的Sequence,此时只能使用 Simple Sequence(注意性能问题)
    对于性能要求比较高时优先考虑使用 Time-based Sequence

    创建及删除显式Sequence

    默认创建GROUP类型

    CREATE SEQUENCE seq1;
    

    指定GROUP类型

    CREATE GROUP SEQUENCE seq2;
    

    指定TIME类型

    CREATE TIME SEQUENCE seq3;
    

    指定SIMPLE类型(起始值是 1000,步长为 2,最大值为 99999999999,增长到最大值后不继续循环)

    CREATE SIMPLE SEQUENCE seq4 START WITH 1000 INCREMENT BY 2 MAXVALUE 99999999999 NOCYCLE;
    

    删除Sequence

    DROP SEQUENCE seq1;
    

    查询Sequence

    SHOW SEQUENCES
    

    取Sequence的值

    select seq1.NEXTVAL;
    select seq1.NEXTVAL from dual;
    

    隐式用法

    语法

    CREATE TABLE <name> (
       <column> ... AUTO_INCREMENT [ BY GROUP | SIMPLE | TIME ],
       <column definition>,
       ...
    ) ... AUTO_INCREMENT=<start value>
    

    示例

    CREATE TABLE `group_seq_tbl` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(30) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  AUTO_INCREMENT=2000 DEFAULT CHARSET=utf8 dbpartition by hash(`id`);
    
    insert into group_seq_tbl (name) values ('foobar');
    select * from group_seq_tbl;
    

    查看建表语句

    SHOW CREATE TABLE group_seq_tbl;
    

    修改起始值

    SHOW SEQUENCES;
    ALTER SEQUENCE AUTO_SEQ_group_seq_tbl START WITH 600000;
    select AUTO_SEQ_group_seq_tbl.nextval;
    

    将GRUOP类型一个Sequence的START由200000设成300000后,测试nextval时会从400000开始。
    这不是BUG,是由GROUP特性决定的。使用SIMPLE,才可以保证连续、单调递增。

    相关文章

      网友评论

          本文标题:阿里云DRDS Sequence

          本文链接:https://www.haomeiwen.com/subject/kngrlxtx.html