CN116383255A - 聚合查询方法、系统、设备及存储介质 - Google Patents

聚合查询方法、系统、设备及存储介质 Download PDF

Info

Publication number
CN116383255A
CN116383255A CN202310353722.4A CN202310353722A CN116383255A CN 116383255 A CN116383255 A CN 116383255A CN 202310353722 A CN202310353722 A CN 202310353722A CN 116383255 A CN116383255 A CN 116383255A
Authority
CN
China
Prior art keywords
array
tuple
packet
aggregation
target
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310353722.4A
Other languages
English (en)
Inventor
金天波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba Cloud Computing Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Cloud Computing Ltd filed Critical Alibaba Cloud Computing Ltd
Priority to CN202310353722.4A priority Critical patent/CN116383255A/zh
Publication of CN116383255A publication Critical patent/CN116383255A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • G06F16/24556Aggregation; Duplicate elimination
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本说明书一个或多个实施例提供一种聚合查询方法、系统、设备及存储介质。所述方法包括:响应于数据库聚合查询请求,确定待查询的数据表、分组字段及聚合方式;创建分组数组;将数据表切分为至少两个数据分表,并依次对各个数据分表进行如下处理:对于数据分表中的多个元组,并行执行以下操作:查找分组数组中是否存在与元组的分组字段相同的目标分组字段;若是,记录数组索引;在遍历完数据分表中的所有元组之后,对于未记录数组索引的待处理元组,在分组数组中新增待处理元组的分组字段,并记录数组索引;根据各个元组记录的数组索引、分组数组和聚合方式进行聚合计算,得到聚合查询结果。有利于提高聚合查询效率。

Description

