Phoenix SEQUENCE 序列

phoenix 5.0

创建序列:

CREATE SEQUENCE SEQ_T_TEST_ID START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 CYCLE CACHE 100;

START WITH: 从1开始

NCREMENT BY: 每次增长1

MINVALUE 、MAXVALUE :最小值、最大值

CYCLE: 当达到最大值后,从最小值开始。循环的过程。

CACHE:客户端缓存100

 

删除序列:

DROP SEQUENCE SEQ_T_TEST_ID;

 

注意:序列ID,使用Java的Long类型,接收。

 

-- 查询所有序列
select * from system."SEQUENCE";

 

-- 查看当前序列值
SELECT CURRENT VALUE FOR SEQ_T_TEST_ID;

客户端连接断开,重新连接,如果直接查询某个序列当前值,是会报错的。

Error: ERROR 1206 (42Z06): NEXT VALUE FOR must be called before CURRENT VALUE FOR is called.

 

-- 使用序列值
SELECT NEXT VALUE FOR SEQ_T_TEST_ID FROM T_TEST2 LIMIT 1;

序列也可以结婚UPSERT使用,这里是集合查询使用。

原来有个想法打算使用序列,类似Oracle的rownum一样。

用来分页查询,但是phoenix是不行的。它的序列不支持子查询。

所以说,最好的方式还是结合UPSERT使用,将序列作为联合主键的其中一项。

 

序列跳跃增长:

java中,使用JDBC方式连接。如果断开,重连。那么序列的值直接进入下一个:CACHE值。

比如当前序列客户端缓存是100,我插入了30条数据。关闭释放了资源。

下次我获得连接,再次插入30条数据。我的序列就是101、102 。。 130。

所以客户端缓存不要设置太大,默认就是100。根据自己的业务逻辑来。

 

我在想使用类似线程池的方式,是否能够从一定程度上避免序列跳跃的情况呢?

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Phoenix)