人大金仓数据库KingbaseES Bitmapset

107 阅读1分钟

金仓数据库KingbaseES Bitmapset

关键字:

KingbaseES、Bitmapset、人大金仓、KingbaseES

什么是Bitmapset

在Kingbase中,Bitmapset(位图集)是一个重要且高效的数据结构,它可以用于表示一组数值唯一的整数值,并提供了一系列集合操作来对这些值进行高效的管理。

Bitmapset内部基于位图,使用一个位数组来表示整数的集合,如果某一位被设置为1,则表示该整数包含于集合中,如下表所示:

十进制DEC

二进制位图BIN

集合中的数

64

0100,0000

6

40

0010,1000

3,5

24

0001,0100

2,4

Bitmapset的结构

typedef struct Bitmapset

{

int nwords;;

bitmapword words[FLEXIBLE_ARRAY_MEMBER];;

} Bitmapset;;

Bitmapset的数据结构如上图所示,nword表示在这个集合中有几个元素,words是记录集合中元素的位图,由柔性数组实现,。

Bitmapset的使用

在Kingbase中使用Bitmapset前,常用kes_alloc进行申请。

Bitmapset相关操作的函数都在文件bitmpa_set.c中,常用的有以下几种:

函数名

参数列表

说明

bms_equal

Bitmapset *, Bitmapset *

比较两位图集逻辑上是否相等

bms_copy

Bitmapset *

生成位图集的palloc副本

bms_free

Bitmapset *

释放位图集

bms_union

Bitmapset *, Bitmapset *

取两位图集的合集

bms_difference

Bitmapset *A, Bitmapset *B

计算集合差异(A没有B的成员)

bms_intersect

Bitmapset *, Bitmapset *

取两位图集的交集

bms_is_subset

Bitmapset *A, Bitmapset *B

A是B的子集吗

bms_is_member

int, Bitmapset *

某值是否属于集合

bms_is_empty

Bitmapset *

集合是否为空

bms_add_member

Bitmapset *,int

集合添加成员

bmd_del_member

Bitmapset *,int

删除集合中的成员