System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种openGauss数据库计算count(distinct)的方法技术_技高网

一种openGauss数据库计算count(distinct)的方法技术

技术编号:41200387 阅读:4 留言:0更新日期:2024-05-07 22:27
本发明专利技术涉及一种openGauss数据库计算count(distinct)的方法。本方法包括:批量获取一组数据,并将其存储在连续的内存空间中;按照顺序访问的方法对存储在连续内存空间中的相邻数据进行逐个比较,使用字节数组保存比较的结果;将保存比较结果的字节数组转换为比特位图的形式,使用指令集针对比较结果进行count(distinct)计算,得到本组数据的count(distinct)值。本发明专利技术方法采用批量获取和批量比较数据的方式,充分利用数据比较时的数据局部性,减少了数据保留与置换的次数,大大提高了数据比较的性能。同时本方法使用指令集进行count(distinct)计算,减少了计算的成本,提升了数据比较效率。

【技术实现步骤摘要】

本专利技术属于count(distinct)计算方法,尤其涉及一种opengauss数据库计算count(distinct)的方法。


技术介绍

1、在数据库系统中,count(distinct)是一种常见的操作,用于计算表达式结果中不重复值的个数,在数据分析统计中经常使用。

2、对于一般的数据库系统来说,count(distinct)是通过先对表达式的结果数据进行排序,然后进行相邻两个元素的一对一比较,根据比较的结果,计算结果中不重复值的个数,作为最后的count(distinct)的结果。

3、但是,在传统的实现方案中,需要一直保留上一个元素的值,便于进行比较,最后再根据比较的结果进行计数,这种操作模式对系统性能有比较大的损耗,而且无法进行批量的数据获取和比较计数。


技术实现思路

1、为了克服传统count(distinct)计算方法存在的上述缺陷,本专利技术提出了一种新的opengauss数据库计算count(distinct)的方法。本专利技术针对传统操作方法进行了改进,实现了批量地获取数据,并使用指令集进行计数计算,通过本方法可以显著提高count(distinct)的计算性能,为了叙述的方便,本专利技术技术方案中不涉及数据的排序过程,只讨论count(distinct)的计算过程,因此假定输入的数据是有序的。

2、具体地,本专利技术提供了一种opengauss数据库计算count(distinct)的方法,本方法包括:

3、s1.批量获取一组数据,并将其存储在连续的内存空间中;

4、s2.按照顺序访问的方法对存储在连续内存空间中的相邻数据进行逐个比较,使用字节数组保存比较的结果;

5、s3.将保存比较结果的字节数组转换为比特位图的形式,使用指令集针对比较结果进行count(distinct)计算,得到本组数据的count(distinct)值。

6、进一步地,本专利技术opengauss数据库计算count(distinct)的方法步骤s1中所述的批量获取一组数据,是指一次批量获取64个单位的数据。

7、进一步地,本专利技术opengauss数据库计算count(distinct)的方法步骤s2中所述的按照顺序访问的方法对存储在连续内存空间中的相邻数据进行逐个比较,当存储在连续内存空间中的数据都比较完之后,仅保留最后一个数据。

8、进一步地,本专利技术opengauss数据库计算count(distinct)的方法步骤s2中所述的使用字节数组保存比较的结果,每个结果占用1字节。

9、进一步地,本专利技术opengauss数据库计算count(distinct)的方法步骤s2中还包括:将比较的结果表述为“真”或“假”,将“真”定义为当前数据与前一个数据不相同,将“假”定义为当前数据与前一个数据相同。

10、进一步地,本专利技术opengauss数据库计算count(distinct)的方法步骤s3中包括:

11、s31.将保存比较结果的字节数组转换为比特位图的形式,将值为“真”的结果转换为bit值为“1”,将值为“假”的结果转换为bit值为“0”;

12、s32.使用指令集统计比特位图中bit值为“1”的个数,得到本组数据的count(distinct)值;

13、s33.将数据集中各组数据的count(distinct)值进行累加,获得本数据集总的count(distinct)值。