聚合查询方法、系统、设备及存储介质
技术领域
本说明书一个或多个实施例涉及数据库查询技术领域,尤其涉及一种聚合查询方法、系统、设备及存储介质。
背景技术
在数据库查询功能中,存在聚合类查询,包括分组运算(group by)、去重运算(distinct)等类型的查询,此类查询常见目的是根据数据库中的指定维度字段对需要聚合分析的字段进行分组之后做聚合运算,比如求和、求平均或者计数等等。
目前常见的数据库引擎在实现分组聚合类查询时,考虑到不同元组属于同一分组的可能性,因此只能顺序串行地对需要聚合分析的字段进行分组之后再进行聚合运算,导致聚合查询效率较低。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种聚合查询方法、系统、设备及存储介质。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种响应于数据库聚合查询请求,确定待查询的数据表、分组字段以及聚合方式;
创建分组数组,所述分组数组用于存储所述数据表中的不同分组字段;
将所述数据表切分为至少两个数据分表,并依次对各个数据分表进行如下处理:
对于数据分表中的多个元组,并行执行以下操作:查找所述分组数组中是否存在与所述元组的分组字段相同的目标分组字段;若是,记录所述目标分组字段的数组索引;
在遍历完所述数据分表中的所有元组之后,对于未记录数组索引的待处理元组,在所述分组数组中新增所述待处理元组的分组字段,并记录所述待处理元组的分组字段的数组索引;
根据所述数据分表中各个元组记录的数组索引、所述分组数组和所述聚合方式进行聚合计算,得到聚合查询结果。
可选的,还包括:
创建哈希表;所述哈希表包括哈希桶,不同哈希桶用于存储指向所述分组数组中的不同分组字段的数组索引;
所述查找所述分组数组中是否存在与所述元组的分组字段相同的目标分组字段,包括:
根据所述元组中的分组字段进行哈希运算,得到哈希值;
根据所述哈希值确定所述元组在所述哈希表中对应的目标哈希桶;
确定所述元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段是否相同;
对于未记录数组索引的待处理元组,所述方法还包括:
在该待处理元组对应的目标哈希桶中存储所述待处理元组的分组字段的数组索引。
可选的,所述哈希表中的哈希桶用于使用链表结构存储至少一个数组索引;
所述确定所述元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段是否相同,包括:
若所述目标哈希桶不为空,根据所述目标哈希桶以链表结构存储的首个数组索引从所述分组数组中读取首个目标分组字段;
将该元组的分组字段与读取的目标分组字段值进行比较;
若两者相同,记录读取的目标分组字段的数组索引;
若两者不同,根据所述目标哈希桶以链表结构存储的下一个数组索引从所述分组数组中读取下一个目标分组字段值,并重复执行将该元组的分组字段与读取的目标分组字段值进行比较的步骤。
可选的,对于未记录数组索引的待处理元组,在所述分组数组中新增该待处理元组的分组字段,在该待处理元组对应的目标哈希桶中存储所述待处理元组的分组字段的数组索引,以及记录所述待处理元组的分组字段的数组索引,包括:
在未记录数组索引的待处理元组有多个的情况下,对多个待处理元组依次顺序进行如下处理:
对于各个待处理元组,确定该待处理元组在哈希表中对应的目标哈希桶;
若所述目标哈希桶为空、或者该元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段不同,在所述分组数组中新增该待处理元组的分组字段、以及在该待处理元组对应的目标哈希桶中存储对应的数组索引,并记录该数组索引;
若该待处理元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段相同,记录所述目标分组字段的数组索引。
可选的,所述方法还包括:
创建聚合数组,所述聚合数组用于存储所述分组数组中的不同分组字段的聚合结果;
所述根据所述数据分表中各个元组记录的数组索引、所述分组数组和所述聚合方式进行聚合计算,包括:
对于所述数据分表中各个元组,根据所述数组索引读取所述分组数组中的分组字段,并确定所述聚合数组中是否存在该分组字段的聚合结果;
若存在,利用所述聚合方式和该元组更新所述聚合结果;
若不存在,利用所述聚合方式和该元组计算得到该元组的分组字段对应的聚合结果,并将该元组的分组字段对应的聚合结果保存在所述聚合数组中。
可选的,还包括:
在处理完所有的数据分表之后,将所述分组数组和所述聚合数组作为所述数据库聚合查询请求的聚合查询结果返回,以在显示界面中显示所述聚合查询结果。
可选的,所述哈希表中的哈希桶的数量根据所述数据表中的元组数量确定,且两者呈正相关关系。
可选的,所述哈希表中的哈希桶的数量至少大于所述数据表中的元组数量的2倍。
可选的,所述将所述数据表切分为至少两个数据分表,包括:
根据数据分表包含的预设元组数量,将所述数据表切分为至少两个数据分表;其中,所述预设元组数量是根据处理器的并行处理能力确定的。
根据本说明书一个或多个实施例的第二方面,提出了一种资源调度系统,该资源调度系统包括:
与资源节点集群中的任一目标资源节点对应的目标资源节点端调度器,用于执行第一方面任意一项所述方法的步骤;
与所述资源节点集群对应的中心调度器,用于执行第一方面任意一项所述方法的步骤。
根据本公开实施例的第三方面,提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器执行所述可执行指令时,用于实现第一方面所述的方法。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述方法的步骤。
本公开的实施例提供的技术方案可以包括以下有益效果:
本公开实施例中,响应于数据库聚合查询请求,确定待查询的数据表、分组字段以及聚合方式;创建分组数组,所述分组数组用于存储所述数据表中的不同分组字段;将所述数据表切分为至少两个数据分表,并依次对各个数据分表进行如下分组处理和聚合处理。
在进行分组处理时,将分组处理分成两个部分以减少数据间的依赖性,第一部分是第一部分针对于多个元组并行查找分组数组中是否存在匹配的分组字段;即对于数据分表中的多个元组,可以并行执行以下操作:查找所述分组数组中是否存在与所述元组的分组字段相同的目标分组字段;若是,记录所述目标分组字段的数组索引;该并行过程可以有效提高分组效率。第二部分针对于未匹配数据进行分组处理,即在遍历完所述数据分表中的所有元组之后,对于未记录数组索引的待处理元组,在所述分组数组中新增所述待处理元组的分组字段,并记录所述待处理元组的分组字段的数组索引;而由于经过了第一部分的分组处理之后,第二部分的数据量有限,可以充分发挥处理器的数据预取能力。
最后进行聚合处理过程,即根据所述数据分表中各个元组记录的数组索引、所述分组数组和所述聚合方式进行聚合计算,得到聚合查询结果。本实施例通过将分组过程分成两个部分可以有效提高分组聚合的查询效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
图1是相关技术中的对数据表进行分组聚合处理的示意图。
图2是一示例性实施例提供的一种聚合查询方法的流程示意图。
图3是一示例性实施例提供的将数据表进行切分的示意图。
图4是一示例性实施例提供的对数据分表1进行分组处理的示意图。
图5是一示例性实施例提供的对数据分表2进行分组处理的示意图。
图6是一示例性实施例提供的数据分组1的聚合结果的示意图。
图7是一示例性实施例提供的数据分组2的聚合结果的示意图。
图8是一示例性实施例提供的一种设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
为方便理解本说明书实施例,这里先对相关术语进行说明:
元组(tuple):是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。在二维表里,元组也称为行。
数据库聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据。
常用的聚合函数包括但不限于:(1)count(col):表示求指定列的总行数(聚合函数不对空值进行统计);(2)max(col):表示求指定列的最大值;(3)min(col):表示求指定列的最小值;(4)sum(col):表示求指定列的和;(5)avg(col):表示求指定列的平均值。但不限于此。
假设对于如表1所述的数据表,用户想要查询每个人的总成绩时,需要将姓名作为分组字段,对成绩进行求和计算,则对应的数据库聚合查询语句为:SELECT name,sum(score)FROM table GROUP BY name;该数据库聚合查询语句指明了需要查询的数据表、分组字段(按照name分组)以及聚合方式(对分数score求和)从而得到如表2所述的聚合查询结果。
表1
Name Score
张三 95
李四 80
张三 88
王五 65
李四 78
表2
Name Total Score
张三 183
李四 158
王五 65
目前常见的数据库引擎在实现分组聚合类查询时,会创建一个分组数组和聚合数组,该分组数组用于存储所述数据表中的不同分组字段,该聚合数组用于存储所述分组数组中的不同分组字段的聚合结果。针对于数据表中的每个待分组的元组,首先查找在分组数组中是否存在匹配的分组字段,如果存在,则相应地更新聚合数组中该匹配的分组字段对应的聚合结果,如果不存在则需要在分组数组中新建分组(即在分组数组中插入该待分组的元组的分组字段)。
在一个例子中,请参阅图1,假设需要对数据表中的数字进行统计,以确定不同数字Number的个数,则对应的数据库聚合查询语句为:SELECT Number,Count(*)FROM tableGROUP BY Number;比如在T-1时刻查找ID为5的元组在分组数组中存在匹配的分组字段14,则在聚合数组中对应的聚合结果从1更改为2;又比如在T时刻查找ID为6的元组在分组数组中不存在匹配的分组字段,则需要在分组数组中新增“26”,在聚合数组中对应的聚合结果更新为1。需要说明的是,图1中的分组数组和聚合数组为T时刻的分组聚合结果,在ID为7以及之后的还未遍历完。
考虑到不同元组属于同一分组的可能性,例如对于同一分组的两个元组,后一个元组需要依赖于前一个元组所创建的分组,换句话说,后一个元组需要在前一个元组所创建的分组基础上进行聚合,比如图1中的ID为4、7的两个元组需要依赖于ID为2的元组(这3个元组的分组字段15属于同一分组),因此只能顺序串行地对需要聚合分析的字段进行分组之后再进行聚合运算,导致聚合查询效率较低。
针对于相关技术中的问题,本说明书实施例提供了一种聚合查询方法,响应于数据库聚合查询请求,确定待查询的数据表、分组字段以及聚合方式;创建分组数组,所述分组数组用于存储所述数据表中的不同分组字段;将所述数据表切分为至少两个数据分表,并依次对各个数据分表进行如下分组处理和聚合处理。
在进行分组处理时,将分组处理分成两个部分以减少数据间的依赖性,第一部分是第一部分针对于多个元组并行查找分组数组中是否存在匹配的分组字段;即对于数据分表中的多个元组,可以并行执行以下操作:查找所述分组数组中是否存在与所述元组的分组字段相同的目标分组字段;若是,记录所述目标分组字段的数组索引;该并行过程可以有效提高分组效率。第二部分针对于未匹配数据进行分组处理,即在遍历完所述数据分表中的所有元组之后,对于未记录数组索引的待处理元组,在所述分组数组中新增所述待处理元组的分组字段,并记录所述待处理元组的分组字段的数组索引;而由于经过了第一部分的分组处理之后,第二部分的数据量有限,可以充分发挥处理器的数据预取能力。
最后进行聚合处理过程,即根据所述数据分表中各个元组记录的数组索引、所述分组数组和所述聚合方式进行聚合计算,得到聚合查询结果。本实施例通过将分组过程分成两个部分可以有效提高分组聚合的查询效率。
本说明书实施例提供的聚合查询方法可以由安装有数据库引擎的电子设备来执行,所述电子设备包括但不限于服务器、云服务器、智能电话/手机、平板计算机、个人数字助理(PDA)、膝上计算机、台式计算机或者任何其他具备计算能力的装置。其中,数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。
示例性的,所述电子设备包括有处理器和存储器,存储器存储有可在处理器上运行的可执行指令,所述处理器执行所述可执行指令时实现本说明书实施例提供的聚合查询方法。
示例性的,所述电子设备集成一计算机程序产品,该电子设备执行该计算机程序产品时实现本说明书实施例提供的聚合查询方法。
示例性的,本说明书实施例提供的聚合查询方法可用于对云原生数据库中存储的数据进行聚合查询。
在一些实施例中,请参阅图2,图2示出了一种聚合查询方法的流程示意图。所述方法可由电子设备来执行,所述方法包括:
在S101中,响应于数据库聚合查询请求,确定待查询的数据表、分组字段以及聚合方式。
在S102中,创建分组数组,所述分组数组用于存储所述数据表中的不同分组字段。
在S103中,将所述数据表切分为至少两个数据分表。
在S104中,依次对各个数据分表进行如下处理:对于数据分表中的多个元组,并行执行以下操作:查找所述分组数组中是否存在与所述元组的分组字段相同的目标分组字段;若是,记录所述目标分组字段的数组索引;在遍历完所述数据分表中的所有元组之后,对于未记录数组索引的待处理元组,在所述分组数组中新增所述待处理元组的分组字段,并记录所述待处理元组的分组字段的数组索引;根据所述数据分表中各个元组记录的数组索引、所述分组数组和所述聚合方式进行聚合计算,得到聚合查询结果。
本实施例中,在将所述数据表切分为至少两个数据分表之后,依次对各个数据分表进行如下分组处理和聚合处理。在进行分组处理时,将分组处理分成两个部分以减少数据间的依赖性,第一部分是第一部分针对于多个元组并行查找分组数组中是否存在匹配的分组字段,并行过程有利于提高处理效率;第二部分针对于未匹配数据进行分组处理,而由于经过了第一部分的分组处理之后,第二部分的数据量有限,可以充分发挥处理器的数据预取能力。最后进行聚合处理过程,得到聚合查询结果。通过将分组过程分成两个部分可以有效提高分组聚合的查询效率。
在一种可能的实施方式中,所述数据库聚合查询请求可以携带有数据库聚合查询语句,电子设备通过对数据库聚合查询语句进行解析,可以确定待查询的数据表、分组字段以及聚合方式。
在另一种可能的实施方式中,所述数据库聚合查询请求也可以是对数据库聚合查询语句进行解析后得到的结果,该数据库聚合查询请求可以直接携带待查询的数据表、分组字段以及聚合方式。本实施例对此不做任何限制。
在一些实施例中,电子设备可以创建分组数组,所述分组数组用于存储所述数据表中的不同分组字段。其中,在还未进行分组处理之前,分组数组为空,即分组数组还未存储任何分组字段。
在一些实施例中,电子设备可以将待查询的数据表切分为至少两个数据分表。示例性的,电子设备可以根据数据分表包含的预设元组数量,将所述数据表切分为至少两个数据分表;在一个例子中,所述预设元组数量可以根据处理器的并行处理能力确定,即处理器的并行处理能力越高,则预设元组越多。当然,也可以根据其他因素(比如硬件预取Prefetch能力)进行设置或者由开发人员基于自身经验进行设置,本实施例对此不做任何限制。
例如数据表中有20个元组,数据分表的预设元组数量是5个,则可以把数据表切分成4个数据分表,每个数据分表有5个元组。
在一些实施例中,在将数据表切分为至少两个数据分表之后,电子设备可以依次对各个数据分表进行如下的分组处理和聚合处理。
这里对分组处理过程进行示例性说明:
在一种可能的实现方式中,对于数据分表中的多个元组,电子设备可以并行执行以下操作:遍历所述分组数组中的所有分组字段,以查找所述分组数组中是否存在与所述元组的分组字段相同的目标分组字段;若是,表示所述元组的分组字段与分组数组中的目标分组字段属于同一分组,则记录所述目标分组字段的数组索引;若否,则继续对下一个元组进行处理。接着,在遍历完所述数据分表中的所有元组之后,对于未记录数组索引的待处理元组,即表示分组数组没有存储该待处理元组的分组字段,则电子设备在所述分组数组中新增所述待处理元组的分组字段,并记录所述待处理元组的分组字段的数组索引。
在另一种可能的实现方式中,考虑到上述实现方式在查找分组数组中是否存在与所述元组的分组字段相同的目标分组字段的过程中,需要遍历所述分组数组中的所有分组字段,在数据量较大的情况下,该过程耗费的查找时间较长。
因此,为了提高查找效率,本实施例实现在依次对各个数据分表进行分组处理和聚合处理之前,先创建哈希表,所述哈希表包括哈希桶,不同哈希桶用于存储指向所述分组数组中的不同分组字段的数组索引。则电子设备在依次处理各个数据分表的过程中,对于数据分表中的多个元组,可以并行执行以下操作:根据所述元组中的分组字段进行哈希运算,得到哈希值;根据所述哈希值确定所述元组在所述哈希表中对应的目标哈希桶;确定所述元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段是否相同;若是,记录所述目标分组字段的数组索引;若否,则继续对下一个元组进行处理。在遍历完所述数据分表中的所有元组之后,对于未记录数组索引的待处理元组,即表示分组数组没有存储该待处理元组的分组字段,则电子设备在所述分组数组中新增该待处理元组的分组字段,在该待处理元组对应的目标哈希桶中存储所述待处理元组的分组字段的数组索引,以及记录所述待处理元组的分组字段的数组索引。本实施例借助于哈希表减少查找次数,提高查找匹配的目标分组字段的效率。
可以理解的是,本说明书实施例对于哈希表的构造方法不做任何限制,包括但不限于直接定址法、平方取中法、折叠法、除留余数法以及随机数法等等。(1)直接定址法:例如有一个从1到100岁的人口数字统计表,其中,年龄作为关键字,哈希函数取关键字自身。(2)平方取中法:取关键字平方后的中间几位为哈希地址。(3)折叠法:将关键字分割成位数相同的几部分,最后一部分的位数可以不同,然后取这几部分的叠加和作为哈希地址。(4)除留余数法:取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址;H(key)=key MOD p(p<=m)。(5)随机数法:选择一个随机函数,取关键字的随机函数值为它的哈希地址,即H(key)=random(key),其中random为随机函数。
在一个例子中,请参阅图3、图4以及图5,图3示出了将图1中的数据表分成2个数据分表,假设哈希表的构造方法为除留余数法,哈希表的表长为3,除数为3,即哈希函数为H(key)=key mod 3,其中,H(key)指示第几个哈希桶,key指示分组字段,mod是取余函数,如图4所示,在对数据分表1进行上述分组处理之后,可以得到如图4所示的哈希表和分组数组,以14举例,14取余3得到2,指向哈希桶2(即图4中的bucket2),哈希桶2(bucket2)中存储的数组索引3指向分组数组中的14。
接下来对数据分表2进行分组处理,可以得到如图5所述的哈希表和分组数组,先对数据分表2中的6个元组进行并行处理,查找在如图4所示的分组数组中是否存在匹配的目标分组数组,以10举例,10取余3得到1,指向哈希桶1(即图4中的bucket1),哈希桶1(bucket1)中存储的数组索引0指向分组数组中的10,两者相同,则记录所述目标分组字段的数组索引0。在遍历完所述数据分表中的所有元组之后,对于未记录数组索引的待处理元组(数据分表2中的ID为0、3、4和5共4组元组),在所述分组数组中新增该待处理元组的分组字段,在该待处理元组对应的目标哈希桶中存储所述待处理元组的分组字段的数组索引,以及记录所述待处理元组的分组字段的数组索引;以26(数据分表2中ID为0的元组)举例,在所述分组数组中新增26,并且26取余3得到2,指向哈希桶2(即图4中的bucket2),在哈希桶2(bucket2)中存储26的数组索引4,并记录该数组索引4。
其中,考虑到哈希冲突问题,将所有产生冲突的分组字段对应的数组索引全部存储在同一个线性链表中,如图4和图5所示,9和15存在哈希冲突,哈希值都为0,对应的数组索引以链表形式存储在哈希桶0(bucket0)中;又比如10和25存在哈希冲突,哈希值都为1,对应的数组索引以链表形式存储在哈希桶1(bucket1)中。
示例性的,为了提高匹配效率,所述电子设备在创建哈希表时,可以根据所述数据表中的元组数量确定所述哈希表中的哈希桶的数量,且两者呈正相关关系,即所述数据表中的元组数量越多,哈希桶的数量也越多,从而有利于减少或避免哈希冲突情况,提高匹配效率。
在一个例子中,所述哈希表中的哈希桶的数量至少大于所述数据表中的元组数量的2倍,比如所述哈希表中的哈希桶的数量为2的幂次方。
示例性的,所述哈希表中的哈希桶用于使用链表结构存储至少一个数组索引;则在确定某一个元组在所述哈希表中对应的目标哈希桶之后,如果该目标哈希桶中存储有多于一个的数组索引,则需要将该元组的分组字段与目标哈希桶中的多个数组索引分别指示的目标分组字段进行比较,直到找到匹配成功的目标分组字段或者全部匹配失败。
示例性的,对于数据分表中的任一元组,电子设备可以根据所述元组中的分组字段进行哈希运算,得到哈希值;根据所述哈希值确定所述元组在所述哈希表中对应的目标哈希桶;若所述目标哈希桶不为空,根据所述目标哈希桶以链表结构存储的首个数组索引从所述分组数组中读取首个目标分组字段;将该元组的分组字段与读取的目标分组字段值进行比较;若两者相同,记录读取的目标分组字段的数组索引;若两者不同,根据所述目标哈希桶以链表结构存储的下一个数组索引从所述分组数组中读取下一个目标分组字段值,并重复执行将该元组的分组字段与读取的目标分组字段值进行比较的步骤,直到找到匹配成功的目标分组字段或者全部匹配失败。
对于未记录数组索引的待处理元组,在未记录数组索引的待处理元组有多个的情况下,电子设备可以对多个待处理元组依次顺序进行如下处理:对于各个待处理元组,确定该待处理元组在哈希表中对应的目标哈希桶;若所述目标哈希桶为空、或者该元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段不同,在所述分组数组中新增该待处理元组的分组字段、以及在该待处理元组对应的目标哈希桶中存储对应的数组索引,并记录该数组索引;若该待处理元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段相同,记录所述目标分组字段的数组索引。
在一个例子中,请参阅图5,在遍历完所述数据分表2中的所有元组之后,未记录数组索引的待处理元组有ID为0、3、4和5共4组元组,以ID为4和5两组元组举例,对于ID为4的元组,分组字段5取余3得到2,指向哈希桶2(即图5中的bucket2),此时哈希桶2(bucket2)中存储数组索引3、4,两者指向的分组字段分别为14和26,与5不同,因此在分组数组中新增5,在哈希桶2的链表表尾新增分组字段5在分组数组中的数组索引6,并记录该数组索引6;接着,对于ID为5的元组,分组字段5取余3得到2,指向哈希桶2(即图5中的bucket2),此时哈希桶2(bucket2)中存储数组索引3、4和6,经比较确定分组数组中存在分组字段5,则记录该数组索引6。
这里对聚合处理过程进行示例性说明:
在一些实施例中,在依次对各个数据分表进行分组处理和聚合处理之前,先创建聚合数组,所述聚合数组用于存储所述分组数组中的不同分组字段的聚合结果;换句话说,分组数组中的分组字段和聚合数组中的聚合结果存在一一对应关系。在经过分组处理过程确定数据分表中的所有元组均有记录的数组索引之后,电子设备可以根据所述数据分表中各个元组记录的数组索引、所述分组数组和所述聚合方式进行聚合计算,得到聚合查询结果。
示例性的,对于所述数据分表中各个元组,电子设备根据所述数组索引读取所述分组数组中的分组字段,并确定所述聚合数组中是否存在该分组字段的聚合结果;若存在,利用所述聚合方式和该元组更新所述聚合结果;若不存在,利用所述聚合方式和该元组计算得到该元组的分组字段对应的聚合结果,并将该元组的分组字段对应的聚合结果保存在所述聚合数组中。
在一个例子中,请参阅图6以及图7,图6示出对图4所述的数据分表1进行聚合处理后的聚合数组,图7示出了在对图5所示的数据分表2进行聚合处理后的聚合数组。以图5中的数据分表2中ID为4和5两组元组举例,这两组元组记录的数组索引均为6,对于ID为4的元组,在确定所述聚合数组中不存在该分组字段5的聚合结果之后,利用所述聚合方式和该元组计算得到聚合结果1,将1保存在所述聚合数组中,并将该聚合结果1与分组数组中的分组字段5建立对应关系;接着,对于ID为5的元组,通过查找确定所述聚合数组中存在该分组字段5的聚合结果,则利用所述聚合方式和该元组更新所述聚合结果,更新后的聚合结果为2。
在一些实施例中,在处理完所有的数据分表之后,电子设备可以将所述分组数组和所述聚合数组作为所述数据库聚合查询请求的聚合查询结果返回,以在显示界面中显示所述聚合查询结果。
以上实施方式中的各种技术特征可以任意进行组合,只要特征之间的组合不存在冲突或矛盾,但是限于篇幅,未进行一一描述,因此上述实施方式中的各种技术特征的任意进行组合也属于本说明书公开的范围。
图8是一示例性实施例提供的一种设备的示意结构图。请参考图8,在硬件层面,该设备包括处理器802、内部总线804、网络接口806、内存808以及非易失性存储器810,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器802从非易失性存储器810中读取对应的计算机程序到内存808中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
在一些实施例中,本说明书实施例还提供了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以执行以下步骤:
响应于数据库聚合查询请求,确定待查询的数据表、分组字段以及聚合方式;
创建分组数组,所述分组数组用于存储所述数据表中的不同分组字段;
将所述数据表切分为至少两个数据分表,并依次对各个数据分表进行如下处理:
对于数据分表中的多个元组,并行执行以下操作:查找所述分组数组中是否存在与所述元组的分组字段相同的目标分组字段;若是,记录所述目标分组字段的数组索引;
在遍历完所述数据分表中的所有元组之后,对于未记录数组索引的待处理元组,在所述分组数组中新增所述待处理元组的分组字段,并记录所述待处理元组的分组字段的数组索引;
根据所述数据分表中各个元组记录的数组索引、所述分组数组和所述聚合方式进行聚合计算,得到聚合查询结果。
在一些实施例中,所述处理器还用于创建哈希表;所述哈希表包括哈希桶,不同哈希桶用于存储指向所述分组数组中的不同分组字段的数组索引。
在查找所述分组数组中是否存在与所述元组的分组字段相同的目标分组字段时,所述处理器还用于根据所述元组中的分组字段进行哈希运算,得到哈希值;根据所述哈希值确定所述元组在所述哈希表中对应的目标哈希桶;确定所述元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段是否相同。
对于未记录数组索引的待处理元组,所述处理器还用于在该待处理元组对应的目标哈希桶中存储所述待处理元组的分组字段的数组索引。
在一些实施例中,所述哈希表中的哈希桶用于使用链表结构存储至少一个数组索引。所述处理器具体用于若所述目标哈希桶不为空,根据所述目标哈希桶以链表结构存储的首个数组索引从所述分组数组中读取首个目标分组字段;将该元组的分组字段与读取的目标分组字段值进行比较;若两者相同,记录读取的目标分组字段的数组索引;若两者不同,根据所述目标哈希桶以链表结构存储的下一个数组索引从所述分组数组中读取下一个目标分组字段值,并重复执行将该元组的分组字段与读取的目标分组字段值进行比较的步骤。
在一些实施例中,所述处理器具体用于:在未记录数组索引的待处理元组有多个的情况下,对多个待处理元组依次顺序进行如下处理:对于各个待处理元组,确定该待处理元组在哈希表中对应的目标哈希桶;若所述目标哈希桶为空、或者该元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段不同,在所述分组数组中新增该待处理元组的分组字段、以及在该待处理元组对应的目标哈希桶中存储对应的数组索引,并记录该数组索引;若该待处理元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段相同,记录所述目标分组字段的数组索引。
在一些实施例中,所述处理器还用于创建聚合数组,所述聚合数组用于存储所述分组数组中的不同分组字段的聚合结果。
在根据所述数据分表中各个元组记录的数组索引、所述分组数组和所述聚合方式进行聚合计算时,所述处理器具体用于:对于所述数据分表中各个元组,根据所述数组索引读取所述分组数组中的分组字段,并确定所述聚合数组中是否存在该分组字段的聚合结果;若存在,利用所述聚合方式和该元组更新所述聚合结果;若不存在,利用所述聚合方式和该元组计算得到该元组的分组字段对应的聚合结果,并将该元组的分组字段对应的聚合结果保存在所述聚合数组中。
在一些实施例中,所述处理器还用于在处理完所有的数据分表之后,将所述分组数组和所述聚合数组作为所述数据库聚合查询请求的聚合查询结果返回,以在显示界面中显示所述聚合查询结果。
在一些实施例中,所述哈希表中的哈希桶的数量根据所述数据表中的元组数量确定,且两者呈正相关关系。
在一些实施例中,所述哈希表中的哈希桶的数量至少大于所述数据表中的元组数量的2倍。
在一些实施例中,所述处理器还用于根据数据分表包含的预设元组数量,将所述数据表切分为至少两个数据分表;其中,所述预设元组数量是根据处理器的并行处理能力确定的。
上述设备中各个器件的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
在一些实施例中,本说明书实施例还提供了一种资源调度系统,该资源调度系统包括:
与资源节点集群中的任一目标资源节点对应的目标资源节点端调度器,用于执行上述任意一项所述方法的步骤;
与所述资源节点集群对应的中心调度器,用于执行上述任意一项所述方法的步骤。
在一些实施例中,本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
需要说明的是,本说明书所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (12)

