金仓数据库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
删除集合中的成员