CN116467354B - 数据库的查询方法和装置、计算机设备、存储介质 - Google Patents

数据库的查询方法和装置、计算机设备、存储介质 Download PDF

Info

Publication number
CN116467354B
CN116467354B CN202310710667.XA CN202310710667A CN116467354B CN 116467354 B CN116467354 B CN 116467354B CN 202310710667 A CN202310710667 A CN 202310710667A CN 116467354 B CN116467354 B CN 116467354B
Authority
CN
China
Prior art keywords
data
hash table
packet data
aggregation
cache
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.)
Active
Application number
CN202310710667.XA
Other languages
English (en)
Other versions
CN116467354A (zh
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.)
Primitive Data Beijing Information Technology Co ltd
Original Assignee
Primitive Data Beijing Information Technology Co 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 Primitive Data Beijing Information Technology Co ltd filed Critical Primitive Data Beijing Information Technology Co ltd
Priority to CN202310710667.XA priority Critical patent/CN116467354B/zh
Publication of CN116467354A publication Critical patent/CN116467354A/zh
Application granted granted Critical
Publication of CN116467354B publication Critical patent/CN116467354B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • G06F16/2255Hash tables
    • 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/23Updating
    • 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/24552Database cache management
    • 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/248Presentation of query results
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Abstract

本申请实施例提供了一种数据库的查询方法和装置、计算机设备、存储介质,属于数据库技术领域。该方法包括:根据数据查询请求确定目标数据列和初始预聚合哈希表;将第一分组数据写入初始预聚合哈希表得到第一预聚合哈希表;将第一分组数据写入预聚合缓存中;根据关键字数据和第二分组数据进行关键字匹配得到匹配结果;对第一预聚合哈希表的存储空间和预设哈希表空间阈值进行空间判断,根据预设淘汰算法对初始缓存数据进行数据选择;根据选择数据将第二分组数据写入第一预聚合哈希表得到第二预聚合哈希表;当第二分组数据是所述结束标记,对第二预聚合哈希表的数据和第三分组数据合并得到目标查询表。本申请实施例能够提高对数据库的查询效率。

Description

