暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

人大金仓数据库KingbaseES Bitmapset

原创 数据猿 2023-12-19
242


金仓数据库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

删除集合中的成员


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论