1.一种聚合查询方法,包括:
响应于数据库聚合查询请求,确定待查询的数据表、分组字段以及聚合方式;
创建分组数组,所述分组数组用于存储所述数据表中的不同分组字段;
将所述数据表切分为至少两个数据分表,并依次对各个数据分表进行如下处理:
对于数据分表中的多个元组,并行执行以下操作:查找所述分组数组中是否存在与所述元组的分组字段相同的目标分组字段;若是,记录所述目标分组字段的数组索引;
在遍历完所述数据分表中的所有元组之后,对于未记录数组索引的待处理元组,在所述分组数组中新增所述待处理元组的分组字段,并记录所述待处理元组的分组字段的数组索引;
根据所述数据分表中各个元组记录的数组索引、所述分组数组和所述聚合方式进行聚合计算,得到聚合查询结果。
2.根据权利要求1所述的方法,还包括:
创建哈希表;所述哈希表包括哈希桶,不同哈希桶用于存储指向所述分组数组中的不同分组字段的数组索引;
所述查找所述分组数组中是否存在与所述元组的分组字段相同的目标分组字段,包括:
根据所述元组中的分组字段进行哈希运算,得到哈希值;
根据所述哈希值确定所述元组在所述哈希表中对应的目标哈希桶;
确定所述元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段是否相同;
对于未记录数组索引的待处理元组,所述方法还包括:
在该待处理元组对应的目标哈希桶中存储所述待处理元组的分组字段的数组索引。
3.根据权利要求2所述的方法,所述哈希表中的哈希桶用于使用链表结构存储至少一个数组索引;
所述确定所述元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段是否相同,包括:
若所述目标哈希桶不为空,根据所述目标哈希桶以链表结构存储的首个数组索引从所述分组数组中读取首个目标分组字段;
将该元组的分组字段与读取的目标分组字段值进行比较;
若两者相同,记录读取的目标分组字段的数组索引;
若两者不同,根据所述目标哈希桶以链表结构存储的下一个数组索引从所述分组数组中读取下一个目标分组字段值,并重复执行将该元组的分组字段与读取的目标分组字段值进行比较的步骤。
4.根据权利要求2所述的方法,对于未记录数组索引的待处理元组,在所述分组数组中新增该待处理元组的分组字段,在该待处理元组对应的目标哈希桶中存储所述待处理元组的分组字段的数组索引,以及记录所述待处理元组的分组字段的数组索引,包括:
在未记录数组索引的待处理元组有多个的情况下,对多个待处理元组依次顺序进行如下处理:
对于各个待处理元组,确定该待处理元组在哈希表中对应的目标哈希桶;
若所述目标哈希桶为空、或者该元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段不同,在所述分组数组中新增该待处理元组的分组字段、以及在该待处理元组对应的目标哈希桶中存储对应的数组索引,并记录该数组索引;
若该待处理元组的分组字段与所述目标哈希桶存储的数组索引指示的目标分组字段相同,记录所述目标分组字段的数组索引。
5.根据权利要求1所述的方法,所述方法还包括:
创建聚合数组,所述聚合数组用于存储所述分组数组中的不同分组字段的聚合结果;
所述根据所述数据分表中各个元组记录的数组索引、所述分组数组和所述聚合方式进行聚合计算,包括:
对于所述数据分表中各个元组,根据所述数组索引读取所述分组数组中的分组字段,并确定所述聚合数组中是否存在该分组字段的聚合结果;
若存在,利用所述聚合方式和该元组更新所述聚合结果;
若不存在,利用所述聚合方式和该元组计算得到该元组的分组字段对应的聚合结果,并将该元组的分组字段对应的聚合结果保存在所述聚合数组中。
6.根据权利要求5所述的方法,还包括:
在处理完所有的数据分表之后,将所述分组数组和所述聚合数组作为所述数据库聚合查询请求的聚合查询结果返回,以在显示界面中显示所述聚合查询结果。
7.根据权利要求2至6任意一项所述的方法,所述哈希表中的哈希桶的数量根据所述数据表中的元组数量确定,且两者呈正相关关系。
8.根据权利要求7所述的方法,所述哈希表中的哈希桶的数量至少大于所述数据表中的元组数量的2倍。
9.根据权利要求1所述的方法,所述将所述数据表切分为至少两个数据分表,包括:
根据数据分表包含的预设元组数量,将所述数据表切分为至少两个数据分表;其中,所述预设元组数量是根据处理器的并行处理能力确定的。
10.一种资源调度系统,该资源调度系统包括:
与资源节点集群中的任一目标资源节点对应的目标资源节点端调度器,用于执行权利要求1至9任意一项所述方法的步骤;
与所述资源节点集群对应的中心调度器,用于执行权利要求1至9任意一项所述方法的步骤。
11.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至9中任一项所述的方法。
12.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至9中任一项所述方法的步骤。
CN202310353722.4A 2023-03-30 2023-03-30 聚合查询方法、系统、设备及存储介质 Pending CN116383255A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310353722.4A CN116383255A (zh) 2023-03-30 2023-03-30 聚合查询方法、系统、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310353722.4A CN116383255A (zh) 2023-03-30 2023-03-30 聚合查询方法、系统、设备及存储介质