数据库的查询方法和装置、计算机设备、存储介质
技术领域
本申请涉及数据库技术领域,尤其涉及一种数据库的查询方法和装置、计算机设备、存储介质。
背景技术
聚合是数据库中常用的查询操作,且聚合操作通常是根据group by条件将输入的表数据划分为不同的分组,并根据聚合函数计算出每个分组的单个值以得到查询结果。在数据库的具体实现中,相关技术通常采用哈希表在缓存查询时进行数据存储,由于进行查询的数据量比较大时,哈希表的大小会超过可用内存的限制。为了避免内存超过限制且提高执行效率,相关技术通过将聚合下推,即通过分布式聚合方法形成两阶段聚合。具体地,在读取数据后,会先做一次本地预聚合,并将预聚合的哈希表中的结果分发到最终聚合阶段,以保证相同的分组分发到相同的聚合工作线程里。在最终聚合阶段进行合并即可得到最终结果。
然而,当分组数过多时,预聚合阶段也可能会发生落盘,且落盘会带来较大的性能影响。为了解决该问题,相关技术所采用的技术方法包括:当发现哈希表需要内存过多时,会返回哈希表内的所有行并释放内存,然后重新建哈希表;或者,当哈希表大小达到限制时,对于后续的数据,先在哈希表中进行查找,并同时保留频次较高的分组。但是,第一种方法容易造成过多的行数据被传输给上层节点处理;而第二种方法容易使之前保留的高频数据在后续数据未出现以造成对哈希表空间的浪费。因此,两种方式对数据库的缓存查询的执行效率较低。
发明内容
本申请实施例的主要目的在于提出了一种数据库的缓存查询方法和装置、计算机设备、存储介质,能够提高对数据库的聚合查询效率。
为实现上述目的,本申请实施例的第一方面提出了一种数据库的查询方法,所述方法包括:
根据接收的数据查询请求确定目标数据列和初始预聚合哈希表,所述目标数据列包括第一分组数据、第二分组数据和预设的结束标记,所述第二分组数据的存储时间是所述第一分组数据的存储时间之后的下一个数据存储时间;
根据所述初始预聚合哈希表的存储空间和预设哈希表空间阈值将所述第一分组数据写入所述初始预聚合哈希表,得到第一预聚合哈希表;
将所述第一分组数据写入预聚合缓存中,更新所述预聚合缓存中存储的初始缓存数据;
根据所述第一预聚合哈希表中存储的关键字数据和所述第二分组数据进行关键字匹配,得到第一匹配结果;
根据所述第一匹配结果对所述第一预聚合哈希表的存储空间和所述预设哈希表空间阈值进行空间判断,并根据空间判断的结果和预设淘汰算法对所述初始缓存数据进行数据选择,确定第三分组数据;
根据所述第一匹配结果和所述第三分组数据将所述第二分组数据写入所述第一预聚合哈希表,得到第二预聚合哈希表,并将所述第二分组数据写入更新后的所述预聚合缓存,更新所述初始缓存数据;
当所述第二分组数据是所述结束标记,对所述第二预聚合哈希表的数据和所述第三分组数据进行数据合并,得到目标查询表。
在一些实施例中,所述根据所述初始预聚合哈希表的存储空间和预设哈希表空间阈值将所述第一分组数据写入所述初始预聚合哈希表,得到第一预聚合哈希表,包括:
当所述初始预聚合哈希表的存储空间小于所述预设哈希表空间阈值,将所述第一分组数据写入所述初始预聚合哈希表,得到所述第一预聚合哈希表;
或者,
当所述初始预聚合哈希表的存储空间大于或等于所述预设哈希表空间阈值,根据所述预设淘汰算法对所述初始缓存数据进行数据选择,得到第四分组数据;
根据所述第四分组数据将所述第一分组数据写入所述初始预聚合哈希表,得到所述第一预聚合哈希表。
在一些实施例中,所述根据所述第一匹配结果和所述第三分组数据将所述第二分组数据写入所述第一预聚合哈希表,得到第二预聚合哈希表,包括:
当所述第一预聚合哈希表中包含和所述第二分组数据匹配的所述关键字数据,获取与所述第二分组数据匹配的第一关键字和所述第一关键字的第一键值;
根据所述第一预聚合哈希表的预设哈希函数、所述第一键值和所述第二分组数据进行函数计算,得到第二键值;
根据所述第二键值更新所述第一预聚合哈希表,并将更新后的所述第一预聚合哈希表作为所述第二预聚合哈希表。
在一些实施例中,所述根据所述第一匹配结果和所述第三分组数据将所述第二分组数据写入所述第一预聚合哈希表,得到第二预聚合哈希表,还包括:
当所述第一预聚合哈希表中不包含和所述第二分组数据匹配的所述关键字数据,确定在所述第一预聚合哈希表中添加所述第二分组数据对应的第二关键字;
根据所述预设哈希函数和所述第二分组数据进行函数计算,得到第三键值;
从所述第一预聚合哈希表中删除所述第三分组数据,更新所述第一预聚合哈希表;
根据所述第二关键字、所述第三键值和更新后的所述第一预聚合哈希表进行哈希表合并,得到所述第二预聚合哈希表。
在一些实施例中,所述预聚合缓存包括淘汰存储区域、保护存储区域和窗口存储区域;
所述将所述第一分组数据写入预聚合缓存中,包括:
当所述淘汰存储区域中存在与所述第一分组数据相同的所述初始缓存数据,将所述第一分组数据写入所述保护存储区域;
从所述淘汰存储区域中删除与所述第一分组数据相同的所述初始缓存数据;
或者,
当所述保护存储区域或所述窗口存储区域中存在与所述第一分组数据相同的所述初始缓存数据,更新与所述第一分组数据相同的所述初始缓存数据的访问频率数据;
或者,
当所述预聚合缓存中不存在与所述第一分组数据相同的所述初始缓存数据,将所述第一分组数据写入所述窗口存储区域。
在一些实施例中,所述淘汰存储区域用于存储待淘汰缓存数据,所述窗口存储区域用于存储窗口缓存数据;
所述根据空间判断的结果和预设淘汰算法对所述初始缓存数据进行数据选择,确定第三分组数据,包括:
当所述第一预聚合哈希表的存储空间大于或等于所述预设哈希表空间阈值,根据所述待淘汰缓存数据的访问频率数据确定第一判断数据;
根据所述窗口缓存数据的访问频率数据确定第二判断数据;
对所述第一判断数据和所述第二判断数据进行频率数据比较,并根据频率数据比较的结果确定所述第三分组数据;
从所述预聚合缓存中删除所述第三分组数据。
在一些实施例中,在所述当所述第二分组数据是所述结束标记,对所述第二预聚合哈希表的数据和所述第三分组数据进行数据合并,得到目标查询表之前,所述方法还包括:
当所述第二分组数据不是所述结束标记,将所述第二分组数据作为新的第一分组数据,根据新的所述第一分组数据确定第五分组数据,所述第五分组数据的存储时间是新的所述第一分组数据的存储时间之后的下一个数据存储时间;
根据所述第二预聚合哈希表中存储的关键字数据和所述第五分组数据进行关键字匹配,得到第二匹配结果;
根据所述第二匹配结果对所述预设哈希表空间阈值和所述第二预聚合哈希表的存储空间进行空间判断,并根据空间判断的结果和所述预设淘汰算法对更新的所述预聚合缓存中的所述初始缓存数据进行数据选择,确定第六分组数据;
根据所述第二匹配结果和所述第六分组数据将所述第五分组数据写入所述第二预聚合哈希表,得到第三预聚合哈希表,并将所述第五分组数据写入更新后的所述预聚合缓存,更新所述初始缓存数据;
当所述第五分组数据是所述结束标记,对所述第六分组数据和所述第三预聚合哈希表的数据进行数据合并,得到所述目标查询表。
为实现上述目的,本申请实施例的第二方面提出了一种数据库的查询装置,所述装置包括:
参数确定模块,用于根据接收的数据查询请求确定目标数据列和初始预聚合哈希表,所述目标数据列包括第一分组数据、第二分组数据和预设的结束标记,所述第二分组数据的存储时间是所述第一分组数据的存储时间之后的下一个数据存储时间;
第一写入模块,用于根据所述初始预聚合哈希表的存储空间和预设哈希表空间阈值将所述第一分组数据写入所述初始预聚合哈希表,得到第一预聚合哈希表;
第二写入模块,用于将所述第一分组数据写入预聚合缓存中,更新所述预聚合缓存中存储的初始缓存数据;
关键字匹配模块,用于根据所述第一预聚合哈希表中存储的关键字数据和所述第二分组数据进行关键字匹配,得到第一匹配结果;
数据选择模块,用于根据所述第一匹配结果对所述第一预聚合哈希表的存储空间和所述预设哈希表空间阈值进行空间判断,并根据空间判断的结果和预设淘汰算法对所述初始缓存数据进行数据选择,确定第三分组数据;
第三写入模块,用于根据所述第一匹配结果和所述第三分组数据将所述第二分组数据写入所述第一预聚合哈希表,得到第二预聚合哈希表,并将所述第二分组数据写入更新后的所述预聚合缓存,更新所述初始缓存数据;
数据合并模块,用于当所述第二分组数据是所述结束标记,对所述第二预聚合哈希表的数据和所述第三分组数据进行数据合并,得到目标查询表。
为实现上述目的,本申请实施例的第三方面提出了一种计算机设备,包括:
至少一个存储器;
至少一个处理器;
至少一个计算机程序;
所述至少一个计算机程序被存储在所述至少一个存储器中,所述至少一个处理器执行所述至少一个计算机程序以实现上述第一方面所述的数据库的查询方法。
为实现上述目的,本申请实施例的第四方面提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于使计算机执行上述第一方面所述的数据库的查询方法。
本申请实施例提出的一种数据库的查询方法和装置、计算机设备、存储介质,首先,根据接收的数据查询请求确定目标数据列和初始预聚合哈希表,该目标数据列包括第一分组数据、第二分组数据和预设的结束标记,且第二分组数据的存储时间是第一分组数据的存储时间之后的下一个数据存储时间。根据初始预聚合哈希表的存储空间和预设哈希表空间阈值将第一分组数据写入初始预聚合哈希表,得到第一预聚合哈希表。并且,将第一分组数据同时写入预聚合缓存中,更新预聚合缓存中存储的初始缓存数据。然后,根据第一预聚合哈希表中存储的关键字数据和第二分组数据进行关键字匹配,得到第一匹配结果。之后,对第一预聚合哈希表的存储空间和预设哈希表空间阈值进行空间判断,并根据空间判断的结果和预设淘汰算法对初始缓存数据进行数据选择,确定第三分组数据。根据第一匹配结果和第三分组数据将第二分组数据写入第一预聚合哈希表,得到第二预聚合哈希表,并将第二分组数据写入更新后的预聚合缓存,更新初始缓存数据。最后,当第二分组数据是结束标记,对第二预聚合哈希表的数据和第三分组数据进行数据合并,得到目标查询。本申请实施例能够在数据库进行聚合查询时,有效提高对数据库的查询效率。
附图说明
图1是本申请实施例提供的数据库的查询方法的第一流程图;
图2是图1中的步骤S120的流程图;
图3是图2中的步骤S220的一个场景流程图;
图4是图1中的步骤S130的流程图;
图5是图4中的步骤S420的一个场景流程图;
图6是本申请实施例提供的基于W-TinyLFU的淘汰算法的结构示意图;
图7是图1中的步骤S150的流程图;
图8是图1中的步骤S160的一个流程图;
图9是图1中的步骤S160的另一个流程图;
图10是本申请实施例提供的数据库的查询方法的第二流程图;
图11是本申请实施例提供的查询方法的一个整体示例示意图;
图12是本申请实施例提供的数据库的查询装置的结构示意图;
图13是本申请实施例提供的计算机设备的硬件结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
聚合是数据库中常用的查询操作,且聚合操作通常是根据group by条件将输入的表数据划分为不同的分组,并根据聚合函数计算出每个分组的单个值以得到查询结果。在数据库的具体实现中,相关技术通常采用哈希表在缓存查询时进行数据存储,即通过哈希函数计算哈希值,并根据哈希值找到对应的位置,再根据聚合函数更新结果值。由于需要将所以分组的数据存储到哈希表中,且分组的数目过多时,哈希表的大小会超过可用内存的限制。为了避免内存超过限制且提高执行效率,相关技术通过将聚合下推,即通过分布式聚合方法形成两阶段聚合。具体地,在读取数据后,会先做一次本地预聚合,并将预聚合的哈希表中的结果分发到最终聚合阶段,以保证相同的分组分发到相同的聚合工作线程里。在最终聚合阶段进行合并即可得到最终结果。
然而,当分组数过多时,预聚合阶段也可能会发生落盘,且落盘会带来较大的性能影响。为了解决该问题,相关技术所采用的技术方法包括:当发现哈希表需要内存过多时,会返回哈希表内的所有行并释放内存,然后重新建哈希表;或者,当哈希表大小达到限制时,对于后续的数据,先在哈希表中进行查找,如果存在则直接聚合到哈希表中,如果不存在则直接传给最终聚合阶段。其中,同时保留频次较高的分组。但是,第一种方法容易造成过多的行数据被传输给上层节点处理;而第二种方法容易使之前保留的高频数据在后续数据未出现以造成对哈希表空间的浪费。因此,两种方式对数据库的缓存查询的执行效率较低。
基于此,本申请实施例提供了一种数据库的查询方法和装置、计算机设备、存储介质,能够提高对数据库的查询效率。
本申请实施例提供的数据库的查询方法可应用于终端中,也可应用于服务器端中,还可以是运行于终端或服务器端中的软件。在一些实施例中,终端可以是智能手机、平板电脑、笔记本电脑、台式计算机等;服务器端可以配置成独立的物理服务器,也可以配置成多个物理服务器构成的服务器集群或者分布式系统,还可以配置成提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)以及大数据和人工智能平台等基础云计算服务的云服务器;软件可以是实现数据库的查询方法的应用等,但并不局限于以上形式。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络个人计算机(Personal Computer,PC)、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
请参阅图1,图1是本申请实施例提供的数据库的查询方法的一个可选的流程图,图1中的方法可以具体包括但不限于步骤S110至步骤S170,下面结合图1对这七个步骤进行详细介绍。
步骤S110,根据接收的数据查询请求确定目标数据列和初始预聚合哈希表,目标数据列包括第一分组数据、第二分组数据和预设的结束标记,第二分组数据的存储时间是第一分组数据的存储时间之后的下一个数据存储时间;
步骤S120,根据初始预聚合哈希表的存储空间和预设哈希表空间阈值将第一分组数据写入初始预聚合哈希表,得到第一预聚合哈希表;
步骤S130,将第一分组数据写入预聚合缓存中,更新预聚合缓存中存储的初始缓存数据;
步骤S140,根据第一预聚合哈希表中存储的关键字数据和第二分组数据进行关键字匹配,得到第一匹配结果;
步骤S150,根据第一匹配结果对第一预聚合哈希表的存储空间和预设哈希表空间阈值进行空间判断,并根据空间判断的结果和预设淘汰算法对初始缓存数据和第一分组数据进行数据选择,确定第三分组数据;
步骤S160,根据第一匹配结果和第三分组数据将第二分组数据写入第一预聚合哈希表,得到第二预聚合哈希表,并将第二分组数据写入更新后的预聚合缓存,更新初始缓存数据;
步骤S170,当第二分组数据是所述结束标记,对第二预聚合哈希表的数据和第三分组数据进行数据合并,得到目标查询表。
可以理解的是,在一些实施例的步骤S110至步骤S170中,首先,根据接收的数据查询请求确定目标数据列和初始预聚合哈希表,该目标数据列包括第一分组数据、第二分组数据和预设的结束标记,且第二分组数据的存储时间是第一分组数据的存储时间之后的下一个数据存储时间。根据初始预聚合哈希表的存储空间和预设哈希表空间阈值将第一分组数据写入初始预聚合哈希表,得到第一预聚合哈希表。并且,将第一分组数据同时写入预聚合缓存中,更新预聚合缓存中存储的初始缓存数据。然后,根据第一预聚合哈希表中存储的关键字数据和第二分组数据进行关键字匹配,得到第一匹配结果。之后,当第一预聚合哈希表的存储空间等于预设哈希表空间阈值,根据预设淘汰算法对初始缓存数据和第一分组数据进行数据选择,确定第三分组数据。根据第一匹配结果和第三分组数据将第二分组数据写入第一预聚合哈希表,得到第二预聚合哈希表,并将第二分组数据写入更新后的预聚合缓存,更新初始缓存数据。最后,当第二分组数据是结束标记,对第二预聚合哈希表的数据和第三分组数据进行数据合并,得到目标查询。本申请实施例能够在数据库进行聚合查询时,有效提高对数据库的聚合查询效率。
需要说明的是,本申请实施例提供的数据库的查询方法可以应用于客户端或服务端,且调用端也可以为客户端或服务端,在此不作具体限定。
在一些实施例的步骤S110中,当客户端需要对数据库进行聚合操作即数据查询时,向可以执行本申请查询方法的客户端或服务端发送数据查询请求。当执行数据库的查询方法是客户端,则根据接收的数据查询请求确定目标数据列,并预构建初始预聚合哈希表。其中,数据查询请求用于表示输入的查询语句,例如,数据库在存储引擎中存储了至少一个数据表,如t1、t2等,且每个数据表中包括至少一个数据列。假设数据查询请求对应的语句为“select a, count(*) from t1 group by a”,则a为在数据表t1中的目标数据列。假设表t1为学生的考试结果表,且考试结果等级分为1、2、3、4,列a的数据在表t1中纵向排列,且依次为[1,1,2,4,1,4,3,结束标记]。因此,列a中存储的每个数据都为分组数据,且每个分组数据对应一个存储时间。第二分组数据用于表示与第一分组数据相邻的分组数据,且第二分组数据的存储时间是第一分组数据的存储时间之后的下一个数据存储时间。例如,当2为第一分组数据,则4为第二分组数据,依次类推,在此不再赘述。
需要说明的是,根据数据查询请求对应的语句可以确定聚合函数,例如,语句为“select a, count(*) from t1 group by a”,其中,count()是一个聚合函数,用于表示返回指定组中项目的数量。因此,count()会逐行判断目标数据列中的数据,若返回的不是NULL,就会加1,否则不加。count(*)、count(主键 id)和 count(1)都表示返回满足条件的结果集的总行数。对于上述数据查询请求对应的语句,a, count(*)表示最终返回的目标查询表t1中需要显示的全部列,此时的a用于统计以列a的类型方式存储的数据,count(*)用于统计此时的a中每个数据对应的满足条件的总行数。group by a表示根据列a中存储的每个数据进行分组统计。
需要说明的是,目标数据列的结束标记可以为空行,也可以与目标数据列的分组数据类型不同的字符。
在一些实施例的步骤S120中,为了提高数据库的查询效率,本申请采用两阶段聚合方法,即将预聚合哈希表作为一个缓存阶段,并同时考虑数据的时间、频率等维度的信息,能够有效节省网络传输效率,并提高在最终聚合计算的整体数据查询效率。其中,该初始预聚合哈希表包括关键字数据(Key)和键值(Value)。预设哈希表空间阈值可以用于表示预聚合哈希表的最大内存空间大小,例如,可以为512M;也可以为表示预聚合哈希表的最大存储行数,例如,2、5、8行等,在此不作具体限定。
需要说明的是,当目标数据列的列数大于1,关键字数据(Key)可以将采用组合的形式,即将不同列的数据的组合形式作为存储在预聚合哈希表中的Key。
请参阅图2,图2是本申请实施例提供的步骤S120的一个可选的流程图,在本申请的一些实施例中,步骤S120具体包括但不限于步骤S210和步骤S220,下面结合图2对这两个步骤进行详细介绍。
步骤S210,对初始预聚合哈希表的存储空间和预设哈希表空间阈值进行空间判断,得到第一判断结果;
步骤S220,根据第一判断结果将第一分组数据写入初始预聚合哈希表,得到第一预聚合哈希表。
在一些实施例的步骤S210和步骤S220中,第一分组数据可以为目标数据列中的第一个分组数据,也可以为目标数据列的中间分组数据。本申请实施例可以将第一分组数据作为一个关键字数据(Key),将语句中的聚合函数作为预设哈希函数。
需要说明的是,本申请实施例对关键字数据和预设哈希函数的设置可以根据实际需要灵活设定,只要保持分组数据和关键字数据的对应关系即可。
具体地,若第一分组数据是目标数据列中的第一个分组数据,对初始预聚合哈希表的存储空间和预设哈希表空间阈值进行空间判断,以根据第一判断结果确定初始预聚合哈希表中是否还有写入第一分组数据的存储空间;若第一分组数据为目标数据列的中间分组数据,先对第一分组数据和初始预聚合哈希表中的关键字数据进行数据匹配,以确定初始预聚合哈希表是否存在和第一分组数据相同的关键字数据。若匹配到关键字数据,根据预设哈希函数更新匹配的关键字数据对应的键值;若未匹配到关键字数据,对初始预聚合哈希表的存储空间和预设哈希表空间阈值进行空间判断,以根据第一判断结果确定初始预聚合哈希表中是否还有写入第一分组数据的存储空间。
需要说明的是,步骤S220具体包括以下场景一和场景二。
场景一:当第一判断结果表示初始预聚合哈希表的存储空间小于预设哈希表空间阈值,将第一分组数据写入初始预聚合哈希表,得到第一预聚合哈希表。
需要说明的是,当初始预聚合哈希表的存储空间小于预设哈希表空间阈值,且在初始预聚合哈希表中未匹配到关键字数据,则表示初始预聚合哈希表中还有可以存储对应第一分组数据的数据行。因此,本申请实施例可以将第一分组数据作为一个Key,根据预设哈希函数对该Key进行函数计算,将该Key值和函数计算的结果写入初始预聚合哈希表的对应数据行,并将写入后的预聚合哈希表作为第一预聚合哈希表。
场景二,请参阅图3,图3是本申请实施例提供的场景二的一个可选的流程图,在本申请的一些实施例中,场景二具体包括但不限于步骤S310和步骤S320下面结合图3对这两个步骤进行详细介绍。
步骤S310,当初始预聚合哈希表的存储空间大于或等于预设哈希表空间阈值,根据预设淘汰算法对初始缓存数据进行数据选择,得到第四分组数据;
步骤S320,根据第四分组数据将第一分组数据写入初始预聚合哈希表,得到第一预聚合哈希表。
需要说明的是,由于预设哈希表空间阈值可以用于表示预聚合哈希表的最大内存空间大小,且每个分组数据所占的内存大小可能不一样。例如,假设前一个分组数据写入预聚合哈希表后,预聚合哈希表的存储空间还是小于预设哈希表空间阈值,但插入下一个分组数据后,预聚合哈希表的存储空间就大于预设哈希表空间阈值。因此,当初始预聚合哈希表的存储空间大于或等于预设哈希表空间阈值,且在初始预聚合哈希表中未匹配到关键字数据,则表示当前的初始预聚合哈希表中没有可以存储对应第一分组数据的数据行。因此,根据预设淘汰算法从预聚合哈希表中选择要淘汰的第四分组数据,并从预聚合哈希表中删除淘汰的第四分组数据对应的数据行,为第一分组数据的写入提供存储空间。之后,本申请实施例可以将第一分组数据作为一个Key,根据预设哈希函数(此时相当于聚合函数)对该Key进行函数计算,将该Key值和函数计算的结果写入初始预聚合哈希表中,并将写入后的预聚合哈希表作为第一预聚合哈希表。
需要说明的是,将第一分组数据写入初始预聚合哈希表时,可以先将删除了第四分组数据的预聚合哈希表进行数据合并,以将第一分组数据写入预聚合哈希表的最后一个分组数据的下一行;也可以将第一分组数据直接写入预聚合哈希表中第四分组数据所在的行,在此不作具体限定。
需要说明的是,相比于现有技术在超过预设哈希表空间阈值后,对哈希表进行数据清空,并全部放到最终阶段进行聚合的方式。本申请实施例在判断出预聚合哈希表存储已经达到预设哈希表空间阈值后,就对预聚合哈希表执行数据淘汰的操作,从而不断持续的优化预聚合哈希表的命中率,能够有效提高预聚合哈希表的使用效率。
在一些实施例的步骤S130中,为了同时考虑分组数据的时间、频率等维度信息,本申请在将第一分组数据写入初始预聚合哈希表的同时,将第一分组数据也写入预聚合缓存中,以更新预聚合缓存中存储的初始缓存数据,即此时的初始缓存数据包括之前写入预聚合缓存的缓存数据和第一分组数据。
需要说明的是,预设淘汰算法可以为基于最近最少使用(Least Recently Used,LRU)的淘汰算法、基于最少使用(Least Frequently Used,LFU)的淘汰算法、基于最少使用窗口(Windows-Tiny LFU,W-TinyLFU)的淘汰算法等,在此不作具体限定。
请参阅图4,图4是本申请实施例提供的步骤S130的一个可选的流程图,在一些实施例中,当预设淘汰算法选择基于W-TinyLFU的淘汰算法,则预聚合缓存可以包括淘汰存储区域、保护存储区域和窗口存储区域。因此,步骤S130具体可以包括但不限于步骤S410至步骤S420,下面结合图4对这两个步骤进行详细介绍。
步骤S410,根据存储在窗口存储区域、淘汰存储区域和保护存储区域的初始缓存数据对第一分组数据进行数据匹配,得到第三匹配结果;
步骤S420,根据第三匹配结果将第一分组数据写入预聚合缓存。
需要说明的是,对于刚写入预聚合缓存的数据,会暂时先将该数据存储到窗口存储区域,再判断其具体是存储到哪个区域。淘汰存储区域用于存储可能会被淘汰的待淘汰缓存数据。保护存储区域用于存储访问频率较高,且暂时不会被淘汰的保护数据。窗口存储区域用于存储还未进行过频率数据比较的窗口缓存数据。
需要说明的是,预聚合缓存中对淘汰存储区域、保护存储区域和窗口存储区域的区间划分并不做具体限定,且窗口存储区域所占用的存储空间最小。
需要说明的是,当预设淘汰算法选择基于W-TinyLFU的淘汰算法,则其中的淘汰存储区域、保护存储区域和窗口存储区域可以分别采用单独的LFU或LRU算法,在此不作具体限定。
在一些实施例的步骤S410和步骤S420中,由于预聚合缓存中可能已经包含了存储的初始缓存数据,则先根据存储在窗口存储区域、淘汰存储区域和保护存储区域的初始缓存数据对第一分组数据进行数据匹配,以根据得到的第三匹配结果确定将第一分组数据写入预聚合缓存的什么区域。
需要说明的是,步骤S420具体包括以下场景三至场景五。
场景三,请参阅图5,图5是本申请实施例提供的场景三的一个可选的流程图,在本申请的一些实施例中,场景三具体包括但不限于步骤S510和步骤S520,下面结合图5对这两个步骤进行详细介绍。
步骤S510,当淘汰存储区域中存在与第一分组数据相同的初始缓存数据,将第一分组数据写入保护存储区域;
步骤S520,从淘汰存储区域中删除与第一分组数据相同的初始缓存数据。
需要说明的是,假设淘汰存储区域的数据存储采用基于LRU的算法,则淘汰存储区域中包含一个根据访问频率数据存储待淘汰缓存数据的第一链表,且第一链表的链表头部表示最近被访问的缓存数据,链表尾部表示最久没有被访问的缓存数据。其中,该链表为双向链表,当链表中的缓存数据在预设时间期限没有被访问,则会慢慢的被其他的缓存数据推向链表尾部;而如果链表中的缓存数据被访问,则会重新放到链表头部。因此,当淘汰存储区域中存在与第一分组数据相同的初始缓存数据,再次访问该数据后,更新与第一分组数据相同的初始缓存数据的访问频率数据,并将该初始缓存数据写入保护存储区域。然后,从淘汰存储区域中删除与第一分组数据相同的初始缓存数据,更新淘汰存储区域中的第一链表。
需要说明的是,假设淘汰存储区域的数据存储采用基于LFU的算法,则淘汰存储区域中包含一个根据访问频率数据存储待淘汰缓存数据的第一链表,且第一链表的链表头部表示访问频率最高的缓存数据,链表尾部表示最久没有被访问的缓存数据。其中,该链表为双向链表,且用于表示频率的大小关系,新加入存储区间的数据被设置到链表尾部,每次被访问频率会增加。如果频率大于链表中在其前面的数据的频率,则前移一位。因此,当淘汰存储区域中存在与第一分组数据相同的初始缓存数据,再次访问该数据后,更新与第一分组数据相同的初始缓存数据的访问频率数据,并将该初始缓存数据写入保护存储区域。然后,从淘汰存储区域中删除与第一分组数据相同的初始缓存数据,更新淘汰存储区域中的第一链表。
场景四,当保护存储区域或窗口存储区域中存在与第一分组数据相同的初始缓存数据,更新与第一分组数据相同的初始缓存数据的访问频率数据。
需要说明的是,当保护存储区域或窗口存储区域中任一区域存在与第一分组数据相同的初始缓存数据,则更新与第一分组数据相同的初始缓存数据的访问频率数据,以让该数据能够有机会在窗口存储区域或保护缓存区域中去积累访问频率,避免因为频率很低而直接被淘汰。
场景五,当预聚合缓存中不存在与第一分组数据相同的初始缓存数据,将第一分组数据写入窗口存储区域。
需要说明的是,当预聚合缓存中不存在与第一分组数据相同的初始缓存数据,则说明第一分组数据为首次访问的数据。将第一分组数据写入窗口缓存区域,以让第一分组数据能够有机会在窗口存储区域中积累访问频率。
需要说明的是,窗口存储区域中包含第二链表,保护存储区域中包含第三链表,第一链表、第二链表和第三链表的设置方式相同。并且,保护存储区域和窗口存储区域的数据存储方式也可以采用基于LFU的算法或基于LRU的算法,且具体的存储过程可参见上述在淘汰存储区域的存储过程,在此不再赘述。
示例性的,请参阅图6,图6为本申请实施例提供的基于W-TinyLFU的淘汰算法的结构示意图。该基于W-TinyLFU的淘汰算法所对应的预聚合缓存610包括淘汰存储区域611、保护存储区域612、窗口存储区域613和过滤器614。对于为新写入预聚合缓存的初始数据,将初始数据写入窗口存储区域613,且在接收到进行数据淘汰选择的信号后,该初始数据从窗口存储区域613进入过滤器614。当接收到进行数据淘汰选择的信号后,根据淘汰存储区域611中第一链表的链表尾部的待淘汰数据确定第一判断数据,并将第一判断数据输入过滤器614中。根据窗口存储区域613中第二链表的链表尾部的窗口缓存数据确定第二判断数据。然后,根据过滤器614对第一判断数据和第二判断数据进行频率数据的比较。当第一判断数据的访问频率数据小于或等于第二判断数据的访问频率数据,则将第一判断数据进行删除淘汰,并将第二判断数据存储到淘汰存储区域611;当第一判断数据的访问频率大于第二判断数据的访问频率,则将第二判断数据进行删除淘汰,且第一判断数据仍存储在淘汰存储区域611中。
需要说明的是,当对淘汰存储区域611中的待淘汰数据再次访问,则将该待淘汰数据变换存储到保护存储区域612,并从淘汰存储区域611中删除该数据。因此,本申请在淘汰哈希表内的分组数据时,既可以考虑到分组数据的出现频率信息,也能考虑到分组数据所出现的时间顺序信息,提高了数据库的聚合效率。
在一些实施例的步骤S140中,在对第二分组数据进行查询时,先根据第一预聚合哈希表中存储的关键字数据和第二分组数据进行关键字匹配,以确定第一预聚合哈希表中是否已经存储了与第二分组数据对应的关键字数据。
在一些实施例的步骤S150中,为了及时更新预聚合哈希表,则根据第一匹配结果对第一预聚合哈希表的存储空间和预设哈希表空间阈值进行空间判断。具体地,当第一预聚合哈希表的存储空间小于预设哈希表空间阈值,则不需要确定第三分组数据;当第一预聚合哈希表的存储空间等于预设哈希表空间阈值,则根据预设淘汰算法对初始缓存数据进行数据选择,确定第三分组数据。此时的预设淘汰算法与上面实施例中对预设淘汰算法的描述相同,在此不再赘述。并且,为了保证查询效率,对于同一目标数据列中的数据可以采用相同的预设淘汰算法。
请参阅图7,图7是本申请实施例提供的步骤S150的另一个可选的流程图,在本申请的一些实施例中,步骤S150具体还可以包括但不限于步骤S710至步骤S740,下面结合图7对这四个步骤进行详细介绍。
步骤S710,当第一预聚合哈希表的存储空间大于或等于预设哈希表空间阈值,根据待淘汰缓存数据的访问频率数据确定第一判断数据;
步骤S720,根据窗口缓存数据的访问频率数据确定第二判断数据;
步骤S730,对第一判断数据和第二判断数据进行频率数据比较,并根据频率数据比较的结果确定第三分组数据;
步骤S740,从预聚合缓存中删除第三分组数据。
在一些实施例的步骤S710至步骤S740中,当第一预聚合哈希表的存储空间大于或等于预设哈希表空间阈值,即预聚合哈希表已经达到存储上限,则需要从预聚合哈希表中淘汰数据,为新写入的数据释放空间。结合图6所示,假设预设淘汰算法选择基于W-TinyLFU的淘汰算法,则此时的第一分组数据已经写入预聚合缓存中。假设淘汰存储区域的数据存储采用基于LRU的算法,则根据访问频率数据将淘汰存储区域611中最近最少访问的数据作为第一判断数据,即第一链表的链表尾部的数据。并且,根据访问频率数据将窗口存储区域613中最近最少访问的数据作为第二判断数据,即第二链表的链表尾部的数据。然后,根据第一判断数据的访问频率数据和第二判断数据的访问频率数据进行频率数据比较,并根据频率数据比较的结果确定第三分组数据,即第三分组数据为预聚合缓存中最近最少访问的初始缓存数据。当第三分组数据为第一判断数据,则从淘汰存储区域611中删除第三分组数据,并将第二判断数据重新写到窗口存储区域613。当第三分组数据为第二判断数据,则从窗口存储区域613中删除第三分组数据。
需要说明的是,当第三分组数据是第一分组数据,从窗口存储区域613中删除第一分组数据。
需要说明的是,当预设淘汰算法选择基于LFU的淘汰算法,则预聚合缓存中存储了一个数据链表,以记录存储到其中的多个初始缓存数据和对应的访问频率。具体地,例如,对于第一分组数据,新加入预聚合缓存的第一分组数据将被设置到链表尾部。第一分组数据每次被访问后,其对应的访问频率会增加。当第一分组数据的访问频率大于数据链表中在第一分组数据之前的初始缓存数据的访问频率,则将在第一分组数据之前的数据和第一分组数据进行位置替换。其中,根据空间判断的结果和预设淘汰算法对初始缓存数据和第一分组数据进行数据选择时,将数据链表尾部的数据作为第三分组数据。
在一些实施例的步骤S160中,为了提高哈希表的使用效率,在确定第一匹配结果后,根据第一匹配结果将第二分组数据写入第一预聚合哈希表以更新第一预聚合哈希表,并将更新后的第一预聚合哈希表作为第二预聚合哈希表。
请参阅图8,图8是本申请实施例提供的步骤S160的一个可选的流程图,在本申请的一些实施例中,步骤S160具体包括但不限于步骤S810至步骤S830,下面结合图8对这三个步骤进行详细介绍。
步骤S810,当第一预聚合哈希表中包含和第二分组数据匹配的关键字数据,获取与第二分组数据匹配的第一关键字和第一关键字的第一键值;
步骤S820,根据第一预聚合哈希表的预设哈希函数、第一键值和第二分组数据进行函数计算,得到第二键值;
步骤S830,根据第二键值更新第一预聚合哈希表,并将更新后的第一预聚合哈希表作为第二预聚合哈希表。
在一些实施例的步骤S810至步骤S830中,与第一分组数据为目标数据列的中间分组数据的具体处理过程相同。由于第二分组数据为目标数据列的中间分组数据,则根据第一匹配结果将第二分组数据写入第一预聚合哈希表。具体地,当第一预聚合哈希表中包含和第二分组数据匹配的关键字数据,先从第一预聚合哈希表中确定与第二分组数据匹配的第一关键字和第一键值。然后,根据第一预聚合哈希表的预设哈希函数、第一键值和第二分组数据进行函数计算,例如,预设哈希函数为计数函数count,第一键值为数值1,则函数计算得到第二键值为数值2。之后,将第二键值替换到第一键值的位置以更新第一预聚合哈希表,并将更新后的第一预聚合哈希表作为第二预聚合哈希表。
请参阅图9,图9是本申请实施例提供的步骤S160的另一个可选的流程图,在本申请的一些实施例中,步骤S160具体还可以包括但不限于步骤S910至步骤S940,下面结合图9对这四个步骤进行详细介绍。
步骤S910,当第一预聚合哈希表中不包含和第二分组数据匹配的关键字数据,确定在第一预聚合哈希表中添加第二分组数据对应的第二关键字;
步骤S920,根据预设哈希函数和第二分组数据进行函数计算,得到第三键值;
步骤S930,从第一预聚合哈希表中删除第三分组数据,更新第一预聚合哈希表;
步骤S940,根据第二关键字、第三键值和第一预聚合哈希表进行哈希表合并,得到第二预聚合哈希表。
在一些实施例的步骤S910至步骤S940中,当第一预聚合哈希表中不包含和第二分组数据匹配的关键字数据,将第二分组数据作为第二关键字添加到第一预聚合哈希表中新的一行。然后,根据预设哈希函数和第二分组数据进行函数计算,例如,预设哈希函数为计数函数count,则得到第三键值为数值1。之后,将第三键值添加到与第二关键字相同的行中,即根据第二关键字、第三键值对第一预聚合哈希表进行哈希表更新,并将更新后的第一预聚合哈希表作为第二预聚合哈希表。
请参阅图10,图10是本申请实施例提供的数据库的查询方法的另一个可选的流程图。在本申请的一些实施例中,在步骤S170之前,本申请所提出的查询方法具体还可以包括但不限于步骤S1010至步骤S1050,下面结合图10对这五个步骤进行详细介绍。
步骤S1010,当第二分组数据不是结束标记,将第二分组数据作为新的第一分组数据,根据新的第一分组数据确定第五分组数据,第五分组数据的存储时间是新的第一分组数据的存储时间之后的下一个数据存储时间;
步骤S1020,根据第二预聚合哈希表中存储的关键字数据和第五分组数据进行关键字匹配,得到第二匹配结果;
步骤S1030,根据第二匹配结果对预设哈希表空间阈值和第二预聚合哈希表的存储空间进行空间判断,并根据空间判断的结果和预设淘汰算法对更新的预聚合缓存中的初始缓存数据进行数据选择,确定第六分组数据;
步骤S1040,根据第二匹配结果和第六分组数据将第五分组数据写入第二预聚合哈希表,得到第三预聚合哈希表,并将第五分组数据写入更新后的预聚合缓存,更新初始缓存数据;
步骤S1050,当第五分组数据是结束标记,对第六分组数据和第三预聚合哈希表的数据进行数据合并,得到目标查询表。
在一些实施例的步骤S1010至步骤S1050中,由于需要将目标数据列中的全部分组数据依次遍历,直至全部查询完成。当第二分组数据不是结束标记,将第二分组数据作为新的第一分组数据,将存储时间是新的第一分组数据的存储时间之后的下一个数据存储时间的数据作为第五分组数据。将根据第二分组数据更新的预聚合缓存中的全部数据作为新的初始缓存数据。并且,对第五分组数据的查询过程与第二分组数据的查询过程相同,在此不再赘述。当第五分组数据是结束标记,对第六分组数据和第三预聚合哈希表的数据进行数据合并,得到目标查询表;当第五分组数据不是结束标记,则将第五分组数据作为新的第一分组数据,继续遍历目标数据列,直至目标数据列的全部数据写入完成。
在一些实施例的步骤S170,在最终的聚合阶段,根据聚合函数对第三分组数据进行函数计算,得到第三分组数据的函数值。将第三分组数据和计算得到的函数值作为目标查询表的其中一行数据,并将该行数据和第二预聚合哈希表中的行数据进行行拼接,得到目标查询表。
示例性的,请参阅图11,图11为本申请实施例提供的查询方法的一个整体示例示意图。假设在学校的成绩统计数据库中包括每个班级的期末成绩表,如1班的成绩表t1、2班的成绩表t2、3班的成绩表t3等。当需要对1班的成绩表t1中不同成绩等级的人数进行统计时,将表t1作为目标数据表1110,且t1中包括学生名称字段和成绩等级字段,学生名称字段用于存储学生名称,成绩等级字段用于存储每个学生名称对应的成绩等级。当输入的数据查询请求对应的语句为“select 学生名称字段,成绩等级字段 count(*) from t1 groupby 成绩等级字段”,则确定目标数据列1120为成绩等级字段对应的列数据。其中,count(*)是一个聚合函数,用于表示返回成绩表t1中每个成绩等级的数量(即总行数)。count()会逐行判断目标数据列中的数据,若返回的不是NULL,就会加1,否则不加。并且设定成绩等级分为1、2、3、4四个等级。具体地,在预聚合阶段,将目标数据列1120中的第一个1作为第一分组数据,第二个1作为第二分组数据,且结束标记为空行,并不断更新第一分组数据和第二分组数据。假设当前的预设哈希函数为聚合函数count(*),由于初始预聚合哈希表1130中有存储空间,将第一个分组数据和根据count(*)计算得到的数值1写入初始预聚合哈希表1130。同时,需要将分组数据写入预聚合缓存中。由于第二个分组数据和第一个分组数据相同,更新第一个分组数据和对应的count(*)值,变为2。当对第三个分组数据处理时,由于初始预聚合哈希表1130中仍有存储空间,将第三个分组数据和根据count(*)计算得到的数值1写入初始预聚合哈希表1130,得到新的预聚合哈希表,记为第一哈希表1140。当对第四个分组数据处理时,由于此时的预聚合哈希表的存储空间等于预设哈希表空间阈值,根据预设淘汰算法从预聚合缓存中进行数据选择,确定需要淘汰的第三个分组数据。之后,从第一哈希表1140中删除第三个分组数据,将第三个分组输入放入最终聚合阶段,并将第四个分组数据写入第一哈希表中,得到新的预聚合哈希表,记为第二哈希表1150。依次类推,直至识别到目标数据列的结束标记停止。在最终聚合阶段,将得到的最后一个预聚合哈希表1160和之前删除到预聚合阶段的分组数据进行数据合并,得到目标查询表1170。
请参阅图12,图12是本申请实施例提供的数据库的查询装置的结构示意图,该装置可以实现上述实施例的数据库的查询方法,该装置包括参数确定模块1210、第一写入模块1220、第二写入模块1230、关键字匹配模块1240、数据选择模块1250、第三写入模块1260和数据合并模块1270。
参数确定模块1210,用于根据接收的数据查询请求确定目标数据列和初始预聚合哈希表,目标数据列包括第一分组数据、第二分组数据和预设的结束标记,第二分组数据的存储时间是第一分组数据的存储时间之后的下一个数据存储时间;
第一写入模块1220,用于根据初始预聚合哈希表的存储空间和预设哈希表空间阈值将第一分组数据写入初始预聚合哈希表,得到第一预聚合哈希表;
第二写入模块1230,用于将第一分组数据写入预聚合缓存中,更新预聚合缓存中存储的初始缓存数据;
关键字匹配模块1240,用于根据第一预聚合哈希表中存储的关键字数据和第二分组数据进行关键字匹配,得到第一匹配结果;
数据选择模块1250,用于根据第一匹配结果对第一预聚合哈希表的存储空间和预设哈希表空间阈值进行空间判断,并根据空间判断的结果和预设淘汰算法对初始缓存数据进行数据选择,确定第三分组数据;
第三写入模块1260,用于根据第一匹配结果和第三分组数据将第二分组数据写入第一预聚合哈希表,得到第二预聚合哈希表,并将第二分组数据写入更新后的预聚合缓存,更新初始缓存数据;
数据合并模块1270,用于当第二分组数据是结束标记,对第二预聚合哈希表的数据和第三分组数据进行数据合并,得到目标查询表。
需要说明的是,本申请实施例的数据库的查询装置用于实现上述实施例的数据库的查询方法,本申请实施例的数据库的查询装置与前述的数据库的查询方法相对应,具体的处理过程请参照前述的数据库的查询方法,在此不再赘述。
本申请实施例还提供了一种计算机设备,该计算机设备包括:至少一个存储器,至少一个处理器,至少一个计算机程序,至少一个计算机程序被存储在至少一个存储器中,至少一个处理器执行至少一个计算机程序以实现上述实施例中任一种的数据库的查询方法。该计算机设备可以为包括平板电脑、车载电脑等任意智能终端。
请参阅图13,图13示意了另一实施例的一种计算机设备的硬件结构,该计算机设备包括:
处理器1310,可以采用通用的中央处理器(Central Processing Unit,CPU)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请实施例所提供的技术方案;
存储器1320,可以采用只读存储器(Read Only Memory,ROM)、静态存储设备、动态存储设备或者随机存取存储器(Random Access Memory,RAM)等形式实现。存储器1320可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1320中,并由处理器1310来调用执行本申请实施例的数据库的查询方法;
输入/输出接口1330,用于实现信息输入及输出;
通信接口1340,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;
总线1350,在设备的各个组件(例如处理器1310、存储器1320、输入/输出接口1330和通信接口1340)之间传输信息;
其中处理器1310、存储器1320、输入/输出接口1330和通信接口1340通过总线1350实现彼此之间在设备内部的通信连接。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,计算机程序用于使计算机执行上述实施例中数据库的查询方法。
本申请实施例提供的一种数据库的查询方法和装置、计算机设备、存储介质,通过将两阶段聚合中的预聚合阶段的哈希表视为缓存,并在哈希表内存占用超过限制的时候,采用缓存淘汰策略,即根据预设淘汰算法选择淘汰的分组数据至最终聚合阶段,提升了预聚合哈希表的使用效率,避免了落盘带来的性能损耗。此外,本申请实施例已经在MogDB内实现,并且在tpch lineitem表上进行聚合测试,实验发现,相比于原有的预聚合阶段落盘的实现方式,本申请实施例可以带来15% ~ 20%左右的整体SQL效率提升。因此,本申请实施例能够在数据库进行聚合查询时,有效提高对数据库的查询效率。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本申请实施例描述的实施例是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本领域技术人员可以理解的是,图中示出的技术方案并不构成对本申请实施例的限定,可以包括比图示更多或更少的步骤,或者组合某些步骤,或者不同的步骤。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序的介质。
以上参阅附图说明了本申请实施例的优选实施例,并非因此局限本申请实施例的权利范围。本领域技术人员不脱离本申请实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本申请实施例的权利范围之内。

Claims (10)

1.一种数据库的查询方法,其特征在于,所述方法包括:
根据接收的数据查询请求确定目标数据列和初始预聚合哈希表,所述目标数据列包括第一分组数据、第二分组数据和预设的结束标记,所述第二分组数据的存储时间是所述第一分组数据的存储时间之后的下一个数据存储时间;
根据所述初始预聚合哈希表的存储空间和预设哈希表空间阈值将所述第一分组数据写入所述初始预聚合哈希表,得到第一预聚合哈希表;
将所述第一分组数据写入预聚合缓存中,更新所述预聚合缓存中存储的初始缓存数据;
根据所述第一预聚合哈希表中存储的关键字数据和所述第二分组数据进行关键字匹配,得到第一匹配结果;
根据所述第一匹配结果对所述第一预聚合哈希表的存储空间和所述预设哈希表空间阈值进行空间判断,并根据空间判断的结果和预设淘汰算法对所述初始缓存数据进行数据选择,确定第三分组数据;
根据所述第一匹配结果和所述第三分组数据将所述第二分组数据写入所述第一预聚合哈希表,得到第二预聚合哈希表,并将所述第二分组数据写入更新后的所述预聚合缓存,更新所述初始缓存数据;
当所述第二分组数据是所述结束标记,对所述第二预聚合哈希表的数据和所述第三分组数据进行数据合并,得到目标查询表。
2.根据权利要求1所述的方法,其特征在于,所述根据所述初始预聚合哈希表的存储空间和预设哈希表空间阈值将所述第一分组数据写入所述初始预聚合哈希表,得到第一预聚合哈希表,包括:
当所述初始预聚合哈希表的存储空间小于所述预设哈希表空间阈值,将所述第一分组数据写入所述初始预聚合哈希表,得到所述第一预聚合哈希表;
或者,
当所述初始预聚合哈希表的存储空间大于或等于所述预设哈希表空间阈值,根据所述预设淘汰算法对所述初始缓存数据进行数据选择,得到第四分组数据;
根据所述第四分组数据将所述第一分组数据写入所述初始预聚合哈希表,得到所述第一预聚合哈希表。
3.根据权利要求1所述的方法,其特征在于,所述根据所述第一匹配结果和所述第三分组数据将所述第二分组数据写入所述第一预聚合哈希表,得到第二预聚合哈希表,包括:
当所述第一预聚合哈希表中包含和所述第二分组数据匹配的所述关键字数据,获取与所述第二分组数据匹配的第一关键字和所述第一关键字的第一键值;
根据所述第一预聚合哈希表的预设哈希函数、所述第一键值和所述第二分组数据进行函数计算,得到第二键值;
根据所述第二键值更新所述第一预聚合哈希表,并将更新后的所述第一预聚合哈希表作为所述第二预聚合哈希表。
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一匹配结果和所述第三分组数据将所述第二分组数据写入所述第一预聚合哈希表,得到第二预聚合哈希表,还包括:
当所述第一预聚合哈希表中不包含和所述第二分组数据匹配的所述关键字数据,确定在所述第一预聚合哈希表中添加所述第二分组数据对应的第二关键字;
根据所述预设哈希函数和所述第二分组数据进行函数计算,得到第三键值;
从所述第一预聚合哈希表中删除所述第三分组数据,更新所述第一预聚合哈希表;
根据所述第二关键字、所述第三键值和更新后的所述第一预聚合哈希表进行哈希表合并,得到所述第二预聚合哈希表。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述预聚合缓存包括淘汰存储区域、保护存储区域和窗口存储区域;
所述将所述第一分组数据写入预聚合缓存中,包括:
当所述淘汰存储区域中存在与所述第一分组数据相同的所述初始缓存数据,将所述第一分组数据写入所述保护存储区域;
从所述淘汰存储区域中删除与所述第一分组数据相同的所述初始缓存数据;
或者,
当所述保护存储区域或所述窗口存储区域中存在与所述第一分组数据相同的所述初始缓存数据,更新与所述第一分组数据相同的所述初始缓存数据的访问频率数据;
或者,
当所述预聚合缓存中不存在与所述第一分组数据相同的所述初始缓存数据,将所述第一分组数据写入所述窗口存储区域。
6.根据权利要求5所述的方法,其特征在于,所述淘汰存储区域用于存储待淘汰缓存数据,所述窗口存储区域用于存储窗口缓存数据;
所述根据空间判断的结果和预设淘汰算法对所述初始缓存数据进行数据选择,确定第三分组数据,包括:
当所述第一预聚合哈希表的存储空间大于或等于所述预设哈希表空间阈值,根据所述待淘汰缓存数据的访问频率数据确定第一判断数据;
根据所述窗口缓存数据的访问频率数据确定第二判断数据;
对所述第一判断数据和所述第二判断数据进行频率数据比较,并根据频率数据比较的结果确定所述第三分组数据;
从所述预聚合缓存中删除所述第三分组数据。
7.根据权利要求1至4任一项所述的方法,其特征在于,在所述当所述第二分组数据是所述结束标记,对所述第二预聚合哈希表的数据和所述第三分组数据进行数据合并,得到目标查询表之前,所述方法还包括:
当所述第二分组数据不是所述结束标记,将所述第二分组数据作为新的第一分组数据,根据新的所述第一分组数据确定第五分组数据,所述第五分组数据的存储时间是新的所述第一分组数据的存储时间之后的下一个数据存储时间;
根据所述第二预聚合哈希表中存储的关键字数据和所述第五分组数据进行关键字匹配,得到第二匹配结果;
根据所述第二匹配结果对所述预设哈希表空间阈值和所述第二预聚合哈希表的存储空间进行空间判断,并根据空间判断的结果和所述预设淘汰算法对更新的所述预聚合缓存中的所述初始缓存数据进行数据选择,确定第六分组数据;
根据所述第二匹配结果和所述第六分组数据将所述第五分组数据写入所述第二预聚合哈希表,得到第三预聚合哈希表,并将所述第五分组数据写入更新后的所述预聚合缓存,更新所述初始缓存数据;
当所述第五分组数据是所述结束标记,对所述第六分组数据和所述第三预聚合哈希表的数据进行数据合并,得到所述目标查询表。
8.一种数据库的查询装置,其特征在于,所述装置包括:
参数确定模块,用于根据接收的数据查询请求确定目标数据列和初始预聚合哈希表,所述目标数据列包括第一分组数据、第二分组数据和预设的结束标记,所述第二分组数据的存储时间是所述第一分组数据的存储时间之后的下一个数据存储时间;
第一写入模块,用于根据所述初始预聚合哈希表的存储空间和预设哈希表空间阈值将所述第一分组数据写入所述初始预聚合哈希表,得到第一预聚合哈希表;
第二写入模块,用于将所述第一分组数据写入预聚合缓存中,更新所述预聚合缓存中存储的初始缓存数据;
关键字匹配模块,用于根据所述第一预聚合哈希表中存储的关键字数据和所述第二分组数据进行关键字匹配,得到第一匹配结果;
数据选择模块,用于根据所述第一匹配结果对所述第一预聚合哈希表的存储空间和所述预设哈希表空间阈值进行空间判断,并根据空间判断的结果和预设淘汰算法对所述初始缓存数据进行数据选择,确定第三分组数据;
第三写入模块,用于根据所述第一匹配结果和所述第三分组数据将所述第二分组数据写入所述第一预聚合哈希表,得到第二预聚合哈希表,并将所述第二分组数据写入更新后的所述预聚合缓存,更新所述初始缓存数据;
数据合并模块,用于当所述第二分组数据是所述结束标记,对所述第二预聚合哈希表的数据和所述第三分组数据进行数据合并,得到目标查询表。
9.一种计算机设备,其特征在于,包括:
至少一个存储器;
至少一个处理器;
至少一个计算机程序;
所述至少一个计算机程序被存储在所述至少一个存储器中,所述至少一个处理器执行所述至少一个计算机程序以实现:
如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于使计算机执行:
如权利要求1至7中任一项所述的方法。
CN202310710667.XA 2023-06-15 2023-06-15 数据库的查询方法和装置、计算机设备、存储介质 Active CN116467354B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310710667.XA CN116467354B (zh) 2023-06-15 2023-06-15 数据库的查询方法和装置、计算机设备、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310710667.XA CN116467354B (zh) 2023-06-15 2023-06-15 数据库的查询方法和装置、计算机设备、存储介质