14、进一步地,本专利技术opengauss数据库计算count(distinct)的方法步骤s31中所述的将值为“真”的结果转换为bit值为“1”,将值为“假”的结果转换为bit值为“0”;转换指令包括:

15、对于支持avx512指令集的cpu,采用:_mm512_testn_epi8_mask;

16、对于支持sse4.2指令集的cpu,采用:_mm_movemask_epi8。

17、进一步地,本专利技术opengauss数据库计算count(distinct)的方法步骤s32中所述的使用指令集统计比特位图中bit值为“1”的个数,得到本组数据的count(distinct)值;包括:

18、针对64bit的位图,使用位计数指令count=__builtin_popcountll来统计比特位图中bit值为“1”的个数。

19、另外,本专利技术还提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现上述的opengauss数据库计算count(distinct)的方法的步骤。

20、综上,本专利技术opengauss数据库计算count(distinct)的方法具有以下优点:

21、(1)本专利技术方法采用批量获取数据的方式,提高了数据比较时的数据局部性,提高了数据比较的性能。

22、(2)本方法使用批量比较减少了数据保留与置换的次数,从而提高了数据比较的性能。

23、(3)本方法使用指令集的方式进行count(distinct)计算,减少了计算的成本,从而提高了数据比较的性能。

本文档来自技高网...

【技术保护点】

1.一种openGauss数据库计算count(distinct)的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的openGauss数据库计算count(distinct)的方法,其特征在于,步骤S1中所述的批量获取一组数据,是指一次批量获取64个单位的数据。

3.根据权利要求1所述的openGauss数据库计算count(distinct)的方法,其特征在于,步骤S2中所述的按照顺序访问的方法对存储在连续内存空间中的相邻数据进行逐个比较,当存储在连续内存空间中的数据都比较完之后,仅保留最后一个数据。

4.根据权利要求1所述的openGauss数据库计算count(distinct)的方法,其特征在于,步骤S2中所述的使用字节数组保存比较的结果,每个结果占用1字节。

5.根据权利要求1所述的openGauss数据库计算count(distinct)的方法,其特征在于,步骤S2中还包括:将比较的结果表述为“真”或“假”,将“真”定义为当前数据与前一个数据不相同,将“假”定义为当前数据与前一个数据相同。

6.根据权利要求5所述的openGauss数据库计算count(distinct)的方法,其特征在于,步骤S3中包括:

7.根据权利要求6所述的openGauss数据库计算count(distinct)的方法,其特征在于,步骤S31中所述的将值为“真”的结果转换为bit值为“1”,将值为“假”的结果转换为bit值为“0”;转换指令包括:

8.根据权利要求6所述的openGauss数据库计算count(distinct)的方法,其特征在于,步骤S32中所述的使用指令集统计比特位图中bit值为“1”的个数,得到本组数据的count(distinct)值;包括:

9.一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现权利要求1-8任一项所述的openGauss数据库计算count(distinct)的方法的步骤。

...

【技术特征摘要】

1.一种opengauss数据库计算count(distinct)的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的opengauss数据库计算count(distinct)的方法,其特征在于,步骤s1中所述的批量获取一组数据,是指一次批量获取64个单位的数据。

3.根据权利要求1所述的opengauss数据库计算count(distinct)的方法,其特征在于,步骤s2中所述的按照顺序访问的方法对存储在连续内存空间中的相邻数据进行逐个比较,当存储在连续内存空间中的数据都比较完之后,仅保留最后一个数据。

4.根据权利要求1所述的opengauss数据库计算count(distinct)的方法,其特征在于,步骤s2中所述的使用字节数组保存比较的结果,每个结果占用1字节。

5.根据权利要求1所述的opengauss数据库计算count(distinct)的方法,其特征在于,步骤s2中还包括:将比较的结果表述为“真”或“假...

【专利技术属性】
技术研发人员:王皓何小栋
申请(专利权)人:北京海量数据技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1