当前位置: 首页 > news >正文

[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

相关文章:

  • STM32L071CBTX操作ECC508
  • java中三种主流数据库数据库(sqlserver,db2,oracle)的jdbc连接总结
  • Java NIO(四)Buffer
  • 手机的网络模式
  • Java NIO(十) ServerSocketChannel
  • Cisco路由器进行ip限速
  • Android Runtime Stats
  • pair work结束
  • springboot定制启动标志
  • Windows2000/XP启动过程详解
  • slf4j-logback 日志以json格式导入ELK
  • jquery 笔记。。。——》摘自武方博
  • Linux导入导出Oracle数据库
  • 谈谈这些年来我为什么一直在坚持
  • 3171. [TJOI2013]循环格【费用流】
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • Bytom交易说明(账户管理模式)
  • Cookie 在前端中的实践
  • in typeof instanceof ===这些运算符有什么作用
  • input的行数自动增减
  • KMP算法及优化
  • Mysql5.6主从复制
  • python学习笔记-类对象的信息
  • Spring Cloud中负载均衡器概览
  • Vultr 教程目录
  • 记录一下第一次使用npm
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 码农张的Bug人生 - 见面之礼
  • 那些被忽略的 JavaScript 数组方法细节
  • 新手搭建网站的主要流程
  • 《码出高效》学习笔记与书中错误记录
  • hi-nginx-1.3.4编译安装
  • Java总结 - String - 这篇请使劲喷我
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​TypeScript都不会用,也敢说会前端?
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十六)Flask之蓝图
  • (十五)使用Nexus创建Maven私服
  • (转)【Hibernate总结系列】使用举例
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net 使用ajax控件后如何调用前端脚本
  • .NET开源快速、强大、免费的电子表格组件
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .net下简单快捷的数值高低位切换
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /usr/bin/env: node: No such file or directory
  • /var/log/cvslog 太大
  • [ JavaScript ] JSON方法