Publications (2)

Publication Number Publication Date
CN116467354A CN116467354A (zh) 2023-07-21
CN116467354B true CN116467354B (zh) 2023-09-12

Family

ID=87181066

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310710667.XA Active CN116467354B (zh) 2023-06-15 2023-06-15 数据库的查询方法和装置、计算机设备、存储介质

Country Status (1)

Country Link
CN (1) CN116467354B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999053422A1 (en) * 1998-04-15 1999-10-21 Inktomi Corporation High performance object cache
EP3098730A1 (en) * 2015-05-29 2016-11-30 Sap Se Aggregating database entries by hashing
CN107633001A (zh) * 2017-08-03 2018-01-26 北京空间科技信息研究所 哈希分区优化方法和装置
CN114640504A (zh) * 2022-02-24 2022-06-17 京东科技信息技术有限公司 Cc攻击防护方法、装置、设备和存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999053422A1 (en) * 1998-04-15 1999-10-21 Inktomi Corporation High performance object cache
EP3098730A1 (en) * 2015-05-29 2016-11-30 Sap Se Aggregating database entries by hashing
CN107633001A (zh) * 2017-08-03 2018-01-26 北京空间科技信息研究所 哈希分区优化方法和装置
CN114640504A (zh) * 2022-02-24 2022-06-17 京东科技信息技术有限公司 Cc攻击防护方法、装置、设备和存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
时序数据多维聚合查询服务的实现;盛家;房俊;郭晓乾;王承栋;;重庆大学学报(第07期);全文 *

