CN111209305B - 查询数据的方法、数据节点、分布式数据库、计算设备 - Google Patents
查询数据的方法、数据节点、分布式数据库、计算设备 Download PDFInfo
- Publication number
- CN111209305B CN111209305B CN201911423288.2A CN201911423288A CN111209305B CN 111209305 B CN111209305 B CN 111209305B CN 201911423288 A CN201911423288 A CN 201911423288A CN 111209305 B CN111209305 B CN 111209305B
- Authority
- CN
- China
- Prior art keywords
- data node
- data
- node
- sub
- tuples
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供查询数据的方法、数据节点、分布式数据库、计算设备和计算机程序产品。该分布式数据库包括第一数据节点和第二数据节点。在该方法中,该第一数据节点和该第二数据节点分别获取查询语句对应的执行计划,该查询语句包含NOT IN表达式。该第二数据节点基于自己获取的执行计划从本地的子内表所包含的多个元组中筛选出一个或多个目标元组,该目标元组在该NOT IN表达式指定的一个或多个列为NULL值。该第二数据节点将自己的目标元组发送给第一数据节点。该第一数据节点根据自己的子外表中的元组和该第二数据节点的目标元组处理该执行计划,以从自己的子外表获得满足该NOT IN表达式的元组。这样提高了查询效率。
Description
技术领域
本申请涉及数据库领域,尤其涉及查询数据的方法、数据节点、分布式数据库、计算设备和计算机程序产品。
背景技术
分布式数据库,支持SQL(Structured Query Language)语句的数据查询。该SQL语句可以包括NOT IN表达式。例如,该NOT IN表达式用于比较两张表中的指定列,一张表为待查询的外表,另一张表为用于与外表比较的内表;分布式数据库的所有数据节点(datanode,DN)会相互复制各自具有的内表的子内表,从而所有DN都具有整个内表的所有元组;然后,每个DN会将其具有的外表的子外表中的指定列与该DN上的整个外表按照NOT IN表达式进行比较,则比较结果为该外表中满足NOT IN表达式的元组。
这种处理NOT IN表达式的解决方案,需要在所有DN之间相互复制各自具有的内表的子内表来形成完整的内表,该复制操作会占用大量带宽,并且,长时间的复制时间会影响查询效率。
发明内容
有鉴于此,本申请提供了一种查询数据的方法、数据节点、分布式数据库、计算设备和计算机程序产品,提高包含NOT IN表达式的SQL语句的查询效率。
第一方面,本申请提供一种查询数据的方法。
该方法应用于分布式数据库,分布式数据库包括协调节点和多个数据节点;该多个数据节点分别存储不同的子外表和不同的子内表;该多个数据节点中的一个或多个目标数据节点所存储的子内表具有目标元组,该目标元组在NOT IN表达式指定的一个或多个列为NULL值。
在该方法中,该协调节点接收查询语句,该查询语句包含该NOT IN表达式。分布式数据库的所有数据节点分别获取该查询语句对应的执行计划。第一数据节点为分布式数据库的一个数据节点,分布式数据库的所有数据节点中除了第一数据节点的所有目标数据节点分别基于获取的执行计划从各自的子内表中筛选出目标元组。分布式数据库的所有数据节点中除了该第一数据节点的所有目标数据节点,分别将各自筛选出的目标元组向该第一数据节点发送;相应地,该第一数据节点接收分布式数据库的所有数据节点中除了该第一数据节点的所有目标数据节点分别发送的目标元组。这样,该第一数据节点可以基于该第一数据节点的子外表、该第一数据节点的子内表和该第一数据节点接收的目标元组处理该第一数据节点获取的执行计划,以便从该第一数据节点的子外表中选出满足该查询语句中的NOT IN表达式的元组。最后,该第一数据节点将选出的元组向该协调节点发送。
这样,在第一数据节点处理包含NOT IN表达式的SQL语句时,仅需要将其它数据节点的目标元组复制到该第一数据节点,不需要复制其它数据节点的子外表中除了目标元组以外的其它元组,相对于现有技术需要将其它数据节点的子外表中的所有元组复制到第一数据节点,减少了复制所占用的带宽,也减少了第一数据节点反馈满足SQL语句的元组的时间,提高了查询效率。
第一方面的一种可能设计,在该方法中,第一数据节点为分布式数据库的所有数据节点中的任意一个数据节点。
这样,在分布式数据库的所有数据节点处理包含NOT IN表达式的SQL语句时,仅在所有数据节点之间复制目标元组,不需要复制所有数据节点的子外表中除了目标元组以外的其它元组,相对于现有技术需要在所有数据节点之间复制所有数据节点的子外表,减少了复制所占用的带宽,也提高了所有数据节点反馈满足SQL语句的元组的时间,提高了查询效率。
第一方面的一种可能设计,在该方法中,在该第一数据节点为一个目标数据节点时,该第一数据节点基于该第一数据节点获取的执行计划从该第一数据节点的子内表中筛选出该第一数据节点的目标元组,该第一数据节点向分布式数据库的所有数据节点中除了该第一数据节点以外的其它数据节点发送该第一数据节点的目标元组。
这样,每个数据节点都具有第一数据节点的目标元组。从而,每个数据节点均可以基于其具有的子外表和子内表以及其它数据节点的目标元组处理执行计划,以便从该数据节点的子外表中选出满足该查询语句中的NOT IN表达式的元组。每个数据节点均将选出的元组向该协调节点发送。
第一方面的一种可能设计,在该方法中,该协调节点接收该分布式数据库的所有数据节点发送的满足该查询语句的元组,接收的所有满足该查询语句的元组为该查询语句的查询结果。这样,协调节点可以向用户呈现该查询结果,或者向应用或中间件反馈该查询结果。
第一方面的一种可能设计,在该方法中,该协调节点按照相同的哈希算法将外表的元组和内表的元组分布到该分布式数据库的所有数据节点的子外表和子内表。具体地,该协调节点按照该哈希算法将外表的元组分布到该分布式数据库的所有数据节点的子外表;该协调节点按照相同的该哈希算法将内表的元组分布到该分布式数据库的所有数据节点的子内表。这样,同一数据节点上,将子外表中不包括NULL值的元组与子内表中不包括NULL值的元组进行比较时,才有可能匹配相同的元组。不同数据节点上,将一个数据节点的子外表中不包括NULL值的元组与另一个数据节点的子内表中不包括NULL值的元组进行比较时,不会匹配到相同的元组。这样,只需要在同一数据节点上进行非NULL值的元组匹配,就可以筛除子外表中比较结果为相同的元组,以便进一步针对目标元组(在待比较的至少一个列为NULL值)的场景从子外表中筛选出满足NOT IN的元组。
第一方面的一种可能设计,在该方法中,该协调节点基于该查询语句生成执行计划,并将该执行计划发送至分布式数据库的每个数据节点。以便每个数据节点处理该执行计划。
第一方面的一种可能设计,在该方法中,该协调节点向分布式数据库的每个数据节点发送该查询语句。分布式数据库的每个数据节点基于该查询语句生成各自的执行计划,每个数据节点处理各自的执行计划。
第二方面,本申请提供一种协调节点。该协调节点包括的多个功能模块,用于实现第一方面或第一方面的任意可能设计提供的方法中由协调节点执行的不同步骤。
第三方面,本申请提供一种数据节点。该数据节点包括的多个功能模块,用于实现第一方面或第一方面的任意可能设计提供的方法中由该数据节点执行的不同步骤。
第四方面,本申请提供一种分布式数据库,该分布式数据库包括第一方面或第一方面的任意可能设计提供的协调节点和数据节点。
第五方面,本申请提供一种计算设备,该计算设备包括处理器和存储器。该存储器存储计算机指令;该处理器执行该存储器存储的计算机指令,使得该计算设备执行上述第一方面或者第一方面的各种可能设计提供的方法中由协调节点执行的步骤,或者使得该计算设备执行上述第一方面或者第一方面的各种可能设计提供的方法中由数据节点执行的步骤,或者使得该计算设备部署第二方面提供的协调节点,或者使得该计算设备部署第三方面提供的数据节点。
第六方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当计算设备的处理器执行该计算机指令时,该计算设备执行上述第一方面或者第一方面的各种可能设计提供的方法中由协调节点执行的步骤,或者该计算设备执行上述第一方面或者第一方面的各种可能设计提供的方法中由数据节点执行的步骤,或者该计算设备部署第二方面提供的协调节点,或者该计算设备部署第三方面提供的数据节点。
第七方面,本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算设备执行上述第一方面或者第一方面的各种可能设计提供的方法中由协调节点执行的步骤,或者使得该计算设备执行上述第一方面或者第一方面的各种可能设计提供的方法中由数据节点执行的步骤,或者使得该计算设备部署第二方面提供的协调节点,或者使得该计算设备部署第三方面提供的数据节点。
第八方面,本申请提供一种查询数据的方法。
该方法应用于分布式数据库,该分布式数据库至少包括第一数据节点和第二数据节点。即,第一数据节点和第二数据节点为分布式数据库中的两个数据节点。
在该方法中,该第一数据节点和该第二数据节点分别获取查询语句对应的执行计划,该查询语句包含NOT IN表达式。该第二数据节点基于自己获取的执行计划从本地的子内表所包含的多个元组中筛选出一个或多个目标元组,该目标元组在该NOT IN表达式指定的一个或多个列为NULL值。该第二数据节点将该第二数据节点的目标元组发送给第一数据节点。该第一数据节点根据该第一数据节点的子外表中的元组和该第二数据节点的目标元组处理该执行计划,以从该第一数据节点的子外表获得满足该NOT IN表达式的元组。
这样,在第一数据节点处理包含NOT IN表达式的SQL语句时,第二数据节点仅需要将自己的目标元组发送至该第一数据节点,不需要复制第二数据节点的子外表中除了目标元组以外的其它元组,相对于现有技术需要将第二数据节点的子外表中的所有元组复制到第一数据节点,减少了复制所占用的带宽,也减少了第一数据节点反馈满足SQL语句的元组的时间,提高了查询效率。
第八方面的一种可能设计,在该方法中,分布式数据库仅包括第一数据节点和第二数据节点。
第二数据节点与第一数据节点在本方法中的功能类似。例如,第一数据节点基于自己获取的执行计划从本地的子内表所包含的多个元组中筛选出一个或多个目标元组,该目标元组在该NOT IN表达式指定的一个或多个列为NULL值。该第一数据节点将该第一数据节点的目标元组发送给第二数据节点。该第二数据节点根据该第二数据节点的子外表中的元组和该第一数据节点的目标元组处理该执行计划,以从该第二数据节点的子外表获得满足该NOT IN表达式的元组。
这样,在第二数据节点处理包含NOT IN表达式的SQL语句时,第一数据节点仅需要将自己的目标元组发送至该第二数据节点,不需要复制第一数据节点的子外表中除了目标元组以外的其它元组,相对于现有技术需要将第一数据节点的子外表中的所有元组复制到第二数据节点,减少了复制所占用的带宽,也减少了第二数据节点反馈满足SQL语句的元组的时间,提高了查询效率。
第八方面的一种可能设计,该分布式数据库包括除了该第一数据节点和该第二数据节点以外的其它数据节点。
在该方法中,该其它数据节点从各自的子内表所包含的多个元组中筛选出各自的目标元组,该其它数据节点将该其它数据节点的目标元组向该第一数据节点发送。相应地,该第一数据节点根据该第一数据节点的子外表中的元组和该第二数据节点的目标元组以及该其它数据节点的目标元组处理该执行计划,以从该第一数据节点的子外表获得满足该NOT IN表达式的元组。
这样,在第一数据节点处理包含NOT IN表达式的SQL语句时,仅需要将其它数据节点的目标元组复制到该第一数据节点,不需要复制其它数据节点的子外表中除了目标元组以外的其它元组,相对于现有技术需要将其它数据节点的子外表中的所有元组复制到第一数据节点,减少了复制所占用的带宽,也减少了第一数据节点反馈满足SQL语句的元组的时间,提高了查询效率。
第八方面的一种可能设计,在该方法中,该第一数据节点根据该第一数据节点的子外表中的元组、该第一数据节点的子内表中的元组、该第二数据节点的目标元组和该其它数据节点的目标元组处理该执行计划,以从该第一数据节点的子外表获得满足该NOT IN表达式的元组。
第八方面的一种可能设计,在该方法中,第一数据节点为分布式数据库的所有数据节点中的任意一个数据节点。
这样,在分布式数据库的所有数据节点处理包含NOT IN表达式的SQL语句时,仅在所有数据节点之间复制目标元组,不需要复制所有数据节点的子外表中除了目标元组以外的其它元组,相对于现有技术需要在所有数据节点之间复制所有数据节点的子外表,减少了复制所占用的带宽,也提高了所有数据节点反馈满足SQL语句的元组的时间,提高了查询效率。
第八方面的一种可能设计,该分布式数据库还包括协调节点。
在该方法中,该分布式数据库的所有数据节点(例如第一数据节点)将满足该查询语句(包括NOT IN表达式)的元组向分布式数据库的协调节点发送。该协调节点接收该分布式数据库的所有数据节点发送的满足该查询语句的元组,接收的所有满足该查询语句的元组为该查询语句的查询结果。这样,协调节点可以向用户呈现该查询结果,或者向应用或中间件反馈该查询结果。
第八方面的一种可能设计,fai l分布式数据库包含外表和内表,该外表包括多个子外表,该内表包括多个子内表;该多个子外表分别位于该分布式数据库的不同数据节点上,该多个子内表分别位于该分布式数据库的不同数据节点上。
在该方法中,该分布式数据库的协调节点按照相同的哈希算法将该外表的元组和该内表的元组分布到该分布式数据库的所有数据节点的子外表和子内表。具体地,该协调节点按照该哈希算法将外表的元组分布到该分布式数据库的所有数据节点的子外表;该协调节点按照相同的该哈希算法将内表的元组分布到该分布式数据库的所有数据节点的子内表。
这样,同一数据节点上,将子外表中不包括NULL值的元组与子内表中不包括NULL值的元组进行比较时,才有可能匹配相同的元组。不同数据节点上,将一个数据节点的子外表中不包括NULL值的元组与另一个数据节点的子内表中不包括NULL值的元组进行比较时,不会匹配到相同的元组。这样,只需要在同一数据节点上进行非NULL值的元组匹配,就可以筛除子外表中比较结果为相同的元组,以便进一步针对目标元组(在待比较的至少一个列为NULL值)的场景从子外表中筛选出满足NOT IN的元组。
第九方面,本申请提供一种协调节点。该协调节点包括的多个功能模块,用于实现第八方面或第八方面的任意可能设计提供的方法中由协调节点执行的不同步骤。
第十方面,本申请提供一种数据节点。该数据节点包括的多个功能模块,用于实现第八方面或第八方面的任意可能设计提供的方法中由该数据节点执行的不同步骤。
第十一方面,本申请提供一种分布式数据库,该分布式数据库包括第八方面或第八方面的任意可能设计提供的协调节点和数据节点。
第十二方面,本申请提供一种计算设备,该计算设备包括处理器和存储器。该存储器存储计算机指令;该处理器执行该存储器存储的计算机指令,使得该计算设备执行上述第八方面或者第八方面的各种可能设计提供的方法中由协调节点执行的步骤,或者使得该计算设备执行上述第八方面或者第八方面的各种可能设计提供的方法中由数据节点执行的步骤,或者使得该计算设备部署第九方面提供的协调节点,或者使得该计算设备部署第十方面提供的数据节点。
第十三方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当计算设备的处理器执行该计算机指令时,该计算设备执行上述第八方面或者第八方面的各种可能设计提供的方法中由协调节点执行的步骤,或者该计算设备执行上述第八方面或者第八方面的各种可能设计提供的方法中由数据节点执行的步骤,或者该计算设备部署第九方面提供的协调节点,或者该计算设备部署第十方面提供的数据节点。
第十四方面,本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算设备执行上述第八方面或者第八方面的各种可能设计提供的方法中由协调节点执行的步骤,或者使得该计算设备执行上述第八方面或者第八方面的各种可能设计提供的方法中由数据节点执行的步骤,或者使得该计算设备部署第九方面提供的协调节点,或者使得该计算设备部署第十方面提供的数据节点。
第十五方面,本申请提供一种查询数据的方法。分布式数据库包括协调节点和多个数据节点;该多个数据节点分别存储不同的子外表和不同的子内表;该多个数据节点中的一个或多个目标数据节点所存储的子内表具有目标元组,该目标元组在NOT IN表达式指定的一个或多个列为NULL值;该方法包括:
该协调节点接收包含该NOT IN表达式的查询语句;
该多个数据节点分别获取该查询语句对应的执行计划;
该多个数据节点中除了第一数据节点的所有目标数据节点分别基于获取的执行计划从各自的子内表中筛选出目标元组;
该多个数据节点中除了该第一数据节点的所有目标数据节点分别将各自筛选出的目标元组向该第一数据节点发送;
该第一数据节点接收该多个数据节点中除了该第一数据节点的所有目标数据节点分别发送的目标元组;
该第一数据节点基于该第一数据节点的子外表、该第一数据节点的子内表和该第一数据节点接收的目标元组处理该第一数据节点获取的执行计划来从该第一数据节点的子外表中选出满足该查询语句中的NOT IN表达式的元组,并将选出的元组向该协调节点发送。
这样,在第一数据节点处理包含NOT IN表达式的SQL语句时,仅需要将其它数据节点的目标元组复制到该第一数据节点,不需要复制其它数据节点的子外表中除了目标元组以外的其它元组,相对于现有技术需要将其它数据节点的子外表中的所有元组复制到第一数据节点,减少了复制所占用的带宽,也减少了第一数据节点反馈满足SQL语句的元组的时间,提高了查询效率。
第十五方面的一种可能设计,在该方法中,该第一数据节点为该多个数据节点中的任意一个数据节点。
这样,在分布式数据库的所有数据节点处理包含NOT IN表达式的SQL语句时,仅在所有数据节点之间复制目标元组,不需要复制所有数据节点的子外表中除了目标元组以外的其它元组,相对于现有技术需要在所有数据节点之间复制所有数据节点的子外表,减少了复制所占用的带宽,也提高了所有数据节点反馈满足SQL语句的元组的时间,提高了查询效率。
第十五方面的一种可能设计,在该方法中,该方法包括:
在该第一数据节点为该多个数据节点中的一个目标数据节点时,该第一数据节点基于该第一数据节点获取的执行计划从该第一数据节点的子内表中筛选出该第一数据节点的目标元组,该第一数据节点向该多个数据节点中除了该第一数据节点以外的其它数据节点发送该第一数据节点的目标元组。
这样,每个数据节点都具有第一数据节点的目标元组。从而,每个数据节点均可以基于其具有的子外表和子内表以及其它数据节点的目标元组处理执行计划,以便从该数据节点的子外表中选出满足该查询语句中的NOT IN表达式的元组。每个数据节点均将选出的元组向该协调节点发送。
第十五方面的一种可能设计,在该方法中,该方法包括:
该协调节点接收该分布式数据库的所有数据节点发送的满足该查询语句的元组,接收的所有满足该查询语句的元组为该查询语句的查询结果。
这样,协调节点可以向用户呈现该查询结果,或者向应用或中间件反馈该查询结果。
第十五方面的一种可能设计,在该方法中,该方法包括:
该协调节点按照相同的哈希算法将外表的元组和内表的元组分布到该分布式数据库的该多个数据节点的子外表和子内表。
这样,同一数据节点上,将子外表中不包括NULL值的元组与子内表中不包括NULL值的元组进行比较时,才有可能匹配相同的元组。不同数据节点上,将一个数据节点的子外表中不包括NULL值的元组与另一个数据节点的子内表中不包括NULL值的元组进行比较时,不会匹配到相同的元组。这样,只需要在同一数据节点上进行非NULL值的元组匹配,就可以筛除子外表中比较结果为相同的元组,以便进一步针对目标元组(在待比较的至少一个列为NULL值)的场景从子外表中筛选出满足NOT IN的元组。
第十六方面,本申请提供一种协调节点。该协调节点包括的多个功能模块,用于实现第十五方面或第十五方面的任意可能设计提供的方法中由协调节点执行的不同步骤。
第十七方面,本申请提供一种数据节点。该数据节点包括的多个功能模块,用于实现第十五方面或第十五方面的任意可能设计提供的方法中由该数据节点执行的不同步骤。
第十八方面,本申请提供一种分布式数据库,该分布式数据库包括协调节点和多个数据节点,该协调节点可以是第十五方面或者第十五方面的任一种可能设计提供的协调节点,该数据节点可以是第十五方面或者第十五方面的任一种可能设计提供的数据节点。
第十九方面,本申请提供一种计算设备,该计算设备包括处理器和存储器。该存储器存储计算机指令;该处理器执行该存储器存储的计算机指令,使得该计算设备执行上述第十五方面或者第十五方面的各种可能设计提供的方法中由协调节点执行的步骤,或者使得该计算设备执行上述第十五方面或者第十五方面的各种可能设计提供的方法中由数据节点执行的步骤,或者使得该计算设备部署第十六方面提供的协调节点,或者使得该计算设备部署第十七方面提供的数据节点。
第二十方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当计算设备的处理器执行该计算机指令时,该计算设备执行上述第十五方面或者第十五方面的各种可能设计提供的方法中由协调节点执行的步骤,或者该计算设备执行上述第十五方面或者第十五方面的各种可能设计提供的方法中由数据节点执行的步骤,或者该计算设备部署第十六方面提供的协调节点,或者该计算设备部署第十七方面提供的数据节点。
第十四方面,本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算设备执行上述第十五方面或者第十五方面的各种可能设计提供的方法中由协调节点执行的步骤,或者使得该计算设备执行上述第十五方面或者第十五方面的各种可能设计提供的方法中由数据节点执行的步骤,或者使得该计算设备部署第十六方面提供的协调节点,或者使得该计算设备部署第十七方面提供的数据节点。
附图说明
图1为本申请提供的分布式数据库的一种示意图;
图2为本申请提供的查询数据的方法的一种流程示意图;
图3为本申请提供的查询数据的方法在具有NULL值的场景适用的一种流程示意图;
图4为本申请提供的在迁移目标元组前的子内表的一种示意图;
图5为本申请提供的在迁移目标元组后的子内表的一种示意图;
图6为本申请提供的数据节点600的一种逻辑结构示意图;
图7为本申请提供的数据节点700的一种逻辑结构示意图;
图8为本申请提供的计算设备800的一种结构示意图。
具体实施方式
下面将结合本申请中的附图,对本申请提供的技术方案进行描述。
本申请中,NULL值也称为空值。
本申请中,以SQL语句代表分布式数据库的查询语句进行方案说明。
本申请中,SQL语句支持NOT IN这种语法的表达式。NOT IN表达式也被称为not in表达式,即NOT IN也被称为not in。
NOT IN表达式的语法:A NOT IN B。
NOT IN表达式所表达的意思是:在比较A与B时,如果A不在B中,或者A不等于B,则满足条件。举例说明,A或B,可以为常数,或者可以为元组,或者可以是函数,或者可以为表中的一个或多个列。
以比较元组举例说明,元组(1,2)NOT IN元组(1,3)满足条件,因为2不等于3。
元组(1,NULL)NOT IN元组(1,2)不满足条件,因为2和NULL值无法比较,即并不能说明两个元组不相同。
元组(1,NULL)NOT IN元组(2,2)满足条件,因为1不等于2,虽然NULL值与2无法比较。
元组(1,NULL)NOT IN元组(NULL,2)不满足条件,因为1与NULL值无法比较,NULL值与2无法比较。
以比较表中的列举例说明,SQL语句为“select*from t1where(t1.a,t1.b)not in(select t2.b,t2.c from t2)”,其中,“(t1.a,t1.b)not in(select t2.b,t2.c fromt2)”表示在表t1中的a列和b列与t2表中的c列和d列比较时,从表t1中筛选出比较结果为不相同的元组。该表t1可以称为待查询的外表,表t2可以称为用于与外表t1比较的内表。
以比较表中的列举例说明,SQL语句为“select*from t1,t2where coalesce(t1.a,t2.a,2)not in(select t3.c from t3)”,其中,“coalesce(t1.a,t2.a,2)not in(select t3.c from t3)”表示将计算coalesce(t1.a,t2.a,2)所得的每个值分布与列t3.c中的每个值比较,从表t1和t2中筛选出比较结果为不相同的元组。该表t1和表t2可以称为待查询的外表,表t3可以称为内表。
本申请中,该NOT IN表达式可以用于比较两张表中的指定列,SQL语句中左边参与NOT IN表达式计算的表为外表,右边参与NOT IN表达式计算的表为内表,例如上面基于SQL语句“select*from t1where(t1.a,t1.b)not in(select t2.b,t2.c from t2)”的举例说明,再例如上面基于SQL语句“select*from t1,t2where coalesce(t1.a,t2.a,2)not in(select t3.c from t3)”的举例说明。该外表,用于选出满足SQL语句的元组,具体是选出满足SQL语句中的NOT IN表达式的元组。该内表,用于与外表共同参与NOT IN表达式的计算,以从该外表中识别出满足NOT IN表达式的元组。
另外,在本申请中,外表被划分为多个子外表,该多个子外表分布在分布式数据库的多个数据节点中。一种可能实现方式,在初始状态时,每个子外表是个空表,没有存储元组;后续,该分布式数据库的协调节点会通过一定的算法(例如hash算法)将外表所包含的多个元组分配给该多个子外表,使得每个子外表中保存有一个或多个元组。类似的,内表被划分为多个子内表,该多个子内表分布在该分布式数据库的多个数据节点中。一种可能实现方式,在初始状态时,每个子内表是个空表,没有存储元组;后续,该分布式数据库的协调节点会通过同样的算法将内表所包含的多个元组分配给该多个子内表,使得每个子内表中保存有一个或多个元组。
图1示意了分布式数据库的一种架构的举例。
如图1所示,分布式数据库包括至少一个协调节点(coordinator node,CN),例如协调节点111和协调节点112。分布式数据库包括多个数据节点(data node,DN),例如数据节点121、数据节点122和数据节点123。协调节点可以被部署在计算设备上。数据节点可以被部署在计算设备上。多个协调节点可以分别部署在不同计算设备,或者可以部署在同一计算设备。多个数据节点可以分别部署在不同计算设备。协调节点与数据节点可以分别部署在不同计算设备,或者可以部署在同一计算设备。
分布式数据库的协调节点,负责将外表或者内表的元组存储到数据节点,以及指示数据节点进行元组的查询。举例说明,协调节点111在存储内表时负责将内表中的所有元组分布到多个数据节点的子内表上;再例如,协调节点111在存储外表时负责将外表中的所有元组分布到多个数据节点的子外表上。举例说明,在使用SQL语句从表查询数据时协调节点111负责指示多个数据节点分别从子表上查询满足该SQL语句的元组,并从每个数据节点收集满足该SQL语句的元组以作为查询结果。
相应地,分布式数据库的数据节点,负责将协调节点下发的内表的元组存储到本地的子内表中,协调节点下发的外表的元组存储到本地的子外表中。另外,该数据节点还负责执行该SQL语句对应的执行计划来从子外表中查找出满足该SQL语句的元组,并将查找出的元组向协调节点反馈。
基于图1,举例简述下在分布式数据库中查询数据的实现逻辑。协调节点111接收SQL语句,协调节点111可以基于SQL语句生成执行计划或获取该SQL语句对应的执行计划,协调节点111将该执行计划发送至每个数据节点(例如数据节点121、数据节点122和数据节点123),每个数据节点(例如数据节点121、数据节点122和数据节点123)分别处理执行计划,并将处理所得的元组反馈至协调节点111,协调节点111收集所有数据节点(例如数据节点121、数据节点122和数据节点123)反馈的元组,将收集的元组作为该SQL语句的查询结果。协调节点111将该SQL语句的查询结果反馈至发送SQL语句的应用或者呈现给用户。可替代地,协调节点将接收的SQL语句向每个数据节点转发,每个数据节点替代协调节点111来基于SQL语句生成执行计划或获取该SQL语句对应的执行计划,这样协调节点111就不用基于SQL语句得到执行计划和向数据节点发送执行计划。
下面结合图2具体说明本发明提供的查询数据的方法。图2所示方法中的协调节点111仅作为本申请的协调节点的举例,例如协调节点111也可以替换为协调节点112。图2所示方法中的数据节点121和数据节点122代表本申请的所有数据节点,本申请的数据节点的数量可以是至少两个。
步骤S21,协调节点111接收包括NOT IN表达式的SQL语句。
例如,协调节点111接收用户录入的SQL语句。例如,协调节点111接收应用或中间件发送的SQL语句。
步骤S22,协调节点111确定SQL语句对应的执行计划。
举例说明,如果协调节点111缓存有SQL语句与执行计划的对应关系,则协调节点111在接收到新的相同SQL语句时,直接获取缓存的该SQL语句对应的执行计划。
举例说明,在协调节点111接收到SQL语句时,解析该SQL语句的操作,基于解析出的操作生成执行计划。
在本申请中,如果SQL语句包含NOT IN表达式,该SQL语句对应的执行计划包括该NOT IN表达式对应的比较操作。另外,该SQL语句对应的执行计划还指定了该比较操作对应的内表的数据列,该数据列也是NOT IN表达式指定的内表的数据列。举例说明,SQL语句为“select*from t1where(t1.a,t1.b)not in(select t2.b,t2.c from t2)”,可见,外表为t1,内表为t2;在该SQL语句对应的执行计划中,会指定将外表t1的两个数据列(t1.a和t1.b)与内表t2的两个数据列(t2.b和t2.c)进行比较。
步骤S23,协调节点111将执行计划发送至每个数据节点(例如数据节点121和数据节点122)。
执行计划用于指示数据节点将本数据节点的子外表中的指定列与本数据节点的子内表中的指定列做比较、并从该子外表中选择比较结果为不同的元组。其中,指定列为SQL语句中的NOT IN表达式指定的待比较的列;具体地,子外表的指定列为在子外表中SQL语句中的NOT IN表达式指定的待比较的列,子内表的指定列为在子内表中SQL语句中的NOTIN表达式指定的待比较的列。
每个数据节点(例如数据节点121和数据节点122)存储子外表,所有数据节点存储的所有子外表可以是基于哈希(hash)算法划分外表得到的。举例说明,在协调节点111存储外表的元组时,基于该hash算法获得该元组的hash值并基于该hash值确定存储该元组的数据节点,即将该元组存储到该数据节点的子外表中。这样,外表的元组,是基于hash算法分散存储到所有数据节点的子外表中;不同子外表对应不同hash值。
另外,每个数据节点(例如数据节点121和数据节点122)存储子内表,所有数据节点存储的所有子内表可以是基于hash算法划分内表得到的。举例说明,在协调节点111存储内表的元组时,基于该hash算法获得该元组的hash值并基于该hash值确定存储该元组的数据节点,即将该元组存储到该数据节点的子内表中。这样,内表的元组,是基于hash算法分散存储到所有数据节点的子内表中;不同子内表对应不同hash值。
可选地,每个协调节点(例如协调节点111)基于相同的hash算法确定子外表和子内表,hash值相同的子外表和子内表存储在同一数据节点上。这样,同一数据节点上,将子外表中不包括NULL值的元组与子内表中不包括NULL值的元组进行比较时,才有可能匹配相同的元组。不同数据节点上,将一个数据节点的子外表中不包括NULL值的元组与另一个数据节点的子内表中不包括NULL值的元组进行比较时,不会匹配到相同的元组。这样,只需要在同一数据节点上进行非NULL值的元组匹配,就可以筛除子外表中比较结果为相同的元组,以便进一步筛选出满足NOT IN的元组(即子外表中比较结果为不相同的元组)。
作为步骤S22和步骤S23的一种替代实现方式,协调节点111将接收的SQL语句向每个数据节点(例如数据节点121和数据节点122)转发,每个数据节点替代协调节点111来基于SQL语句生成执行计划或获取该SQL语句对应的执行计划。
步骤S24,每个数据节点(例如数据节点121或数据节点122)处理执行计划。
以数据节点121代表每个数据节点举例,与包含NOT IN表达式的SQL语句对应的执行计划被发送至数据节点121后,数据节点121处理执行计划。其中,数据节点121会执行该执行计划中该NOT IN表达式对应的比较操作。例如,数据节点121将数据节点121的子外表中的指定列与数据节点121的子内表中的指定列做比较,根据比较结果筛选出该子外表中的元组,筛选的元组在该子外表中的指定列的值不同于在该子内表中的指定列的值。
举例说明,参见图4,数据节点121存储有外表t1的子外表t11。在SQL语句为“select*from t1where(t1.a,t1.b)not in(select t2.b,t2.c from t2)”时,执行计划为将外表t1的两个数据列(t1.a和t1.b)与内表t2的两个数据列(t2.b和t2.c)进行比较、并从外表t1中选择比较结果为不同的元组。数据节点121处理执行计划的一种具体实现方式是将子外表t11的两个数据列(t11.a和t11.b)与子内表t21的两个数据列(t21.b和t21.c)进行比较、并从子外表t11中选择比较结果为不同的元组;例如,子外表t11中的第一行的两列(a,b)的列值为(1,3),子内表t21中第一行的两列(b,c)的列值为(1,3)和子内表t21中第二行的两列(b,c)的列值为(4,NULL),在将子外表t11的列值(1,3)与子内表t21的列值(1,3)和/或列值(4,NULL)比较,由于子外表t11的列值(1,3)与子内表t21的列值(1,3)相同,因此不选择子外表t11的元组(1,3,6);类似地,将子外表t11的第二行的列值(2,4)与子内表t21的列值(1,3)和列值(4,NULL)分别比较,由于子外表t11的第二行的列值(2,4)与子内表t21的列值(1,3)和列值(4,NULL)均不相同,因此元组(2,4,7)为满足SQL语句的一个元组。如果没有如图5复制数据节点122的元组(18,NULL,13)到子内表t21中,在如图4的场景中,将子外表t11的第三行的列值(3,NULL)与子内表t21的列值(1,3)和列值(4,NULL)分别比较,由于子外表t11的第三行的列值(3,NULL)与子内表t21的列值(1,3)和列值(4,NULL)均不相同,因此元组(3,NULL,8)为满足SQL语句的一个元组。
本申请针对数据节点的子内表中待比较的指定列具有NULL值的场景,提供了一种新的处理方法,该处理方法包括步骤S241、步骤S242和步骤S243。
步骤S241,每个数据节点(例如数据节点121或数据节点122)将自己存储的目标元组发送至其它所有数据节点。
该目标元组为属于该子内表的元组。该目标元组在子内表中的待比较的一个或多个指定列为NULL值,即该目标元组在子内表中NOT IN表达式指定的一个或多个列为NULL值。
一种可能实现方式,每个数据节点从自己存储的子内表中筛选出目标元组,并将筛选出的目标元组发送至其它所有数据节点。举例说明,在数据节点121中,子内表t21中的元组(8,4,NULL)在待比较的列c为NULL值,因此数据节点121从子内表t21中筛选出该元组(8,4,NULL)来作为一个目标元组。
步骤S242,每个数据节点(例如数据节点121或数据节点122)接收其它所有数据节点发送的目标元组。
每个数据节点接收其它数据节点的目标元组后,将接收的目标元组存储在自己的子外表中。
以图3、图4和图5中的数据节点121为例,数据节点121在处理执行计划(即与包含NOT IN表达式的SQL语句对应的执行计划)时,由于子内表t21中的元组(8,4,NULL)在待比较的列c中为NULL值,数据节点121将子内表t21中的元组(8,4,NULL)发送至分布式数据库中的其它所有数据节点,例如数据节点122。相应地,其它所有数据节点接收数据节点121发送的元组(8,4,NULL)并存储在内表t2的子内表中,例如,如图5所示,数据节点122接收元组(8,4,NULL)并存储在子内表t22中。
以图3、图4和图5中的数据节点121为例,数据节点121在处理执行计划时,数据节点121接收其它所有数据节点发送的目标元组,并将接收的所有目标元组存储在子内表t21。例如,数据节点121接收数据节点122发送的元组(18,NULL,13),并将元组(18,NULL,13)存储在子内表t21中。
步骤S243,每个数据节点(例如数据节点121或数据节点122)基于从其它所有数据节点接收到的目标元组处理执行计划。
以图3和图5中的数据节点121为例,数据节点121在处理执行计划(即与包含NOTIN表达式的SQL语句对应的执行计划)时,将外表t11的列值(2,4)和列值(3,NULL)分别与子内表t21的元组(18,NULL,13)中的列值(NULL,13)比较。由于列值(3,NULL)与列值(NULL,13)没法比较,因此不满足NOT IN表达式,元组(3,NULL,8)为不满足SQL语句的一个元组。由于外表t11的列值(2,4)与列值(NULL,13)不相同,例如4不等于13,因此元组(2,4,7)为数据节点121中满足SQL语句的一个元组。
类似地,以图3和图5中的数据节点122为例,数据节点122在处理执行计划(即与包含NOT IN表达式的SQL语句对应的执行计划)时,将外表t12的列值(12,16)和列值(NULL,15)分别与子内表t22的列值(15,14)、列值(NULL,13)和列值(4,NULL)比较。列值(12,16)与列值(15,14)、列值(NULL,13)和列值(4,NULL)均不同,因此子外表t12的元组(12,16,16)为数据节点122中满足SQL语句的一个元组。列值(NULL,15)和列值(4,NULL)无法比较,因此子外表t12的元组(NULL,15,17)不为数据节点122中满足SQL语句的一个元组。
步骤S25,协调节点111接收所有数据节点发送的满足SQL语句的元组。
以图5为例,数据节点121将元组(2,4,7)作为满足SQL语句的一个元组发送给协调节点111,协调节点111接收数据节点121发送的元组(2,4,7)。数据节点122将元组(12,16,16)作为满足SQL语句的一个元组发送给协调节点111,协调节点111接收数据节点122发送的元组(12,16,16)。
这样,协调节点111可以收集所有数据节点反馈的满足SQL语句的元组,将收集的所有元组作为该SQL语句的查询结果。例如,协调节点111将从数据节点121接收的元组(2,4,7)和从数据节点122接收的元组(12,16,16)都作为满足SQL语句的查询结果。
协调节点111可以向应用或中间件反馈该查询结果,或者可以向用户呈现该查询结果。
在本申请中,如图5所示,在处理包含NOT IN表达式的SQL语句时,仅在所有数据节点之间复制目标元组,不需要复制所有数据节点的子外表中除了目标元组以外的其它元组,相对于现有技术需要在所有数据节点之间复制所有数据节点的子外表,减少了复制所占用的带宽,也提高了所有数据节点反馈满足SQL语句的元组的时间,提高了查询效率。
在本申请提供的其它示例中,数据节点在处理执行计划时,并不需要接收该分布式数据库中其他所有数据节点发送的目标元组,只要有至少一个数据节点将其筛选出的目标元组发送给处理执行计划的数据节点即可;剩余的数据节点可以筛选目标元组后发送给该处理执行计划的数据节点,也可以不经过筛选直接将子内表中所有元组发送给该处理执行计划的数据节点;该数据节点再基于接收的目标元组,从本地存储的子外表中选择满足NOT IN表达式的元组。通过这种方式,至少可以在一定程度上减少元组的发送量,从而减少复制所占用的带宽。
下面以数据节点121和数据节点122为例,从两两数据节点交互的角度说明下如何处理执行计划(与包含NOT IN表达式的SQL语句对应)。数据节点121和数据节点122分别获取该SQL语句对应的执行计划。数据节点122基于自己获取的执行计划,从数据节点122的子内表所包含的多个元组中筛选出一个或多个目标元组。数据节点122将数据节点122的目标元组发送给数据节点121。这样,数据节点121可以根据数据节点121的子外表中的元组和数据节点122的目标元组处理该执行计划,以从数据节点121的子外表获得满足该NOT IN表达式的元组。这样,在数据节点121处理包含NOT IN表达式的SQL语句时,数据节点122仅需要将自己的目标元组发送至数据节点121,不需要复制数据节点122的子外表中除了目标元组以外的其它元组,相对于现有技术需要将数据节点122的子外表中的所有元组复制到数据节点121,减少了复制所占用的带宽,也减少了数据节点121反馈满足SQL语句的元组的时间,提高了查询效率。
在还有数据节点123参与的场景下,数据节点123从数据节点123的子内表所包含的多个元组中筛选出一个或多个目标元组,数据节点123向数据节点121发送数据节点123的目标元组。相应地,数据节点121根据数据节点121的子外表中的元组和数据节点122的目标元组以及数据节点123的目标元组处理该执行计划,以从数据节点121的子外表获得满足该NOT IN表达式的元组。这样,在数据节点121处理包含NOT IN表达式的SQL语句时,仅需要将数据节点123的目标元组复制到数据节点121,不需要复制数据节点123的子外表中除了目标元组以外的其它元组,相对于现有技术需要将数据节点123的子外表中的所有元组复制到数据节点121,减少了复制所占用的带宽,也减少了数据节点121反馈满足SQL语句的元组的时间,提高了查询效率。
本申请新增一种可选的实现方式,所有数据节点之间复制所有数据节点的目标元组之后,对于分布式数据库的外表和内表,协调节点可以按照新的hash算法将在分布式数据库的所有数据节点中重新分布该外表的元组和该内表的元组,即协调节点可以按照新的hash算法重新调整外表与内表在所有数据节点上的子外表和子内表。
以图5为例,按照旧的hash算法,数据节点121存储列a的值为1到9之间的元组,即数据节点121在子外表t11中存储外表t1中列a的值为1到9之间的元组,数据节点121在子内表t21中存储内表t2中列a的值为1到9之间的元组;数据节点122存储列a的值为10到19之间的元组,即数据节点122在子外表t12中存储外表t1中列a的值为10到19之间的元组,数据节点122在子内表t22中存储内表t2中列a的值为10到19之间的元组;数据节点123存储列a的值为20到29之间的元组,即数据节点123在子外表中存储外表t1中列a的值为20到29之间的元组,数据节点123在子内表中存储内表t2中列a的值为30到39之间的元组;以此类推,其它数据节点在各自的子外表和子内表中存储列a的值为其他范围内的元组。协调节点111按照新的hash算法在数据节点121、数据节点122和数据节点123等数据节点之间迁移元组,从而数据节点121存储列a的值为1到15之间的元组,即数据节点121在子外表t11中存储外表t1中列a的值为1到15之间的元组,数据节点121在子内表t21中存储内表t2中列a的值为1到15之间的元组;数据节点122存储列a的值为16到29之间的元组,即数据节点122在子外表t12中存储外表t1中列a的值为16到29之间的元组,数据节点122在子内表t22中存储内表t2中列a的值为16到29之间的元组;数据节点123存储列a的值为30到45之间的元组,即数据节点123在子外表中存储外表t1中列a的值为30到45之间的元组,数据节点123在子内表中存储内表t2中列a的值为30到45之间的元组;以此类推,其它数据节点在各自的子外表和子内表存储列a的值为其他范围内的元组。
应知,图5仅提供了基于单列(例如列a)的hash值为例进行元组的重分布,可替代地,还可以基于多列(例如列a和列b)的hash值进行元组的重分布。
可选地,所有数据节点之间复制所有数据节点的目标元组之后,协调节点不用按照新的hash算法重新调整外表与内表在所有数据节点上的子外表和子内表。
本申请还提供一种协调节点(例如协调节点111),该数据节点可以部署在本申请的计算设备(例如服务器)上。该协调节点(例如协调节点111)包括用于实现上述查询数据的方法的功能单元;本申请对在该协调节点中如何划分功能单元不做限定。
本申请还提供一种数据节点(例如数据节点121或者数据节点122),该数据节点可以部署在本申请的计算设备(例如服务器)上。该数据节点包括用于实现上述查询数据的方法的功能单元;本申请对在该数据节点中如何划分功能单元不做限定。
下面实例性地提供数据节点的一种功能单元的划分,如图6所示。
如图6所示的数据节点600,数据节点600为分布式数据库包括的多个数据节点中的一个数据节点。在某些应用场景中,数据节点600是用于处理执行计划的数据节点(例如数据节点121),此时如图6,该数据节点600包括:
获取单元601,用于获取查询语句对应的执行计划,该查询语句包含NOT IN表达式;
接收单元602,用于接收该分布式数据库的其它数据节点的目标元组,该目标元组在该NOT IN表达式指定的一个或多个列为NULL值;
执行单元603,用于根据本地的子外表中的元组和该其它数据节点的目标元组处理该执行计划,以从本地的该子外表获得满足该NOT IN表达式的元组。
可选地,执行单元603,具体用于根据本地的子外表中的元组、本地的子外表中的元组和该其它数据节点的目标元组处理该执行计划,以从本地的该子外表获得满足该NOTIN表达式的元组。可选地,如图6,该数据节点600还包括:
发送单元604,用于将满足该NOT IN表达式的元组向分布式数据库的协调节点(例如协调节点111)发送。
此外,数据节点600在某些应用场景中,也可以用于发送目标元组的数据节点,例如数据节点122。因此,可选地,该数据节点600还包括:
筛选单元605,用于基于数据节点600获取的该执行计划,从数据节点600的子内表中筛选出数据节点600的目标元组;
发送单元604,用于向该其它数据节点发送数据节点600的目标元组。
下面实例性地提供数据节点的一种功能单元的划分,如图7所示。
如图7所示的数据节点700,该数据节点700为分布式数据库包括的多个数据节点中的一个数据节点,例如数据节点121。该分布式数据库包括协调节点(例如协调节点111)和该多个数据节点(例如数据节点121、数据节点122、数据节点123);该多个数据节点分别存储不同的子外表和不同的子内表;该多个数据节点中的一个或多个目标数据节点所存储的子内表具有目标元组,该目标元组在NOT IN表达式指定的一个或多个列为NULL值。
在某些应用场景中,数据节点700是用于处理执行计划的数据节点(例如数据节点121),此时如图7,数据节点700包括:
获取单元701,用于获取查询语句对应的执行计划,该查询语句包含NOT IN表达式;
接收单元702,用于接收该多个数据节点中除了数据节点700以外的所有目标数据节点分别发送的目标元组;
执行单元703,用于基于数据节点700的子外表、数据节点700的子内表和接收的目标元组处理该执行计划来从数据节点700的子外表中选出满足该查询语句中的NOT IN表达式的元组,并将选出的元组向该协调节点发送。
可选地,数据节点700为该分布式数据库包含的多个数据节点中的任意一个数据节点。
此外,数据节点700在某些应用场景中,也可以用于发送目标元组的数据节点,例如数据节点122。因此,,该数据节点700包括:
筛选单元705,用于在数据节点700为该多个数据节点中的一个目标数据节点时,基于该执行计划从数据节点700的子内表中筛选出数据节点700的目标元组;
发送单元704,用于向该多个数据节点中除了数据节点700以外的其它数据节点发送数据节点700的目标元组。
可选地,图8示意性地提供本申请的计算设备的一种可能的基本硬件架构。
参见图8,计算设备800包括处理器801、存储器802、通信接口803和总线804。
计算设备800中,处理器801的数量可以是一个或多个,图8仅示意了其中一个处理器801。可选地,处理器801,可以是中央处理器(central processing unit,CPU)。如果计算设备800具有多个处理器801,多个处理器801的类型可以不同,或者可以相同。可选地,计算设备800的多个处理器801还可以集成为多核处理器。
存储器802存储计算机指令和数据;存储器802可以存储实现本申请提供的查询数据的方法所需的计算机指令和数据,例如,存储器802存储用于实现在查询数据的方法中由协调节点执行步骤的计算机指令,再例如,存储器802存储用于实现在查询数据的方法中由数据节点执行步骤的计算机指令,再例如,存储器802存储用于实现协调节点或者数据节点的计算机指令。存储器802可以是以下存储介质的任一种或任一种组合:非易失性存储器(例如只读存储器(ROM)、固态硬盘(SSD)、硬盘(HDD)、光盘),易失性存储器。
通信接口803可以是以下器件的任一种或任一种组合:网络接口(例如以太网接口)、无线网卡等具有网络接入功能的器件。
通信接口803用于计算设备800与其它计算设备或者终端进行数据通信。
图8用一条粗线表示总线804。总线804可以将处理器801与存储器802和通信接口803连接。这样,通过总线804,处理器801可以访问存储器802,还可以利用通信接口803与其它计算设备或者终端进行数据交互。
在本申请中,计算设备800执行存储器802中的计算机指令,使得计算设备800实现本申请提供的查询数据的方法,例如使得该计算设备800执行上述查询数据的方法中由协调节点执行的步骤,再例如使得该计算设备执行上述查询数据的方法中由数据节点执行的步骤。或者,计算设备800执行存储器802中的计算机指令,使得该计算设备800实现本申请的协调节点(例如协调节点111)或者实现本申请的数据节点(例如数据节点121)。
举例说明,在图2所示方法中,计算设备800可以被配置成协调节点111,从而在计算设备800执行存储器802中协调节点111相关的计算机指令时,计算设备800执行步骤S21、步骤S22、步骤S23和步骤S25。或者,计算设备800可以被配置成数据节点121或者数据节点122,从而在计算设备800执行存储器802中相关的计算机指令或者数据节点122相关的计算机指令时,计算设备800执行步骤S24。
举例说明,在图3所示方法中,计算设备800可以被配置成数据节点121,从而在计算设备800执行存储器802中数据节点121相关的计算机指令时,计算设备800执行步骤S241、步骤S242和步骤S243。或者,计算设备800可以被配置成数据节点122,从而在计算设备800执行存储器802中数据节点122相关的计算机指令时,计算设备800接收目标元组(4,NULL,8)和基于目标元组(4,NULL,8)处理执行计划,计算设备800从子外表t22中筛选出目标元组(NULL,13,18)并将筛选的目标元组(NULL,13,18)向数据节点121发送。
本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当计算设备800的处理器801执行该计算机指令时,该计算设备800执行上述查询数据的方法中由协调节点执行的步骤,或者计算设备800执行上述查询数据的方法中由数据节点执行的步骤,或者计算设备800实现本申请的协调节点(例如协调节点111)的功能或者实现本申请的数据节点(例如数据节点121)的功能。
本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算设备800的处理器801可以从计算机可读存储介质读取该计算机指令,处理器801执行该计算机指令,使得计算设备800执行上述查询数据的方法中由协调节点执行的步骤,或者使得该计算设备执行上述查询数据的方法中由数据节点执行的步骤,或者使得计算设备800实现本申请的协调节点(例如协调节点111)的功能或者实现本申请的数据节点(例如数据节点121)的功能。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改;而这些修改,并不使相应技术方案脱离权利要求的保护范围。
Claims (11)
1.一种查询数据的方法,其特征在于,所述方法应用于分布式数据库中,所述分布式数据库至少包括第一数据节点和第二数据节点;所述方法包括:
所述第一数据节点和所述第二数据节点分别获取查询语句对应的执行计划,所述查询语句包含NOT IN表达式;
基于所述执行计划,所述第二数据节点从本地的子内表所包含的多个元组中筛选出一个或多个目标元组,所述目标元组在所述NOT IN表达式指定的一个或多个列为NULL值;
所述第二数据节点将所述第二数据节点的目标元组发送给所述第一数据节点;
所述第一数据节点根据所述第一数据节点的子外表中的元组、所述第一数据节点的子内表和所述第二数据节点的目标元组处理所述执行计划,以从所述第一数据节点的子外表获得满足所述NOT IN表达式的元组。
2.根据权利要求1所述的方法,其特征在于,所述分布式数据库还包括其它数据节点;
所述方法还包括:所述其它数据节点从本地的子内表所包含的多个元组中筛选出一个或多个目标元组,所述其它数据节点向所述第一数据节点发送所述其它数据节点的目标元组;
所述第一数据节点根据所述第一数据节点的子外表中的元组、所述第一数据节点的子内表和所述第二数据节点的目标元组处理所述执行计划以从所述第一数据节点的子外表获得满足所述NOT IN表达式的元组,包括:所述第一数据节点根据所述第一数据节点的子外表中的元组、所述第一数据节点的子内表和所述第二数据节点的目标元组以及所述其它数据节点的目标元组处理所述执行计划,以从所述第一数据节点的子外表获得满足所述NOT IN表达式的元组。
3.根据权利要求2所述的方法,其特征在于,所述第一数据节点根据所述第一数据节点的子外表中的元组、所述第一数据节点的子内表和所述第二数据节点的目标元组以及所述其它数据节点的目标元组处理所述执行计划以从所述第一数据节点的子外表获得满足所述NOT IN表达式的元组,包括:
所述第一数据节点根据所述第一数据节点的子外表中的元组、所述第一数据节点的子内表中的元组、所述第二数据节点的目标元组和所述其它数据节点的目标元组处理所述执行计划,以从所述第一数据节点的子外表获得满足所述NOT IN表达式的元组。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述分布式数据库还包括协调节点;所述方法还包括:
所述第一数据节点向所述协调节点发送满足所述NOT IN表达式的元组。
5.根据权利要求1所述的方法,其特征在于,所述分布式数据库包含外表和内表,所述外表包括多个子外表,所述内表包括多个子内表;所述多个子外表分别位于所述分布式数据库的不同数据节点上,所述多个子内表分别位于所述分布式数据库的不同数据节点上;所述方法还包括:
所述分布式数据库的协调节点按照哈希算法将所述外表的元组分布到所述多个子外表;
所述分布式数据库的协调节点按照所述哈希算法将所述内表的元组分布到所述多个子内表。
6.一种分布式数据库,其特征在于,所述分布式数据库至少包括第一数据节点和第二数据节点;
所述第二数据节点,用于获取查询语句对应的执行计划,基于所述执行计划从所述第二数据节点的子内表所包含的多个元组中筛选出一个或多个目标元组,将筛选的目标元组发送给所述第一数据节点,所述查询语句包含NOT IN表达式,所述目标元组在所述NOT IN表达式指定的一个或多个列为NULL值;
所述第一数据节点,用于获取所述查询语句对应的执行计划,根据所述第一数据节点的子外表中的元组、所述第一数据节点的子内表和从所述第二数据节点接收的目标元组处理所述执行计划,以从所述第一数据节点的子外表获得满足所述NOT IN表达式的元组。
7.根据权利要求6所述的分布式数据库,其特征在于,所述分布式数据库还包括其它数据节点;
所述其它数据节点,用于从本地的子内表所包含的多个元组中筛选出一个或多个目标元组,向所述第一数据节点发送所述其它数据节点的目标元组;
所述第一数据节点,用于根据所述第一数据节点的子外表中的元组、所述第一数据节点的子内表和所述第二数据节点的目标元组以及所述其它数据节点的目标元组处理所述执行计划,以从所述第一数据节点的子外表获得满足所述NOT IN表达式的元组。
8.根据权利要求7所述的分布式数据库,其特征在于,
所述第一数据节点,用于根据所述第一数据节点的子外表中的元组、所述第一数据节点的子内表中的元组、所述第二数据节点的目标元组和所述其它数据节点的目标元组处理所述执行计划,以从所述第一数据节点的子外表获得满足所述NOT IN表达式的元组。
9.根据权利要求6至8任一项所述的分布式数据库,其特征在于,所述分布式数据库还包括协调节点;
所述第一数据节点,用于向所述协调节点发送满足所述NOT IN表达式的元组;
所述协调节点,用于从所述第一数据节点接收满足所述NOT IN表达式的元组。
10.根据权利要求6所述的分布式数据库,其特征在于,所述分布式数据库还包括协调节点;所述分布式数据库包含外表和内表,所述外表包括多个子外表,所述内表包括多个子内表;所述多个子外表分别位于所述分布式数据库的不同数据节点上,所述多个子内表分别位于所述分布式数据库的不同数据节点上;
所述协调节点,用于按照哈希算法将所述外表的元组分布到所述多个子外表,按照所述哈希算法将所述内表的元组分布到所述多个子内表。
11.一种计算设备,其特征在于,所述计算设备包括处理器和存储器;所述存储器存储计算机指令;所述处理器执行所述存储器存储的计算机指令,使得所述计算设备用于实现权利要求6至8任一项所述的数据节点或者权利要求10所述的协调节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/096007 WO2021098198A1 (zh) | 2019-11-19 | 2020-06-14 | 查询数据的方法、数据节点、分布式数据库、计算设备 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2019111338014 | 2019-11-19 | ||
CN201911133801 | 2019-11-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111209305A CN111209305A (zh) | 2020-05-29 |
CN111209305B true CN111209305B (zh) | 2023-07-18 |
Family
ID=70787449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911423288.2A Active CN111209305B (zh) | 2019-11-19 | 2019-12-31 | 查询数据的方法、数据节点、分布式数据库、计算设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111209305B (zh) |
WO (1) | WO2021098198A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111209305B (zh) * | 2019-11-19 | 2023-07-18 | 华为云计算技术有限公司 | 查询数据的方法、数据节点、分布式数据库、计算设备 |
CN117557993B (zh) * | 2024-01-12 | 2024-03-29 | 杭州像素元科技有限公司 | 一种双框架交互感知3d关联检测模型的构建方法及应用 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004171067A (ja) * | 2002-11-15 | 2004-06-17 | Sharp Corp | データ管理方法およびデータ管理装置、データ管理プログラムならびにこれを記録した記録媒体 |
WO2018225314A1 (ja) * | 2017-06-05 | 2018-12-13 | 株式会社東芝 | データベース管理システムおよびデータベース管理方法 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001093105A2 (en) * | 2000-05-26 | 2001-12-06 | Computer Associates Think, Inc. | System and method for automatically generating database queries |
US7676450B2 (en) * | 2006-03-15 | 2010-03-09 | Oracle International Corporation | Null aware anti-join |
WO2011123096A1 (en) * | 2010-03-30 | 2011-10-06 | Hewlett-Packard Development Company, L.P. | System and method for outer joins on a parallel database management system |
US8886631B2 (en) * | 2010-06-04 | 2014-11-11 | Yale University | Query execution systems and methods |
US8473483B2 (en) * | 2011-06-07 | 2013-06-25 | Microsoft Corporation | Performing parallel joins on distributed database data |
US10380269B2 (en) * | 2011-06-07 | 2019-08-13 | Entit Software Llc | Sideways information passing |
US9747363B1 (en) * | 2012-03-01 | 2017-08-29 | Attivio, Inc. | Efficient storage and retrieval of sparse arrays of identifier-value pairs |
US10579634B2 (en) * | 2012-08-30 | 2020-03-03 | Citus Data Bilgi Islemleri Ticaret A.S. | Apparatus and method for operating a distributed database with foreign tables |
US9372907B2 (en) * | 2013-11-26 | 2016-06-21 | Sap Se | Table placement in distributed databases |
GB201516727D0 (en) * | 2015-09-22 | 2015-11-04 | Ibm | Distributed merging of data sets |
US11080274B2 (en) * | 2017-01-17 | 2021-08-03 | Futurewei Technologies, Inc. | Best-efforts database functions |
US10437822B2 (en) * | 2017-03-06 | 2019-10-08 | Sap Se | Grouping tables in a distributed database |
CN109241101B (zh) * | 2018-08-31 | 2020-06-30 | 阿里巴巴集团控股有限公司 | 一种数据库查询优化方法、装置、及计算机设备 |
CN110175202B (zh) * | 2019-04-26 | 2021-09-10 | 蚂蚁金服(杭州)网络技术有限公司 | 用于数据库的表的外连接的方法和系统 |
CN111209305B (zh) * | 2019-11-19 | 2023-07-18 | 华为云计算技术有限公司 | 查询数据的方法、数据节点、分布式数据库、计算设备 |
-
2019
- 2019-12-31 CN CN201911423288.2A patent/CN111209305B/zh active Active
-
2020
- 2020-06-14 WO PCT/CN2020/096007 patent/WO2021098198A1/zh active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004171067A (ja) * | 2002-11-15 | 2004-06-17 | Sharp Corp | データ管理方法およびデータ管理装置、データ管理プログラムならびにこれを記録した記録媒体 |
WO2018225314A1 (ja) * | 2017-06-05 | 2018-12-13 | 株式会社東芝 | データベース管理システムおよびデータベース管理方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2021098198A1 (zh) | 2021-05-27 |
CN111209305A (zh) | 2020-05-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11281669B2 (en) | Parallel processing database system | |
US9152669B2 (en) | System and method for distributed SQL join processing in shared-nothing relational database clusters using stationary tables | |
US9934276B2 (en) | Systems and methods for fault tolerant, adaptive execution of arbitrary queries at low latency | |
US7457835B2 (en) | Movement of data in a distributed database system to a storage location closest to a center of activity for the data | |
US8484417B2 (en) | Location updates for a distributed data store | |
US9576026B2 (en) | System and method for distributed SQL join processing in shared-nothing relational database clusters using self directed data streams | |
US9239741B2 (en) | System and method for flexible distributed massively parallel processing (MPP) | |
CN102844754B (zh) | 用于对并行数据库管理系统的外连接的系统和方法 | |
CN111209305B (zh) | 查询数据的方法、数据节点、分布式数据库、计算设备 | |
CN108536808B (zh) | 一种基于Spark计算框架的数据获取方法和装置 | |
WO2021238796A1 (zh) | 下载任务异步处理方法、装置、系统和存储介质 | |
JP2020004339A (ja) | データベース管理装置およびクエリ分割方法 | |
Padiya et al. | DWAHP: workload aware hybrid partitioning and distribution of RDF data | |
CN107562803B (zh) | 数据供应系统及方法、终端 | |
US9747339B2 (en) | Server-based management for querying eventually-consistent database | |
CN110019274B (zh) | 一种数据库系统以及查询数据库的方法和装置 | |
US10860580B2 (en) | Information processing device, method, and medium | |
US20160014198A1 (en) | Information processing apparatus | |
US20240054132A1 (en) | Computer system and query processing method | |
US11727063B2 (en) | Parallel partition-wise insert sub-select | |
WO2014188477A1 (ja) | 計算機システム、記録媒体及びデータ検索方法 | |
CN114328439A (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220222 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Applicant after: Huawei Cloud Computing Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |