一种数据库的数据分组方法、设备、介质及程序产品与流程
本技术涉及计算机,特别涉及一种数据库的数据分组方法、设备、介质及程序产品。
背景技术:
1、在数据库查询处理中,分组操作与top操作通常作为两个独立阶段顺序执行。分组阶段需要将全部输入数据按分组键进行聚合,在哈希分组方式下,当数据量较大或分组键基数较高时,哈希表需要维护大量分组及其集函数值,内存占用显著。完成全部分组后,再根据排序或筛选条件选取前若干行作为top结果。这一过程中,分组阶段无法获知最终需要的行数上限,即使后续仅需少量分组,前期仍须为所有可能的分组分配并维护内存空间,导致大量最终被舍弃的分组占用了有限的内存资源。
2、因此,如何降低分组操作与top操作对内存资源的占用,是本领域技术人员需要解决的问题。
技术实现思路
1、有鉴于此,本技术的目的在于提供一种数据库的数据分组方法、设备、介质及程序产品,以使分组操作与top操作同步进行,降低分组操作与top操作对内存资源的占用。
2、第一方面,本技术提供了一种数据库的数据分组方法,包括:
3、按批次获取待分组数据;
4、利用预设的第一哈希表对所述待分组数据的各行数据进行分组,若所述第一哈希表的分组数小于预设top行数、且小于所述第一哈希表的容量,则在所述第一哈希表中存在与当前行同键值的已有分组时,根据当前行更新所述已有分组的集函数值;不存在所述已有分组时,将当前行作为新分组插入所述第一哈希表;其中,所述容量为预设物理上限与预设top行数中的最小值;
5、若所述分组数不小于预设top行数,则存在所述已有分组时更新所述集函数值,不存在所述已有分组时丢弃当前行;
6、若所述分组数达到所述容量、且未达到预设top行数,则存在所述已有分组时更新所述集函数值;不存在所述已有分组时,若当前行属于非重复分组、且所述当前分组数与当前第一溢出数据的行数之和未达到预设top行数,则将当前行归入所述第一溢出数据;若当前行属于非重复分组、且当前分组数与当前第一溢出数据的行数之和达到预设top行数,则丢弃当前行;若当前行无法判定为非重复分组,将当前行归入第二溢出数据;
7、当所有待分组数据处理完毕,输出最新第一哈希表;
8、利用预设的第二哈希表对所述第一溢出数据和所述第二溢出数据进行分组处理,最终输出最新第二哈希表;所述第二哈希表的容量为预设物理上限与目标剩余行数中的最小值;所述目标剩余行数为预设top行数与所述最新第一哈希表内总行数的差值;
9、基于所述最新第一哈希表和所述最新第二哈希表,得到符合预设top行数的分组结果。
10、可选地,还包括:
11、若所述分组数达到所述容量、未达到预设top行数、且当前分组数与当前第一溢出数据的行数之和达到预设top行数,则不存在所述已有分组时,若当前行属于非重复分组,则丢弃当前行;若当前行无法判定为非重复分组,将当前行归入所述第二溢出数据。
12、可选地,利用复合过滤器检测当前行是否属于非重复分组;
13、相应地,利用复合过滤器检测当前行是否属于非重复分组,包括:
14、若所述复合过滤器中任意子过滤器判定当前行的分组键非重复,则确定当前行属于非重复分组;否则,无法判定当前行是否为非重复分组。
15、可选地,所述利用预设的第二哈希表对所述第一溢出数据和所述第二溢出数据进行分组处理,最终输出最新第二哈希表,包括:
16、从所述第二溢出数据中逐批获取数据;
17、利用所述第二哈希表对获取的各行数据进行分组,若所述第二哈希表的当前分组数小于所述目标剩余行数、且小于所述第二哈希表的容量,则在所述第二哈希表中存在与当前行同键值的已有分组时,根据当前行更新该分组的集函数值并标记当前行已摘除;不存在时,将当前行作为新分组插入所述第二哈希表并标记当前行已摘除;
18、若所述当前分组数达到所述目标剩余行数,则存在已有分组时更新该分组的集函数值,不存在时丢弃当前行;
19、若所述当前分组数达到所述第二哈希表的容量、且未达到所述目标剩余行数,则执行溢出处理操作;
20、若所述第二溢出数据处理完毕、且所述当前分组数达到所述目标剩余行数,则从所述第一溢出数据中逐批获取数据,对获取的每行数据;若在所述第二哈希表中存在同键值的已有分组时,根据当前行更新该分组的集函数值并丢弃当前行;若不存在,则丢弃当前行;
21、若所述第一溢出数据处理完毕,则输出当前第二哈希表作为所述最新第二哈希表。
22、可选地,还包括:
23、若所述第二溢出数据处理完毕、且所述当前分组数未达到所述目标剩余行数,则从所述第一溢出数据中逐批获取数据,对获取的每行数据;
24、若在所述第二哈希表中存在同键值的已有分组,则根据当前行更新该分组的集函数值并丢弃当前行;若不存在,则输出当前行,并累计所述第一溢出数据的输出行数;其中,所述输出行数在所述第一溢出数据处理完毕后,并入所述第二哈希表;
25、当所述当前分组数、所述输出行数与所述总行数之和达到预设top行数时,对后续获取的所述第一溢出数据,当存在同键值的已有分组时更新集函数值并丢弃当前行,不存在时丢弃当前行,不执行输出操作。
26、可选地,所述溢出处理操作包括:
27、遍历所述第一溢出数据和所述第二溢出数据;对能与所述第二哈希表中已有分组合并的行数据进行合并操作后,标记已摘除;若所述总行数与所述当前分组数之和达到预设top行数,则输出当前第二哈希表作为所述最新第二哈希表;否则,输出当前第二哈希表、记录所述第二哈希表的累计输出行数,重新初始化所述第二哈希表;
28、遍历所述第二溢出数据中的未摘除行;对能与所述第二哈希表中已有分组合并的行数据进行合并操作后,标记为已摘除;否则,将当前行数据作为新分组插入所述第二哈希表,并标记为已摘除;
29、遍历所述第一溢出数据中的未摘除行,对能与所述第二哈希表中已有分组合并的行数据进行合并操作后,标记为已摘除;若所述总行数、所述当前分组数与所述第二哈希表的累计输出行数之和达到预设top行数,则输出当前第二哈希表;否则,输出当前第二哈希表、更新所述第二哈希表的累计输出行数,重新初始化所述第二哈希表,并继续处理未摘除行。
30、可选地,还包括:
31、当预设top行数小于或等于所述总行数时,跳过所述目标剩余行数的计算及对所述第一溢出数据和所述第二溢出数据的分组处理,基于所述最新第一哈希表得到符合预设top行数的分组结果。
32、第二方面,本技术提供了一种数据库的数据分组装置,包括:
33、获取模块,用于按批次获取待分组数据;
34、第一分组模块,用于利用预设的第一哈希表对所述待分组数据的各行数据进行分组,若所述第一哈希表的分组数小于预设top行数、且小于所述第一哈希表的容量,则在所述第一哈希表中存在与当前行同键值的已有分组时,根据当前行更新所述已有分组的集函数值;不存在所述已有分组时,将当前行作为新分组插入所述第一哈希表;其中,所述容量为预设物理上限与预设top行数中的最小值;若所述分组数不小于预设top行数,则存在所述已有分组时更新所述集函数值,不存在所述已有分组时丢弃当前行;若所述分组数达到所述容量、且未达到预设top行数,则存在所述已有分组时更新所述集函数值;不存在所述已有分组时,若当前行属于非重复分组、且所述当前分组数与当前第一溢出数据的行数之和未达到预设top行数,则将当前行归入所述第一溢出数据;若当前行属于非重复分组、且当前分组数与当前第一溢出数据的行数之和达到预设top行数,则丢弃当前行;若当前行无法判定为非重复分组,将当前行归入第二溢出数据;
35、第一输出模块,用于当所有待分组数据处理完毕,输出最新第一哈希表;
36、第二分组模块,用于利用预设的第二哈希表对所述第一溢出数据和所述第二溢出数据进行分组处理,最终输出最新第二哈希表;所述第二哈希表的容量为预设物理上限与目标剩余行数中的最小值;所述目标剩余行数为预设top行数与所述最新第一哈希表内总行数的差值;
37、第二输出模块,用于基于所述最新第一哈希表和所述最新第二哈希表,得到符合预设top行数的分组结果。
38、第三方面,本技术提供了一种电子设备,包括:
39、存储器,用于存储计算机程序;
40、处理器,用于执行所述计算机程序,以实现前述公开的数据库的数据分组方法。
41、第四方面,本技术提供了一种非易失性存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的数据库的数据分组方法。
42、第五方面,本技术提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现前述公开的数据库的数据分组方法的步骤。
43、可见,本技术能够用预设top行数来约束哈希分组过程,使得分组阶段能够感知top行数上限。其中,第一哈希表的容量取预设物理上限与预设top行数中的较小值,当第一哈希表中分组数达到该容量后,新出现的分组键数据不再直接插入哈希表,而是根据其是否可能为重复分组分别归入两类溢出数据,从而避免为超出top需求的分组持续分配内存。当第一哈希表分组数已满足top行数时,后续无法合并的新数据直接丢弃,不再产生额外的内存和处理开销。对于溢出数据,采用容量与目标剩余行数绑定的第二哈希表进行处理,进一步控制内存占用的上限。由此,分组过程中无用数据能够被尽早识别和舍弃,哈希表只需维护与top需求相当的分组数量,使得内存压力得到有效缓解,由此使分组操作与top操作同步进行,能够降低分组操作与top操作对内存资源的占用。
44、相应地,本技术提供的一种数据库的数据分组装置、设备、介质及程序产品,也同样具有上述技术效果。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com