Also Published As

Publication number Publication date
CN116467354A (zh) 2023-07-21

Similar Documents

Publication Publication Date Title
CN101236569B (zh) 一种基于ContextFS上下文文件系统的高效动态路径解析方法
CN102971732A (zh) 键/值存储器的集成分级查询处理的系统结构
CN109344157A (zh) 读写分离方法、装置、计算机设备及存储介质
CN109947668A (zh) 存储数据的方法和装置
CA2711779A1 (en) Bloom filter for storing file access history
CN107301215B (zh) 一种搜索结果缓存方法及装置、搜索方法及装置
CN111159219B (zh) 一种数据管理方法、装置、服务器及存储介质
CN109766318B (zh) 文件读取方法及装置
CN111400334B (zh) 数据处理方法、装置、存储介质及电子装置
CN108874930A (zh) 文件属性信息统计方法、装置、系统、设备及存储介质
CN109947729A (zh) 一种实时数据分析方法及装置
CN103559307A (zh) 一种查询的缓存方法及装置
CN112711612A (zh) 数据处理方法、装置和存储介质及电子装置
CN111930305A (zh) 数据的存储方法和装置、存储介质、电子装置
CN114138840A (zh) 数据查询方法、装置、设备及存储介质
CN107659626B (zh) 面向临时元数据的分离存储方法
CN116467354B (zh) 数据库的查询方法和装置、计算机设备、存储介质
CN116756253B (zh) 关系型数据库的数据存储、查询方法、装置、设备和介质
US20230336368A1 (en) Block chain-based data processing method and related apparatus
US11544242B2 (en) System and method for storing and retrieving data in different data spaces
CN114338725B (zh) 一种提升大规模集群渲染上限的分布式存储调度方法
US11330054B2 (en) System and method for load balancing in a data storage system
CN103365897A (zh) 一种支持Bigtable数据模型的片段缓存方法
CN111178965A (zh) 一种资源投放方法及服务器
CN117725096B (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
GR01 Patent grant
GR01 Patent grant