• [Phoenix] 七、如何使用自增ID


    摘要: 在传统关系型数据库中设计主键时,自增ID经常被使用。不仅能够保证主键的唯一,同时也能简化业务层实现。Phoenix怎么使用自增ID,是我们这篇文章的重点。

    在传统关系型数据库中设计主键时,自增ID经常被使用。不仅能够保证主键的唯一,同时也能简化业务层实现。Phoenix怎么使用自增ID,是我们这篇文章的重点。

    一、语法说明

    1. 创建自增序列

    CREATE SEQUENCE [IF NOT EXISTS] SCHEMA.SEQUENCE_NAME
    [START WITH number]
    [INCREMENT BY number]
    [MINVALUE number]
    [MAXVALUE number]
    [CYCLE]
    [CACHE number]
    • start用于指定第一个值。如果不指定默认为1.
    • increment指定每次调用next value for后自增大小。 如果不指定默认为1。
    • minvaluemaxvalue一般与cycle连用, 让自增数据形成一个环,从最小值到最大值,再从最大值到最小值。
    • cache默认为100, 表示server端生成100个自增序列缓存在客户端,可以减少rpc次数。此值也可以通过phoenix.sequence.cacheSize来配置。

    示例

    CREATE SEQUENCE my_sequence;-- 创建一个自增序列,初始值为1,自增间隔为1,将有100个自增值缓存在客户端。
    CREATE SEQUENCE my_sequence START WITH -1000
    CREATE SEQUENCE my_sequence INCREMENT BY 10
    CREATE SEQUENCE my_cycling_sequence MINVALUE 1 MAXVALUE 100 CYCLE;
    CREATE SEQUENCE my_schema.my_sequence START 0 CACHE 10

    2. 删除自增序列

    DROP SEQUENCE [IF EXISTS] SCHEMA.SEQUENCE_NAME

    示例

    DROP SEQUENCE my_sequence
    DROP SEQUENCE IF EXISTS my_schema.my_sequence
    
    

    二、案例

    1. 需求

    对现有的书籍进行编号并存储,要求编号是惟一的。存储书籍信息的建表语句如下:

    create table books(
      id integer not null primary key,
      name varchar,
      author varchar
    )SALT_BUCKETS = 8;

    由于自增ID作为rowkey, 容易造成集群热点问题,所以在创建表时最好通过加盐的方式解决这个问题

    2.通过自增ID,实现唯一编码,并简化实现。

    • 创建自增序列,初始值为10000,自增间隔为1,缓存大小为1000.

      CREATE SEQUENCE book_sequence START WITH 10000 INCREMENT BY 1 CACHE 1000;
    • 通过自增序列,写入数据信息。

      UPSERT INTO books(id, name, author) VALUES( NEXT VALUE FOR book_sequence,'DATA SCIENCE', 'JHONE');
      UPSERT INTO books(id, name, author) VALUES( NEXT VALUE FOR book_sequence,'Effective JAVA','Joshua Bloch');
    • 查看结果
      Screen_Shot_2018_03_27_at_17_25_19

    三、References

    https://phoenix.apache.org/sequences.html

    转自:https://yq.aliyun.com/articles/570847

     


    交流

    如果大家对HBase有兴趣,致力于使用HBase解决实际的问题,欢迎加入Hbase技术社区群交流:

    微信HBase技术社区群,假如微信群加不了,可以加秘书微信: SH_425 ,然后邀请您。

     

     

    ​  钉钉HBase技术社区群

  • 相关阅读:
    手把手教你接入微信支付
    Java中的深浅拷贝问题,你清楚吗?
    DeimosC2 源码阅读
    一行命令删除空的docker images
    docker build出现交互式时区设置解决
    Amass项目源码阅读(整体架构)
    Prometheus时序数据库-磁盘中的存储结构
    Prometheus时序数据库-内存中的存储结构
    解Bug之路-ZooKeeper集群拒绝服务
    日常Bug排查-Nginx重复请求?
  • 原文地址:https://www.cnblogs.com/hbase-community/p/8853573.html
Copyright © 2020-2023  润新知