Publications (1)

Publication Number Publication Date
CN116383255A true CN116383255A (zh) 2023-07-04

Family

ID=86965150

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310353722.4A Pending CN116383255A (zh) 2023-03-30 2023-03-30 聚合查询方法、系统、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116383255A (zh)

Similar Documents

Publication Publication Date Title
US10114908B2 (en) Hybrid table implementation by using buffer pool as permanent in-memory storage for memory-resident data
JP6356675B2 (ja) 集約/グループ化動作:ハッシュテーブル法のハードウェア実装
US9747349B2 (en) System and method for distributing queries to a group of databases and expediting data access
US11775523B2 (en) Hash table structure for optimizing hash join operations in a relational database system
US20120303627A1 (en) Responding to a query in a data processing system
US8108400B2 (en) Database segment searching
US9292554B2 (en) Thin database indexing
CN112287182A (zh) 图数据存储、处理方法、装置及计算机存储介质
US7447679B2 (en) Optimizing execution of a database query by using the partitioning schema of a partitioned object to select a subset of partitions from another partitioned object
CN103294702A (zh) 一种数据处理方法、装置及系统
US20130159347A1 (en) Automatic and dynamic design of cache groups
CN105468644B (zh) 一种用于在数据库中进行查询的方法与设备
Kuzochkina et al. Analyzing and Comparison of NoSQL DBMS
Cahsai et al. Scaling k-nearest neighbours queries (the right way)
US10997175B2 (en) Method for predicate evaluation in relational database systems
US8548980B2 (en) Accelerating queries based on exact knowledge of specific rows satisfying local conditions
US9747363B1 (en) Efficient storage and retrieval of sparse arrays of identifier-value pairs
CN106326295B (zh) 语义数据的存储方法及装置
CN111666302A (zh) 用户排名的查询方法、装置、设备及存储介质
Liroz-Gistau et al. Dynamic workload-based partitioning algorithms for continuously growing databases
CN116450607A (zh) 数据处理方法、设备及存储介质
US9292553B2 (en) Queries for thin database indexing
US20060085464A1 (en) Method and system for providing referential integrity constraints
US11847121B2 (en) Compound predicate query statement transformation
CN116383255A (zh) 聚合查询方法、系统、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination