HGDB中如何生成唯一的19位的数值(APP)

环境

系统平台:银河麒麟(飞腾)U系 V4
版本:4.5

文档用途

客户的源库是MySQL,业务上需要生成唯一的19位的数值,客户之前采用的是雪花算法。雪花算法用到了序列号、时间戳和位运算。

在HGDB中也可以实现雪花算法,通过创建序列,获取时间戳,然后经过位移运算,拼接到一块可以得到一个唯一的19位数值。

详细信息

HGDB中雪花算法的实现方案:

1、创建序列,下面生成id的函数需要

CREATE SEQUENCE table_id_seq increment by 1 maxvalue 99999999 minvalue 1 start 1 cycle;

2、创建雪花算法生成id的函数

CREATE OR REPLACE FUNCTION getbigintid(OUT ret bigint)

returns bigint AS $$

DECLARE

   our_epoch bigint := 1314220021721;

   seq_id bigint;

   now_millis bigint;

   shard_id int := 5;

BEGIN

   seq_id := nextval('table_id_seq') % 1024;

   SELECT FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 1000) INTO now_millis;

   ret := (now_millis - our_epoch) << 23;

   ret := ret | (shard_id << 10);

   ret := ret | (seq_id);

END;

$$

LANGUAGE PLPGSQL;

3、测试

① 获取一条记录
在这里插入图片描述
② 获取1百万个id,无重复
在这里插入图片描述
③ 获取1千万个id,无重复
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值