CN109189808A - 数据查询方法及相关设备 - Google Patents
数据查询方法及相关设备 Download PDFInfo
- Publication number
- CN109189808A CN109189808A CN201811089236.1A CN201811089236A CN109189808A CN 109189808 A CN109189808 A CN 109189808A CN 201811089236 A CN201811089236 A CN 201811089236A CN 109189808 A CN109189808 A CN 109189808A
- Authority
- CN
- China
- Prior art keywords
- data
- tables
- query
- hash table
- record
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种数据查询方法,该方法在接收到数据查询请求后,确定请求关联的两个数据表,两个数据表包括第一数据表及第二数据表,生成预设数量的多个查询进程,多个查询进程并行读取所述第一数据表中的数据记录生成哈希表,将不同查询进程得到的哈希表合并,多个查询进程并行读取第二数据表中的数据记录并将数据记录与合并哈希表进行关联查询,得到查询结果。这种查询方式中使用并行方式构建哈希表以及并行对哈希表进行匹配查询,使得查询效率整体上有所较高。另外,本申请还提供了数据查询相关设备,用以保证所述方法在实际中的应用及实现。
Description
技术领域
本申请涉及数据处理技术领域,更具体地,是数据查询方法及相关设备。
背景技术
为了方便对数据进行管理,通常将数据存储在数据库***中。若需要对数据表中的数据进行查询,则可以向数据库***发送数据查询请求,数据库根据该数据查询请求,在数据表中查询符合数据查询请求的目标数据。
在一些情况下,目标数据并非来源于一张数据表,而是将多张数据表进行关联查询后得到的,目前的数据表关联查询方法,查询效率较低。
发明内容
有鉴于此,本申请提供了一种数据查询方法,用以解决现有的数据表关联查询方法效率较低的技术问题。
为实现所述目的,本申请提供的技术方案如下:
第一方面,本申请提供了一种数据查询方法,包括:
接收到数据查询请求后,确定所述数据查询请求所请求关联的两个数据表,其中两个数据表包括第一数据表及第二数据表;
生成预设数量的多个查询进程;
触发所述多个查询进程并行读取所述第一数据表中的数据记录并生成所读取到的数据记录的哈希表;
将不同查询进程得到的哈希表合并为共享哈希表;
触发所述多个查询进程并行读取所述第二数据表中的数据记录并将所读取到的数据记录与所述共享哈希表进行关联查询,得到查询结果。
第二方面,本申请提供了一种数据查询装置,包括:
待关联数据表确定单元,用于接收到数据查询请求后,确定所述数据查询请求所请求关联的两个数据表,其中两个数据表包括第一数据表及第二数据表;
查询进程生成单元,用于生成预设数量的多个查询进程;
第一哈希表生成单元,用于触发所述多个查询进程并行读取所述第一数据表中的数据记录并生成所读取到的数据记录的哈希表;
共享哈希表生成单元,用于将不同查询进程得到的哈希表合并为共享哈希表;
查询结果生成单元,用于触发所述多个查询进程并行读取所述第二数据表中的数据记录并将所读取到的数据记录与所述共享哈希表进行关联查询,得到查询结果。
第三方面,本申请提供了一种数据查询设备,包括:存储器及处理器,所述处理器通过运行存储在所述存储器内的软件程序、调用存储在所述存储器内的数据,至少执行如下步骤:
接收到数据查询请求后,确定所述数据查询请求所请求关联的两个数据表,其中两个数据表包括第一数据表及第二数据表;
生成预设数量的多个查询进程;
触发所述多个查询进程并行读取所述第一数据表中的数据记录并生成所读取到的数据记录的哈希表;
将不同查询进程得到的哈希表合并为共享哈希表;
触发所述多个查询进程并行读取所述第二数据表中的数据记录并将所读取到的数据记录与所述共享哈希表进行关联查询,得到查询结果。
第四方面,本申请提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器调用执行,以实现上述数据查询方法。
由以上技术方案可知,本申请提供了一种数据查询方法,该方法在接收到数据查询请求后,确定请求关联的两个数据表,两个数据表包括第一数据表及第二数据表,生成预设数量的多个查询进程,多个查询进程并行读取所述第一数据表中的数据记录生成哈希表,将不同查询进程得到的哈希表合并,多个查询进程并行读取第二数据表中的数据记录并将数据记录与合并哈希表进行关联查询,得到查询结果。这种查询方式中使用并行方式构建哈希表以及并行对哈希表进行匹配查询,使得查询效率整体上有所较高。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为现有的数据查询流程图;
图2为本申请提供的数据查询方法的一个流程图;
图3为哈希表的一个结构示意图;
图4为本申请提供的数据查询方法的一个示例图;
图5为本申请提供的数据查询方法的又一流程图;
图6为本申请提供的数据查询方法的又一示例图;
图7为本申请提供的数据查询装置的一个流程图;
图8为本申请提供的数据查询设备的一个架构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
数据通常存储在数据库***中,数据库***在接收到数据查询请求后,可以对两个数据表进行关联查询。关联查询的一种常用技术为哈希连接(HASHJOIN),该技术被用来处理两个数据表的等值关联查询。
基于哈希连接技术的一种数据查询流程见图1。如图1所示,待查询的两张数据表分别为A表及B表,为B表中的数据记录计算哈希值并根据哈希值构建数据记录的哈希表,从A表中依次读取数据记录并计算数据记录的哈希值,根据A表计算出的哈希值在哈希表中进行匹配,得到匹配的数据记录,从而获得查询结果。
可以看出的是,哈希连接查询过程主要包括两个部分:构建哈希表以及匹配查询。目前,哈希连接查询方式的效率较低,对上述查询过程研究后发现,主要原因是哈希表的构建过程较慢,从而降低了整体的查询效率。
对此,本申请提供了一种数据查询方法,该方法可以应用在数据库查询***中,通过并行处理的方式来提高哈希表的构建效率。见图2,该数据查询方法的一种具体流程包括步骤S201~S205。
S201:接收到数据查询请求后,确定数据查询请求所请求关联的两个数据表,其中两个数据表包括第一数据表及第二数据表。
其中,当需要查询数据时,可以向数据库***发送数据查询请求,请求会指示需要关联查询的两个数据表,因此在接收到数据查询请求后,根据请求的指示在数据库中确定出两个待关联的数据表。
另外,由于需要对两个数据表执行不同的处理操作,因此将两个数据表区分为第一数据表及第二数据表。第一数据表及第二数据表分别为哪个数据表,可以是任意选择的。
S202:生成预设数量的多个查询进程。
其中,为了提高查询效率,本申请生成多个查询进程,查询进程之间相互独立且并行工作。查询进程的数量为多个,具体个数可以通过不同的方式确定。
一种确定方式为,确定两个数据表中数据记录数量较多的目标数据表,查询进程在单位时间内的预估数据读取量,以及查询时长阈值;以及根据目标数据表的数据量、数据读取量以及查询时长阈值,计算查询进程的预设数量。
具体来讲,两个数据表中数据记录个数通常相同,但也可能存在个数不同的情况。在实际应用中,数据库***可以设置查询时长阈值,以避免查询时长过长的问题。因此为了保证整体查询时长低于阈值,需要保证数据记录较多的数据表能够在阈值范围内,进而首先需要确定出两个数据表中数据记录数量更大的一个数据表。为了便于描述,可以将该两个数据表中数据记录个数更多的数据表称为目标数据表。
另外,可以预先估计待构建的查询进程的性能,性能包括单位时间内的数据读取量。在得到目标数据表的数据记录量、查询进程的单位时间内的数据读取量、以及查询时长阈值之后,可以计算出查询进程的最大数量,进而可以将该最大数量作为查询进程的生成个数。
进一步地,可以根据数据库***中的计算资源,设置查询进程的最大数量阈值。在计算得出查询进程的生成个数后,与设置的该最大数量阈值进行对比,取两者中的较小值作为查询进程最终的生成个数。也就是说,如果计算得出的查询进程生成个数大于最大数量阈值,则将该最大数量阈值作为查询进程最终的生成个数;如果计算得出的查询进程生成个数小于或等于该最大数量阈值,则仍将计算出的查询进程生成个数作为最终的生成个数,最终的生成个数即本步骤中的预设数量。
另一种确定查询进程预设数量的方式为,确定两个数据表中数据记录数量较多的目标数据表,获得数据记录的预设数量基数,根据以下计算公式可以计算得出查询进程的预设数量:
Threshold*3num_workers≤Ntuples;其中Threshold表示数据记录的预设数量基数,num_workers表示待计算的查询进程数量,Ntuples表示目标数据表中数据记录的个数。根据该计算公式,可以得到查询进程数量的最大值,进而将该最大值作为本步骤中的预设数量。需要说明的是,次方的底数3是根据计算经验得到的一个数值,它对于公式的收敛速度更快。当然,在实际应用中,并不局限于该数值,也可以使用其他数值。进一步地,可以如上述第一种确定方式,将计算得到的查询进程数量与最大数量阈值进行比对,将两者中的较小值作为查询进程的预设数量。
S203:触发多个查询进程并行读取第一数据表中的数据记录并生成所读取到的数据记录的哈希表。
其中,得到多个查询进程后,可以使用该多个查询进程并行执行读取操作。每个查询进程需要执行的操作包括:从某个数据表即第一数据表中读取部分数据记录,以及为所读取到的数据记录生成哈希表。
在一种实现方式中,每个查询进程需要读取哪些数据,是预先分配好的。具体地,确定哈希表中数据记录有哪些,由于数据记录是连续存储的,预先为每个查询进程分配各自要读取哪个范围的数据记录。
在另一种实现方式中,查询进程是并行依序读取数据记录的。也就是说,各个查询进程同时开始,某个查询进程读取第一数据页的数据记录后,另一个查询进程接着读取第二数据页的数据记录,这样依次读取直至最后一条数据记录被读取。
不论以何种方式,查询进程读取到数据记录之后,使用哈希函数计算数据记录的哈希值key,根据数据记录的哈希值将数据记录存储在哈希表中。其中,不同数据记录,所得到的哈希值key也是不同的。
哈希表的结构如图3所示,一个哈希表可以包含多个哈希单元(也可以简称为表单元),哈希单元可以称为批次Batch。批次Batch的数量N可以由构建该哈希表的数据表中的数据量决定。计算出数据记录的哈希值以后,根据哈希值与哈希单元之间的对应关系,确定数据记录需要存储在哪个哈希单元中。
需要说明的是,哈希值与哈希单元之间是具有预设对应关系的,这种对应关系为多个哈希值对应一个哈希单元。例如,取哈希值的末尾1位数值,将该数值与哈希单元的编号对应,因此末尾1位相同的哈希值便会对应同一哈希单元,从而这些哈希值对应的数据记录也会被存储在同一哈希单元。
这种方式是将数据记录分组,将哈希值具有相同特征的一些数据记录分组在同一个哈希单元中。也可以看出,哈希表的每个哈希单元中只存储了数据表中的一部分数据记录,且这些数据记录的哈希值是具有相同特征的。
S204:将不同查询进程得到的哈希表合并为共享哈希表。
其中,每个查询进程都是从第一数据表中读取一部分数据记录,并生成各自的哈希表。每个哈希表中只存储了一部分数据记录,需要将该多个哈希表进行合并,合并的哈希表可以称为共享哈希表。共享哈希表是每个查询进程都可以访问的。
哈希表的合并可以是直接将各个哈希表连接为一个表。或者,也可以是将编号相同的哈希单元进行合并,这样就可以将不同查询进程得到的具有相同特征的数据记录再聚合在一起。
S205:触发多个查询进程并行读取第二数据表中的数据记录并将所读取到的数据记录与共享哈希表进行关联查询,得到查询结果。
其中,多个查询进程不仅可以并行读取第一数据表中的数据记录,还可以并行读取第二数据表中的数据记录。
每个查询进程从第二数据表中读取部分的数据记录,并将所读取到的数据记录与步骤S204得到的共享哈希表中所有的数据记录进行关联查询,从而得到每个查询进程对应的查询结果,所有查询结果合并后便可以得到最终的查询结果。
为了便于理解上述流程,本申请通过具体查询示例进行说明。
如图4所示,数据查询请求所请求关联的两个数据表分别为A表及B表。A表为本申请中的第二数据表,B表为本申请中的第一数据表。查询进程包括3个,分别为worker1、worker2及worker3。
每个查询进程分别从B表中查询一部分数据记录,其中查询进程worker1在B表中读取的数据记录称为PartA,查询进程worker2在B表中读取的数据记录称为PartB,worker3在B表中读取的数据记录称为PartC。
每个查询进程读取B表中的部分数据记录,并生成各自的哈希表HashTable,然后本申请将该3个哈希表HashTable合并为一个共享哈希表。
每个查询进程读取A表中的部分数据记录,如查询进程worker1在A表中读取的数据记录称为PartA,查询进程worker2在A表中读取的数据记录称为PartB,worker3在A表中读取的数据记录称为PartC。查询进程将各自读取到的数据记录与共享哈希表中的数据记录进行关联查询,从而得到查询结果。
可见,本申请可以使用多个查询进程并行处理的方式对两个数据表进行关联查询,查询效率相较于串行的方式,查询效率较高。
并且,在一种可能的并行查询方式中,哈希表的构建方式为,每个查询进程从第一数据表中读取所有的数据记录,并将所有的数据记录生成哈希表。这样,每个查询进程都可以得到一个包含所有数据记录的哈希表。得到该哈希表后,在执行步骤S205前查询进程并不需要等待合并为共享哈希表,可以继续读取第二数据表中的数据,与自身得到的哈希表进行关联查询。但是这种方式,哈希表均包含有全量数据记录,耗费的内存及存储资源过多。并且,只有关联查询是并行进行的,当有多个查询进程时,整体性能不会随之提升相应倍数,只有关联查询的部分性能提升相应倍数而已。
但是,本申请中步骤S203采用并行处理的方式,将多个不同部分的数据记录生成哈希表,步骤S204再将各个哈希表合并为一个共享的哈希表,以供步骤S205关联查询。可见,本申请不仅可以并行关联查询,还可以并行构建共享哈希表,从而使得数据查询的整体性能随着查询进程的增加而线性扩展。另外,每个查询进程所构建的哈希表并非全量数据记录,可以减少存储资源的耗费。
需要说明的是,关联查询的类型包含多种,如内部连接(inner join)、左连接(left join)、全连接(full join)及右连接(right join)。如果全连接及右连接这两种类型的关联查询按照上述查询方式执行,可能会输出重复的数据。具体来讲:
全连接及右连接这两种类型的关联查询中,是以第一数据表(即B表)为主,其他连接方式以第二数据表为主。以哪个数据表为主就说明,如果关联查询时,没有匹配到等值的数据记录,也需要将为主的这个数据表中未匹配成功的数据记录输出。
这样,每个查询进程在使用共享数据表与第二数据表进行关联查询时,每个查询进程使用部分数据与第二数据表关联时,都必然未匹配到等值的数据记录,且未匹配到的数据记录中必然存在相同的数据记录,这样输出的查询结果必然存在重复。
例如,A表及B表中均存在匹配条件分别为1-10的数据记录。假设查询方式中的连接方式为右连接,如果右连接以B表为主,且是根据B表构建的共享哈希表的情况下,按照以下方式执行:
查询进程1将A表中的1-3与B表中的1-10匹配,得到1-10的查询结果(虽然B表中的4-10未匹配成功,但由于为右连接,这些数据记录仍需要输出);查询进程1将A表中的4-6与B表中的1-10匹配(虽然B表中的1-3、7-10未匹配成功,但由于为右连接,这些数据记录仍需要输出);查询进程1将A表中的7-10与B表中的1-10匹配(虽然B表中的1-6未匹配成功,但由于为右连接,这些数据记录仍需要输出)。可见,就会输出三遍数据记录1-10,存在重复输出的问题。
因此,在接收到数据查询请求后,可以首先对数据查询请求的类型进行判断,如果类型非右连接及全连接,则可以按照上述图2的方式执行;如果类型为右连接或者全连接,则按照以下步骤执行数据查询流程。
见图5,其示出了数据查询方法的又一流程。如图5所示,该流程可以具体包括步骤S501~S505。
S501:接收到数据查询请求后,确定数据查询请求所请求关联的两个数据表,其中两个数据表包括第一数据表及第二数据表。
其中,本步骤中的第一数据表可以为右连接或全连接中为主匹配的那个数据表。
S502:生成预设数量的多个查询进程。
前两个步骤的说明可以参见图2中的相关步骤,此处并不赘述。
S503:触发各个查询进程读取第一数据表中的数据记录,计算所读取到的数据记录的哈希值,以及将数据记录存储在哈希值对应的表单元中。
具体地,触发各个查询进程并行执行以下步骤,以得到每个查询进程的哈希表:读取第一数据表中的数据记录,计算所读取到的数据记录的哈希值;以及根据哈希值与表单元之间的预设对应关系,将所读取到的数据记录存储在该数据记录的哈希值对应的表单元中。
其中,哈希值与哈希表的表单元之间具有预设对应关系,关于对应关系的说明可以参见上述图2步骤S203中的说明,此处并不赘述。
每个查询进程计算得到数据记录的哈希值后,将该数据记录存储至哈希值所对应的表单元中,这样有相同特征的数据记录便会存储至同一表单元中。可以理解的是,某一表单元中存储的是具有某一类特征的数据记录。
S504:将不同查询进程得到的哈希表中相对应的表单元合并,得到共享哈希表。
其中,每个查询进程均可以得到一个哈希表,本步骤的合并是想要将不同哈希表中具有相同特征的数据记录再合并在同一个表单元中。由于数据记录可以是按照哈希值与表单元编号之间的对应关系,存储到表单元中的。因此,不同哈希表之间的对应关系可以表现在编号相同上,也就是说,将不同查询进程得到的哈希表中编号相同的表单元合并。
合并后的哈希表可以称为共享哈希表或者第一哈希表。
S505:触发各个查询进程并行生成第二数据表的哈希表,从基于第二数据表生成的哈希表以及共享哈希表中确定对应的表单元进行关联查询。
具体地,触发各个查询进程并行执行以下步骤:读取第二数据表中的数据记录,并生成所读取到的数据记录的哈希表;以及从基于第二数据表生成的哈希表以及共享哈希表中,分别确定与查询进程自身对应的表单元,并对确定出的两个表单元中的数据记录进行关联查询。
其中,每个查询进程不仅对第一数据表中的数据记录构建哈希表,还可以按照相同的方法对第二数据表中的数据记录构建哈希表。为了便于描述,可以将基于第二数据表生成的哈希表称为第二哈希表。
每个查询进程都可以得到第二哈希表,每个第二哈希表中都具有多个表单元。不同第二哈希表的表单元之间可以具有相同联系,例如每个第二哈希表中的表单元编号都是相同的。不同的查询进程可以处理每个第二哈希中不同编号对应的表单元,且是与查询进程自身对应的表单元。
例如,两个第二哈希表中均包含有编号为1及编号为2的表单元,则查询进程1处理两个第二哈希表中编号为1的表单元,查询进程2处理两个第二哈希表中编号为2的表单元。
以上技术方案中,每个查询进程在关联查询时,都只是从两个哈希表中获得一部分表单元,不同查询进程获得的是与自身对应的那部分表单元,不同查询进程所对应的表单元是不同的,因此不同查询进程所获得的表单元之间不存在重复,因此,查询进程的关联查询结果之间不会存在重复数据。
以上实现方式中,需要为两个数据表均构建哈希表。在又一种实现方式中,还可以仅为第一数据表构建哈希表,并不构建第二数据表的哈希表,只是计算第一数据表中的哈希值,得到第一数据表的哈希值,根据哈希值与表单元之间的预设对应关系,将哈希值存储至对应的表单元中。这样,便可以生成第一数据表所关联的表单元,表单元中存储的是具有相同特征的哈希值。查询进程需要进行关联匹配时,同样是确定与查询进程自身对应的两个表单元,将两个表单元中的哈希值进行匹配,如果哈希值匹配成功,则可以确定出两个数据表中匹配成功的数据记录是哪些。
为了便于理解上述流程,本申请通过以下具体示例进行说明。
如图6所示,查询进程包括数据查询请求所请求关联的两个数据表分别为A表及B表。A表为本申请中的第二数据表,B表为本申请中的第一数据表。
查询进程worker1在B表中读取的数据记录称为PartA,查询进程worker2在B表中读取的数据记录称为PartB,worker3在B表中读取的数据记录称为PartC。每个查询进程生成的哈希表中均包含有批次Batch1、批次Batch2及批次Batch3三个表单元。查询进程会根据数据记录的哈希值,将数据记录存放在与哈希值对应的一个批次Batch中。
每个查询进程读取A表中的部分数据记录,如查询进程worker1在A表中读取的数据记录称为PartA,查询进程worker2在A表中读取的数据记录称为PartB,worker3在A表中读取的数据记录称为PartC。每个查询进程生成的哈希表中均包含有批次Batch1、批次Batch2及批次Batch3三个表单元。查询进程会根据数据记录的哈希值,将数据记录存放在与哈希值对应的一个批次Batch中。
查询进程worker1读取两个哈希表中编号均为1的批次,查询进程worker2读取两个哈希表中编号均为2的批次,查询进程worker3读取两个哈希表中编号均为3的批次。每个查询进程将读取到的数据记录进行关联查询,并得到查询结果。
需要说明的是,本申请提供的数据查询方法可以应用在各种数据库***中,包括但不局限于TBase分布式数据库***。本申请可以具体应用在分布式数据库***的数据节点(datanode,简称DN)上。
以下是对数据查询方法对应的数据查询装置部分,有关数据查询装置的说明可以参见上述数据查询方法,此处并不赘述。
见图7,其示出了数据查询装置的一种结构示意。如图7所示,该数据查询装置可以具体包括:待关联数据表确定单元701、查询进程生成单元702、第一哈希表生成单元703、共享哈希表生成单元704、及查询结果生成单元705。
待关联数据表确定单元701,用于接收到数据查询请求后,确定所述数据查询请求所请求关联的两个数据表,其中两个数据表包括第一数据表及第二数据表;
查询进程生成单元702,用于生成预设数量的多个查询进程;
第一哈希表生成单元703,用于触发所述多个查询进程并行读取所述第一数据表中的数据记录并生成所读取到的数据记录的哈希表;
共享哈希表生成单元704,用于将不同查询进程得到的哈希表合并为共享哈希表;
查询结果生成单元705,用于触发所述多个查询进程并行读取所述第二数据表中的数据记录并将所读取到的数据记录与所述共享哈希表进行关联查询,得到查询结果。
在一个示例中,数据查询装置还包括:查询进程数量确定单元。查询进程数量确定单元,用于确定查询进程的预设数量。查询进程数量确定单元,包括:参数确定子单元以及数量确定子单元。
参数确定子单元,用于确定两个数据表中数据记录数量较多的目标数据表,查询进程在单位时间内的预估数据读取量,以及查询时长阈值。数量确定子单元,用于根据所述目标数据表的数据量、所述数据读取量以及所述查询时长阈值,计算查询进程的预设数量。
在一个示例中,所述第一哈希表生成单元包括:预先分配子单元以及哈希表生成子单元。预先分配子单元,用于为各个所述查询进程预先分配所述第一数据表中的数据记录;哈希表生成子单元,用于触发各个所述查询进程并行读取所分配的数据记录并生成所读取到的数据记录的哈希表。
在一个示例中,所述查询进程生成单元包括:查询进程生成子单元。查询进程生成子单元,用于确定哈希表中的表单元个数,并生成与所述个数相同数量的查询进程。
在一个示例中,若所述两个数据表的关联类型为右连接或全连接;则所述第一哈希表生成单元包括:第一哈希表生成子单元。
第一哈希表生成子单元,用于触发各个所述查询进程并行执行以下步骤,以得到每个查询进程的哈希表:读取所述第一数据表中的数据记录,计算所读取到的数据记录的哈希值;以及根据哈希值与表单元之间的预设对应关系,将所读取到的数据记录存储在该数据记录的哈希值对应的表单元中。
在一个示例中,共享哈希表生成单元包括:共享哈希表生成子单元。
共享哈希表生成子单元,用于将不同查询进程得到的哈希表中相对应的表单元合并,得到共享哈希表。
在一个示例中,查询结果生成单元包括:查询结果生成子单元。查询结果生成子单元,用于触发各个所述查询进程并行执行以下步骤:读取所述第二数据表中的数据记录,并生成所读取到的数据记录的哈希表;以及从基于第二数据表生成的哈希表以及共享哈希表中,分别确定与查询进程自身对应的表单元,并对确定出的两个表单元中的数据记录进行关联查询。
见图8,其示出了本申请提供的数据查询设备的一种结构。如图8所示,该设备可以包括:存储器801、处理器802及通信总线803。
其中,存储器801、处理器802通过通信总线803完成相互间的通信。
存储器801,用于存放程序;存储器801可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
处理器802,用于执行程序,程序可以包括程序代码,所述程序代码包括处理器的操作指令。其中,程序可具体用于:
接收到数据查询请求后,确定所述数据查询请求所请求关联的两个数据表,其中两个数据表包括第一数据表及第二数据表;
生成预设数量的多个查询进程;
触发所述多个查询进程并行读取所述第一数据表中的数据记录并生成所读取到的数据记录的哈希表;
将不同查询进程得到的哈希表合并为共享哈希表;
触发所述多个查询进程并行读取所述第二数据表中的数据记录并将所读取到的数据记录与所述共享哈希表进行关联查询,得到查询结果。
处理器802可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路。需要说明的是,处理器802可以是上述虚拟化模块的一种硬件表现形式。
另外,本申请还提供了一种可读存储介质,其上存储有计算机程序,计算机程序被处理器调用执行,以实现上述任意一种数据查询方法。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括上述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种数据查询方法,其特征在于,包括:
接收到数据查询请求后,确定所述数据查询请求所请求关联的两个数据表,其中两个数据表包括第一数据表及第二数据表;
生成预设数量的多个查询进程;
触发所述多个查询进程并行读取所述第一数据表中的数据记录并生成所读取到的数据记录的哈希表;
将不同查询进程得到的哈希表合并为共享哈希表;
触发所述多个查询进程并行读取所述第二数据表中的数据记录并将所读取到的数据记录与所述共享哈希表进行关联查询,得到查询结果。
2.根据权利要求1所述的数据查询方法,其特征在于,所述预设数量的确定方式包括:
确定两个数据表中数据记录数量较多的目标数据表,查询进程在单位时间内的预估数据读取量,以及查询时长阈值;
根据所述目标数据表的数据量、所述数据读取量以及所述查询时长阈值,计算查询进程的预设数量。
3.根据权利要求1所述的数据查询方法,其特征在于,所述触发所述多个查询进程并行读取所述第一数据表中的数据记录并生成所读取到的数据记录的哈希表,包括:
为各个所述查询进程预先分配所述第一数据表中的数据记录;
触发各个所述查询进程并行读取所分配的数据记录并生成所读取到的数据记录的哈希表。
4.根据权利要求1所述的数据查询方法,其特征在于,所述生成预设数量的多个查询进程,包括:
确定哈希表中的表单元个数,并生成与所述个数相同数量的查询进程。
5.根据权利要求4所述的数据查询方法,其特征在于,若所述两个数据表的关联类型为右连接或全连接;则所述触发所述多个查询进程并行读取所述第一数据表中的数据记录并生成所读取到的数据记录的哈希表,包括:
触发各个所述查询进程并行执行以下步骤,以得到每个查询进程的哈希表:
读取所述第一数据表中的数据记录,计算所读取到的数据记录的哈希值;
根据哈希值与表单元之间的预设对应关系,将所读取到的数据记录存储在该数据记录的哈希值对应的表单元中。
6.根据权利要求5所述的数据查询方法,其特征在于,所述将不同查询进程得到的哈希表合并为共享哈希表,包括:
将不同查询进程得到的哈希表中相对应的表单元合并,得到共享哈希表。
7.根据权利要求6所述的数据查询方法,其特征在于,所述触发所述多个查询进程并行读取所述第二数据表中的数据记录并将所读取到的数据记录与所述共享哈希表进行关联查询,包括:
触发各个所述查询进程并行执行以下步骤:
读取所述第二数据表中的数据记录,并生成所读取到的数据记录的哈希表;
从基于第二数据表生成的哈希表以及共享哈希表中,分别确定与查询进程自身对应的表单元,并对确定出的两个表单元中的数据记录进行关联查询。
8.一种数据查询装置,其特征在于,包括:
待关联数据表确定单元,用于接收到数据查询请求后,确定所述数据查询请求所请求关联的两个数据表,其中两个数据表包括第一数据表及第二数据表;
查询进程生成单元,用于生成预设数量的多个查询进程;
第一哈希表生成单元,用于触发所述多个查询进程并行读取所述第一数据表中的数据记录并生成所读取到的数据记录的哈希表;
共享哈希表生成单元,用于将不同查询进程得到的哈希表合并为共享哈希表;
查询结果生成单元,用于触发所述多个查询进程并行读取所述第二数据表中的数据记录并将所读取到的数据记录与所述共享哈希表进行关联查询,得到查询结果。
9.一种数据查询设备,其特征在于,包括:存储器及处理器,所述处理器通过运行存储在所述存储器内的软件程序、调用存储在所述存储器内的数据,至少执行如下步骤:
接收到数据查询请求后,确定所述数据查询请求所请求关联的两个数据表,其中两个数据表包括第一数据表及第二数据表;
生成预设数量的多个查询进程;
触发所述多个查询进程并行读取所述第一数据表中的数据记录并生成所读取到的数据记录的哈希表;
将不同查询进程得到的哈希表合并为共享哈希表;
触发所述多个查询进程并行读取所述第二数据表中的数据记录并将所读取到的数据记录与所述共享哈希表进行关联查询,得到查询结果。
10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器调用执行,以实现权利要求1-7任意一项所述的数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811089236.1A CN109189808B (zh) | 2018-09-18 | 2018-09-18 | 数据查询方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811089236.1A CN109189808B (zh) | 2018-09-18 | 2018-09-18 | 数据查询方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109189808A true CN109189808A (zh) | 2019-01-11 |
CN109189808B CN109189808B (zh) | 2021-08-31 |
Family
ID=64908332
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811089236.1A Active CN109189808B (zh) | 2018-09-18 | 2018-09-18 | 数据查询方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109189808B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110321347A (zh) * | 2019-05-30 | 2019-10-11 | 上海数据交易中心有限公司 | 数据匹配方法及装置、存储介质、终端 |
CN111625561A (zh) * | 2019-02-28 | 2020-09-04 | 华为技术有限公司 | 一种数据查询方法及装置 |
CN112231367A (zh) * | 2020-12-14 | 2021-01-15 | 腾讯科技(深圳)有限公司 | 基于人工智能的业务处理方法、装置及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101593202A (zh) * | 2009-01-14 | 2009-12-02 | 中国人民解放军国防科学技术大学 | 基于共享Cache多核处理器的数据库哈希连接方法 |
CN103995879A (zh) * | 2014-05-27 | 2014-08-20 | 华为技术有限公司 | 基于olap***的数据查询方法、装置及*** |
CN104904167A (zh) * | 2013-01-10 | 2015-09-09 | 瑞典爱立信有限公司 | 通信网络中对于分组处理的高性能基于哈希的查找 |
CN108196662A (zh) * | 2017-12-28 | 2018-06-22 | 中国科学院计算技术研究所 | 哈希分区加速器 |
-
2018
- 2018-09-18 CN CN201811089236.1A patent/CN109189808B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101593202A (zh) * | 2009-01-14 | 2009-12-02 | 中国人民解放军国防科学技术大学 | 基于共享Cache多核处理器的数据库哈希连接方法 |
CN104904167A (zh) * | 2013-01-10 | 2015-09-09 | 瑞典爱立信有限公司 | 通信网络中对于分组处理的高性能基于哈希的查找 |
CN103995879A (zh) * | 2014-05-27 | 2014-08-20 | 华为技术有限公司 | 基于olap***的数据查询方法、装置及*** |
CN108196662A (zh) * | 2017-12-28 | 2018-06-22 | 中国科学院计算技术研究所 | 哈希分区加速器 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111625561A (zh) * | 2019-02-28 | 2020-09-04 | 华为技术有限公司 | 一种数据查询方法及装置 |
CN110321347A (zh) * | 2019-05-30 | 2019-10-11 | 上海数据交易中心有限公司 | 数据匹配方法及装置、存储介质、终端 |
CN112231367A (zh) * | 2020-12-14 | 2021-01-15 | 腾讯科技(深圳)有限公司 | 基于人工智能的业务处理方法、装置及电子设备 |
CN112231367B (zh) * | 2020-12-14 | 2021-03-09 | 腾讯科技(深圳)有限公司 | 基于人工智能的业务处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109189808B (zh) | 2021-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11061878B2 (en) | Parallel build of non-partitioned join hash tables and non-enforced N:1 join hash tables | |
CN102968498B (zh) | 数据处理方法及装置 | |
WO2018149345A1 (zh) | 一种数据处理方法及装置 | |
JP6338817B2 (ja) | データベースミドルウェアを用いたデータ管理システム及びその方法 | |
JP6225261B2 (ja) | データを記憶する方法及び装置 | |
CN109189808A (zh) | 数据查询方法及相关设备 | |
CN103473334B (zh) | 数据存储、查询方法及*** | |
US8812492B2 (en) | Automatic and dynamic design of cache groups | |
CN104504154A (zh) | 一种数据聚合查询的方法及装置 | |
CN110399368B (zh) | 一种定制数据表的方法、数据操作方法及装置 | |
Tang et al. | An intermediate data partition algorithm for skew mitigation in spark computing environment | |
CN104268298A (zh) | 一种创建数据库索引及其查询的方法 | |
JP2019504390A (ja) | データ照会方法および装置ならびにデータベースシステム | |
CN109739433A (zh) | 数据处理的方法及终端设备 | |
CN105550332A (zh) | 一种基于双层索引结构的起源图查询方法 | |
CN108304460B (zh) | 一种改进数据库的定位方法及*** | |
CN105868218A (zh) | 一种数据处理方法及电子设备 | |
CN109213774A (zh) | 数据的存储方法及装置、存储介质、终端 | |
CN111522811A (zh) | 数据库的处理方法及装置、存储介质、终端 | |
CN105677645A (zh) | 一种数据表比对方法和装置 | |
CN107562762A (zh) | 数据索引构建方法及装置 | |
US9747363B1 (en) | Efficient storage and retrieval of sparse arrays of identifier-value pairs | |
CN112204540B (zh) | 位图过滤器、其生成方法及用位图过滤器执行连接的方法 | |
JP7440007B2 (ja) | データベースをクエリするためのシステム、方法および装置 | |
CN108595482B (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40001817 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |