CN110019341A - 一种数据查询方法及装置 - Google Patents

一种数据查询方法及装置 Download PDF

Info

Publication number
CN110019341A
CN110019341A CN201711295212.7A CN201711295212A CN110019341A CN 110019341 A CN110019341 A CN 110019341A CN 201711295212 A CN201711295212 A CN 201711295212A CN 110019341 A CN110019341 A CN 110019341A
Authority
CN
China
Prior art keywords
weight coefficient
cost
join
plan tree
cpu
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
Application number
CN201711295212.7A
Other languages
English (en)
Other versions
CN110019341B (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.)
Hangzhou Hikvision Digital Technology Co Ltd
Original Assignee
Hangzhou Hikvision Digital 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 Hangzhou Hikvision Digital Technology Co Ltd filed Critical Hangzhou Hikvision Digital Technology Co Ltd
Priority to CN201711295212.7A priority Critical patent/CN110019341B/zh
Publication of CN110019341A publication Critical patent/CN110019341A/zh
Application granted granted Critical
Publication of CN110019341B publication Critical patent/CN110019341B/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/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Operations Research (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请实施例提供了一种数据查询方法及装置,方法包括:获取查询请求;根据所述查询请求建立至少一个计划树;根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;按照代价最低的计划树查询数据。应用本申请实施例,提高了数据查询效率。

Description

一种数据查询方法及装置
技术领域
本申请涉及数据库技术领域,特别是涉及一种数据查询方法及装置。
背景技术
随着计算机技术的快速发展,电子数据激增。为了便于快速查询数据,基于结构化查询语言(Structured Query Language,SQL)的数据查询系统,如Google Dremel、Cloudera Impala、Berkeley Shark、Apache Drill等应运而生。
目前,利用数据查询系统查询数据时,用户将查询请求输入数据查询系统,数据查询系统基于查询请求可能建立执行计划,根据执行计划查询数据。
在数据查询系统在查询数据时,对执行计划进行代价估计,确定执行计划的最佳的连接顺序,也就是确定出耗时最少的执行计划,进而提高查询效率。但由于执行计划的代价估算不准确,也就无法有效的提高查询效率。
发明内容
本申请实施例的目的在于提供一种数据查询方法及装置,以提高数据查询效率。具体技术方案如下:
一方面,本申请实施例提供了一种数据查询方法,所述方法包括:
获取查询请求;
根据所述查询请求建立至少一个计划树;
根据预设的网络传输权重系数、输入(Input,I)/输出(Output,O)权重系数和中央处理器(Central Processing Unit,CPU)计算权重系数,确定每个计划树的代价;
按照代价最低的计划树查询数据。
在本申请的一个实施例中,所述根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价;
根据得到的每个计划树中每一操作的代价,确定每个计划树的代价。
在本申请的一个实施例中,所述计划树中包括扫描(scan)操作、过滤(filter)操作、投影(project)操作、广播连接(broatcast join)操作、洗牌哈希连接(shuffle hashjoin)操作、排序合并连接(sort merge join)操作和分组(group by)操作中的一种或多种;
所述根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价的步骤,包括:
若计划树中包括scan操作,根据预设的I/O权重系数,计算每个计划树中scan操作的代价;
若计划树中包括filter操作,根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价;
若计划树中包括project操作,根据预设的project操作的CPU计算权重系数,计算每个计划树中project操作的代价;
若计划树中包括broatcast join操作,根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价;
若计划树中包括shuffle hash join操作,根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hashjoin操作的代价;
若计划树中包括sort merge join操作,根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价;
若计划树中包括group by操作,根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
在本申请的一个实施例中,所述根据预设的I/O权重系数,计算每个计划树中scan操作的代价的步骤,包括:
根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价。
在本申请的一个实施例中,所述根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价的步骤,包括:
根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
在本申请的一个实施例中,所述根据预设的project操作的CPU计算权重系数,计算每个计划树中project操作的代价的步骤,包括:
根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据所述查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价。
在本申请的一个实施例中,通过以下方式确定根据所述查询请求从作为project操作对象的表中选择行的概率:
根据预先存储的各个表的列信息,确定根据所述查询请求中每一个条件表达式从作为project操作对象的表中选择行的概率;所述列信息包括每一列去重后的行总数;
根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率。
在本申请的一个实施例中,若表中的列为数据列,所述列信息还包括:最大值和最小值。
在本申请的一个实施例中,所述根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率的步骤,包括:
若所述查询请求中条件表达式间的运算符为且(and),则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据and两侧的条件表达式选择行的概率的乘积;
若所述查询请求中条件表达式间的运算符为或(or),则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据or两侧的条件表达式选择根据的概率的和减去根据or两侧的条件表达式选择行的概率乘积。
在本申请的一个实施例中,所述根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价的步骤,包括:
根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcast join操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcastjoin操作的代价。
在本申请的一个实施例中,所述根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hash join操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的映射任务(map task)的个数,计算每个计划树中shuffle hash join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价;
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
在本申请的一个实施例中,所述根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort mergejoin操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort mergejoin操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价;
根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sortmerge join操作的join关系中右表查询结果的行总数,计算每个计划树中sort mergejoin操作的代价。
在本申请的一个实施例中,所述根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为group by操作对象的表的maptask的个数,计算每个计划树中group by操作中进行shuffle和排序的代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及合并器(reducer)的个数,计算得到每个计划树中group by操作的代价。
在本申请的一个实施例中,所述根据得到的每个计划树中每一操作的代价,确定每个计划树的代价的步骤,包括:
对于每一计划树,若该计划树包括多个阶段,计算每一阶段包括操作的代价的和,获得该计划树每一阶段的代价;
过滤掉每个计划树中可并行执行的阶段的代价中非最大的代价;
对于每个计划树,统计剩余阶段的代价的和,获得该计划树的代价。
二方面,本申请实施例提供了一种数据查询装置,所述装置包括:
获取单元,用于获取查询请求;
建立单元,用于根据所述查询请求建立至少一个计划树;
第一确定单元,用于根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;
查询单元,用于按照代价最低的计划树查询数据。
在本申请的一个实施例中,所述第一确定单元,包括:
计算子单元,用于根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价;
第一确定子单元,用于根据得到的每个计划树中每一操作的代价,确定每个计划树的代价。
在本申请的一个实施例中,所述计划树中包括scan操作、filter操作、project操作、broatcast join操作、shuffle hash join操作、sort merge join操作和group by操作中的一种或多种;
所述计算子单元,具体用于:
若计划树中包括scan操作,根据预设的I/O权重系数,计算每个计划树中scan操作的代价;
若计划树中包括filter操作,根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价;
若计划树中包括project操作,根据预设的project操作的CPU计算权重系数,计算每个计划树中project操作的代价;
若计划树中包括broatcast join操作,根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价;
若计划树中包括shuffle hash join操作,根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hashjoin操作的代价;
若计划树中包括sort merge join操作,根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价;
若计划树中包括group by操作,根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据所述查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价。
在本申请的一个实施例中,所述装置还包括:第二确定单元,用于确定根据所述查询请求从作为project操作对象的表中选择行的概率;
所述第二确定单元,包括:
第二确定子单元,用于根据预先存储的各个表的列信息,确定根据所述查询请求中每一条件表达式从作为project操作对象的表中选择行的概率;所述列信息包括每一列去重后的行总数;
第三确定子单元,用于根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率。
在本申请的一个实施例中,若表中的列为数据列,所述列信息还包括:最大值和最小值。
在本申请的一个实施例中,所述第三确定子单元,具体用于:
若所述查询请求中条件表达式间的运算符为and,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据and两侧的条件表达式选择行的概率的乘积;
若所述查询请求中条件表达式间的运算符为or,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据or两侧的条件表达式选择行的概率的和减去根据or两侧的条件表达式选择行的概率乘积。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcast join操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcastjoin操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的map task的个数,计算每个计划树中shuffle hash join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价;
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort mergejoin操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort mergejoin操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价;
根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sortmerge join操作的join关系中右表查询结果的行总数,计算每个计划树中sort mergejoin操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为group by操作对象的表的maptask的个数,计算每个计划树中group by操作中进行shuffle和排序的代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及reducer的个数,计算得到每个计划树中group by操作的代价。
在本申请的一个实施例中,所述第一确定子单元,具体用于:
对于每一计划树,若该计划树包括多个阶段,计算每一阶段包括操作的代价的和,获得该计划树每一阶段的代价;
过滤掉每个计划树中可并行执行的阶段的代价中非最大的代价;
对于每个计划树,统计剩余阶段的代价的和,获得该计划树的代价。
三方面,本申请实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线;其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的计算机程序,实现上述的数据查询方法步骤。
四方面,本申请实施例提供了一种机器可读存储介质,所述机器可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述的数据查询方法步骤。
本申请实施例中,根据网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,而网络传输、I/O和CPU计算为数据查询时的主要开销,因此,本申请实施例能够准确的确定出每个计划树的代价,选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。当然,实施本申请的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的数据查询方法的一种流程示意图;
图2为本申请实施例提供的计划树的一种示意图;
图3为本申请实施例提供的计划树的另一种示意图;
图4为本申请实施例提供的数据查询装置的一种结构示意图;
图5为本申请实施例提供的电子设备的一种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了提高数据查询效率,本申请实施例提供了一种数据查询方法及装置。参考图1,图1为本申请实施例提供的数据查询方法的一种流程示意图,该方法可以应用于服务器、存储器等设备中。该方法包括:
步骤101:获取查询请求;
其中,查询请求可以为一条SQL查询语句,例如select p.name,p.age,a.cityfrom people as p inner join address as a on p.name=a.name where p.age=20and
a.city='Shanghai'order by p.name。
查询请求可以包括运算符、操作等元素,其中,运算符可以包括且(and)、或(or)等,操作包括扫描(scan)操作、过滤(filter)操作、投影(project)操作、广播连接(broatcast join)操作、洗牌哈希连接(shuffle hash join)操作、排序合并连接(sortmerge join)操作和分组(group by)操作等操作中的一种或多种。
假设,用户需要查询表A的a列中取值为'a0'并且表B的b列中取值为'b0'的数据,和表A的a列中取值为'a1'并且表B的b列中取值为'b1'的数据,那么查询请求可以为:(A.a='a0'and B.b='b0')or(A.a='a1'and B.b='b1')。
步骤102:根据查询请求建立至少一个计划树;
仍以步骤101中的例子进行说明,若获取到查询请求后,解析该查询请求后获得:(A.a='a0'and B.b='b0')or(A.a='a1'and B.b='b1'),则建立的一个计划树如图2所示;
其中,relation:表示拉取某个表的数据,如图2中左下方relation操作中的A表示拉取表A的数据,图2中右下方relation操作中的B表示拉取表B的数据;
join:表示对左右操作做一个连接操作,该操作指定查询请求;如图2中join操作中的查询请求为(A.a='a0'and B.b='b0')or(A.a='a1'and B.b='b1');
project:表示做投影操作,该操作指定需要投影的列名;如图2上方project操作下方的“A.a,B.b”表示需要投影A表中的a列和B表中的b列。
步骤103:根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;
数据查询系统设置在设备集群上,不同的设备集群环境中,硬件配置不同,网络传输、磁盘的I/O和CPU的性能有所差别,这些差别可以以权重系数的形式配置在设备的属性文件中,比如磁盘I/O耗时比较长,可以配置I/O权重系数为100,CPU的计算时间很短,可以配置CPU计算权重系数为0.1。
根据网络传输权重系数可以计算出计划树的网络传输代价,根据I/O权重系数可以计算出计划树的I/O代价,根据CPU计算权重系数可以计算出计划树的CPU计算代价,网络传输、I/O和CPU计算为数据查询时的主要开销,因此,通过计划树的网络传输代价、I/O代价和CPU计算代价,可以准确的确定出计划树的代价。
在本申请的一个实施例中,每个计划树中包括多种操作,如图2所示的计划树中包括join操作和project操作,每种操作在查询数据时均需要消耗时间,根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树中每一操作的代价;根据得到的每个计划树中每一操作的代价,确定每个计划树的代价。
在本申请的一个实施例中,对于每一计划树,可以统计该计划树中操作的代价的和,将获得的代价和作为该计划树的代价。
在本申请的另一个实施例中,一个计划树可以分为多个阶段(stage),若这多个stage中存在可以并行执行的stage,对每一stage,可以统计该stage包括操作的代价的和,将获得的代价和作为该stage的代价;对于可并行执行的stage的代价,过滤掉可并行执行的stage的代价中非最大的代价;最后,统计剩余stage的代价的和,获得该计划树的代价。
例如,如图3所示的计划树,该计划树中包括5个stage,分别为stage1、stage2、stage3、stage4和stage5,统计获得stage1的代价为Coststage1,stage2的代价为Coststage2,stage3的代价为Coststage3,stage4的代价为Coststage4,stage5的代价为Coststage5,其中,stage1和stage2可以并行执行,Coststage1<Coststage2,过滤掉Coststage1,stage3和stage4可以并行执行,Coststage3>Coststage4,过滤掉Coststage4,因此可以统计获得计划树的代价为Coststage2+Coststage3+Coststage5
步骤104:按照代价最低的计划树查询数据。
本申请实施例中,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,计算出的每个计划树的代价更为准确,可以认为选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。
在本申请的一个实施例中,计算计划树中不同操作的代价时,由于计划树中不同的操作涉及的开销不同,可以根据操作涉及的开销,计算该操作的代价。
例如,数据查询系统的节点执行scan操作时,需要扫描该节点上存储的表,因此,scan操作涉及I/O开销,可以根据预设的I/O权重系数,计算每个计划树中scan操作的代价。
一种实现方式中,若数据查询系统包括多个节点,各个节点单独执行scan操作,可以根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价。其中,节点数越多,作为scan操作对象的表的行总数越少,则每一节点的执行scan操作的代价越低,也就是,scan操作的代价与节点数成反比,scan操作的代价与作为scan操作对象的表的行总数成正比。
一个例子中,可以根据公式
Cost1=δI/O×|T1|÷Node
确定每个计划树中scan操作的代价。其中,Cost1为scan操作的代价,δI/O为预设的I/O权重系数,|T1|为作为scan操作对象的表的行总数,如图3所示的计划树中的scan A1,表A1作为scan操作对象,Node为数据查询系统的节点数。
数据查询系统的节点执行filter操作时,filter操作需要被转换为弹性分布式数据集(Resilient Distributed Datasets,RDD)的filter算子,该转换过程在各个节点的内存中执行,也就是,涉及了CPU开销,没有网络传输和I/O开销。因此,可以根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价。一种实现方式中,若RDD的分区数等于CPU的核数,当没有选择条件时,CPU耗时为0,计划树的filter操作的代价为0;当有选择条件时,CPU耗时不为0,可以根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
一个例子中,可以根据公式
Cost2=δCPU1×|T2|
确定每个计划树中filter操作的代价。其中,Cost2为filter操作的代价。δCPU1为预设的filter操作的CPU计算权重系数,|T2|为作为filter操作对象的表的行总数。
数据查询系统的节点执行project操作时,project操作需要被转换为RDD的映射(map)算子,该转换过程在各个节点的内存中执行,也就是,涉及了CPU开销,没有网络传输和I/O开销,可以根据预设的project操作的CPU计算权重系数计算每个计划树中project操作的代价。一种实现方式中,若RDD的分区数等于CPU的核数,可以根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价。
一个例子中,可以根据公式
Cost3=δCPU2×|T3|×S
确定每一计划树中project操作的代价。其中,Cost3为project操作的代价。δCPU2为预设的project操作的CPU计算权重系数,|T3|为作为project操作对象的表的行总数,S为根据查询请求从作为project操作对象的表中选择行的概率,即S为查询请求对应的选择率。
在本申请的一个实施例中,为了便于计算查询请求对应的选择率,可以预先存储的各个表的列信息,由这些存储的列信息构成数据字典,这里,数据字典中可以包括表名、表中的行总数等,列信息可以包括每一列去重后的行总数。此时,对于预先存储的各个表的每一列的列信息,数值是均匀分布的,每一数值的选择率为1/(该数值所在列去重后的行总数)。在一种实现方式中,若表中的列为数据列,该列的列信息还可以包括:该列中最大值和最小值。此时,选择率的计算方法如表1所示。
表1
其中,value为一个条件表达式的数值,lower为条件表达式的下界,upper为条件表达式的上界,COUNTdiff为查询的列去重后的行总数,Min为查询的列中的最小值,Max为查询的列中的最大值。
实际应用中,一个查询请求中可以拆分为多个如表1中所示的条件表达式,根据表1所示的公式和预先存储的各个表的列信息,确定根据每一条件表达式从作为project操作对象的表中选择行的概率,即确定条件表达式对应的选择率;之后,根据条件表达式间的运算符,确定根据查询请求从作为project操作对象的表中选择行的概率,即确定查询请求对应的选择率。
一种实现方式中,当查询请求中可以拆分为多个条件表达式时,若条件表达式间的运算符为and,则确定查询请求对应的选择率为:and两侧的条件表达式对应的选择率的乘积;若条件表达式间的运算符为or,则确定查询请求对应的选择率为:or两侧的条件表达式对应的选择率的和减去or两侧的条件表达式对应的选择率的乘积。如表2所示的包括多个条件表达式的查询请求对应的选择率的计算公式。
表2
条件表达式关系 选择率计算公式
C<sub>1</sub>and C<sub>2</sub> S<sub>1</sub>×S<sub>2</sub>
C<sub>1</sub>or C<sub>2</sub> S<sub>1</sub>+S<sub>2</sub>-S<sub>1</sub>×S<sub>2</sub>
其中,C1和C2为一个查询请求包括的两个条件表达式,S1为C1对应的选择率,S2为C2对应的选择率。
数据查询系统的节点执行broatcast join操作时,将broatcast join操作的join关系中左表发送到各个节点上,与broatcast join操作的join关系中右表进行连接,避免出现洗牌(shuffle)。在将broatcast join操作的join关系中左表发送到各个节点上时涉及了网络传输开销,将broatcast join操作的join关系中左表与右表进行连接的操作是在内存中执行,涉及了CPU开销。因此,可以根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价。
一种实现方式中,若broatcast join操作的join关系中右表均匀分布在各个节点上,可以根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcast join操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcastjoin操作的代价。一个例子中,可以根据公式
Cost4=δnetwork×|L1|×Node+δCPU3×|R1|÷Node
确定每个计划树中broatcast join操作的代价。其中,Cost4为broatcast join操作的代价。δnetwork为预设的网络传输权重系数,|L1|为broatcast join操作的join关系中左表查询结果的行总数,Node为数据查询系统的节点数,δCPU3为预设的broatcast join操作的CPU计算权重系数,也就是,预设的broatcast join操作中进行连接的CPU计算权重系数,|R1|为broatcast join操作的join关系中右表查询结果的行总数。
数据查询系统的节点执行shuffle hash join操作时,需要将shuffle hash join操作的join关系中的左表和右表按照关键字(Key)值重分区,这个过程涉及到shuffle,即通过建立的map task,读取各个节点上存储的shuffle hash join操作的join关系中左表和右表,并将shuffle hash join操作的join关系中左表和右表发送到各个节点上,各个节点存储接收的左表和右表。在shuffle之后,对重分区后的数据进行hash join,即各个节点对左表和右表进行连接。其中,进行shuffle时,需要读取和存储左表和右表,这涉及了I/O开销。进行shuffle时,还需要将左表和右表在节点间传输,这就涉及了网络传输开销。另外,对左表和右表进行连接的操作是在内存中执行的,这涉及了CPU开销。
基于上述情况下,可以根据预设的网络传输权重系数、I/O权重系数和shufflehash join操作的CPU计算权重系数,计算每个计划树中shuffle hash join操作的代价。
一种实现方式中,可以先根据预设的网络传输权重系数、I/O权重系数、shufflehash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的map task的个数,计算每个计划树中shuffle hash join操作的左代价;以及根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价。
上述shuffle hash join操作的左代价为shuffle hash join操作中对左表进行shuffle的代价,shuffle hash join操作的右代价为shuffle hash join操作中对右表进行shuffle的代价。
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
一个例子中,可以根据公式
Cost5=CostL1+CostR1CPU4×(|L2|+|R2|)
CostL1=2×δI/O×|L2|÷NL1network×|L2|
CostR1=2×δI/O×|R2|÷NR1network×|R2|
确定每个计划树中shuffle hash join操作的代价。其中,Cost5为shuffle hashjoin操作的代价,CostL1为shuffle hash join操作的左代价,CostR1为shuffle hash join操作的右代价。δCPU4为预设的shuffle hash join操作的CPU计算权重系数,也就是,预设的shuffle hash join操作中进行连接的CPU计算权重系数,|L2|为shuffle hash join操作的join关系中左表查询结果的行总数,|R2|为shuffle hash join操作的join关系中右表查询结果的行总数,NL1为shuffle hash join操作的join关系中左表的map task的个数,NR1为shuffle hash join操作的join关系中右表的map task的个数。
数据查询系统的节点执行sort merge join操作时,需要将sort merge join操作的join关系中的左表和右表按照Key值重分区,这个过程涉及到shuffle,即通过建立的maptask,读取各个节点上存储的sort merge join操作的join关系中左表和右表,并将sortmerge join操作的join关系中左表和右表发送到各个节点上,各个节点存储接收的左表和右表。在shuffle之后,对重分区后的数据进行排序,即对左表进行排序,并对右表进行排序。排序之后遍历两个表,碰到相同的key值就合并输出,若左表中的记录小则继续读取左表中的记录,反之读取右表。
其中,进行shuffle时,需要读取和存储左表和右表,这涉及了I/O开销。进行shuffle时,还需要将左表和右表在节点间传输,这就涉及了网络传输开销。在shuffle之后,对左表和右表进行排序的操作是在内存中执行的,这涉及了CPU开销。在排序之后,需要读取左表或右边的,这涉及了I/O开销。
基于上述情况下,可以根据预设的网络传输权重系数、I/O权重系数和sort mergejoin操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价。
一种实现方式中,可以先根据预设的网络传输权重系数、I/O权重系数、sortmerge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort merge join操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;以及根据预设的网络传输权重系数、I/O权重系数、sortmerge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort merge join操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价。
上述sort merge join操作的左代价为sort merge join操作中对左表进行shuffle和排序的代价,sort merge join操作的右代价为sort merge join操作中对右表进行shuffle和排序的代价。
根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sortmerge join操作的join关系中右表查询结果的行总数,计算每个计划树中sort mergejoin操作的代价。
一个例子中,可以根据公式
Cost6=CostL2+CostR2I/O×(|L3|+|R3|)
CostL2=2×δI/O×|L3|÷NL2network×|L3|+δCPU5×|L3|
CostR2=2×δI/O×|R3|÷NR2network×|R3|+δCPU5×|R3|
确定每个计划树中sort merge join操作的代价;其中,Cost6为sort merge join操作的代价,CostL2为sort merge join操作的左代价,CostR2为sort merge join操作的右代价。|L3|为sort merge join操作的join关系中左表查询结果的行总数,|R3|为sortmerge join操作的join关系中右表查询结果的行总数,NL2为sort merge join操作的join关系中左表的map task的个数,δCPU5为预设的sort merge join操作的CPU计算权重系数,也就是,预设的shuffle hash join操作中进行排序的CPU计算权重系数,NR2为sort mergejoin操作的join关系中右表的map task的个数。
数据查询系统的节点执行group by操作时会导致shuffle,即通过建立的maptask,读取各个节点上存储的作为group by操作对象的表,并将作为group by操作对象的表发送到各个节点上,各个节点存储接收的表,并对接收的表进行排序。在shuffle之后,各个节点对接收的作为group by操作对象的表进行排序。在排序后,reduce阶段通过聚合函数将排序后的结果进行聚合。
其中,进行shuffle时,需要读取和存储左表和右表,这涉及了I/O开销。进行shuffle时,还需要将左表和右表在节点间传输,这就涉及了网络传输开销。在shuffle之后,对左表和右表进行排序的操作和对排序后的结果进行聚合的操作是在内存中执行的,这涉及了CPU开销。
基于上述情况,可以根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
一种实现方式中,可以根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为groupby操作对象的表的map task的个数,计算计算每个计划树中group by操作中shuffle代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及reducer的个数,计算得到每个计划树中group by操作的代价。
一个例子中,可以根据公式
Cost7=Cost8CPU6×|T4|÷m
Cost8=2×δI/O×|T4|÷n+δnetwork×|T4|+δCPU7×|T4|
确定每个计划树中group by操作的代价;其中,Cost7为group by操作的代价,Cost8为group by操作中进行shuffle排序的代价。δCPU6为预设的sort merge join操作中进行聚合的CPU计算权重系数,|T4|为作为group by操作对象的表的行总数,m为reducer的个数,n为作为group by操作对象的表的map任务的个数,δCPU7为预设的sort merge join操作中进行排序的CPU计算权重系数。
应用本申请实施例,根据网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,而网络传输、I/O和CPU计算为数据查询时的主要开销,因此,本申请实施例能够准确的确定出每个计划树的代价,选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。
与数据查询方法实施例对应,本申请实施例还提供了一种数据查询装置。参考图4,图4为本申请实施例提供的数据查询装置的一种结构示意图,该装置包括:
获取单元401,用于获取查询请求;
建立单元402,用于根据查询请求建立至少一个计划树;
第一确定单元403,用于根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;
查询单元404,用于按照代价最低的计划树查询数据。
在本申请的一个实施例中,第一确定单元403,包括:
计算子单元,用于根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价;
第一确定子单元,用于根据得到的每个计划树中每一操作的代价,确定每个计划树的代价。
在本申请的一个实施例中,计划树中可以包括scan操作、filter操作、project操作、broatcast join操作、shuffle hash join操作、sort merge join操作和group by操作中的一种或多种;
计算子单元,具体可以用于:
若计划树中包括scan操作,根据预设的I/O权重系数,计算每个计划树中scan操作的代价;
若计划树中包括filter操作,根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价;
若计划树中包括project操作,根据预设的project操作的CPU计算权重系数计算每个计划树中project操作的代价;
若计划树中包括broatcast join操作,根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价;
若计划树中包括shuffle hash join操作,根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hashjoin操作的代价;
若计划树中包括sort merge join操作,根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价;
若计划树中包括group by操作,根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据所述查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价。
在本申请的一个实施例中,上述数据查询装置还可以包括:第二确定单元,用于确定根据查询请求从作为project操作对象的表中选择行的概率;
第二确定单元,可以包括:
第二确定子单元,用于根据预先存储的各个表的列信息,确定根据查询请求中每一条件表达式从作为project操作对象的表中选择行的概率;列信息包括每一列去重后的行总数;
第三确定子单元,用于根据所述查询请求中条件表达式间的运算符,确定根据查询请求从作为project操作对象的表中选择行的概率。
在本申请的一个实施例中,若表中的列为数据列,列信息还可以包括:最大值和最小值。
在本申请的一个实施例中,第三确定子单元,具体可以用于:
若查询请求中条件表达式间的运算符为and,则确定根据查询请求从作为project操作对象的表中选择行的概率为:根据and两侧的条件表达式选择行的概率的乘积;
若查询请求中条件表达式间的运算符为or,则确定根据查询请求从作为project操作对象的表中选择行的概率为:根据or两侧的条件表达式选择行的概率的和减去条件表达式选择行的概率乘积。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcast join操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcastjoin操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的map task的个数,计算每个计划树中shuffle hash join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价;
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort mergejoin操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort mergejoin操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价;
根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sortmerge join操作的join关系中右表查询结果的行总数,计算每个计划树中sort mergejoin操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为group by操作对象的表的maptask的个数,计算每个计划树中group by操作中进行shuffle和排序的代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及reducer的个数,计算得到每个计划树中group by操作的代价。
在本申请的一个实施例中,第一确定子单元,具体可以用于:
对于每一计划树,若该计划树包括多个阶段,计算每一阶段包括操作的代价的和,获得该计划树每一阶段的代价;
过滤掉每个计划树中可并行执行的阶段的代价中非最大的代价;
对于每个计划树,统计剩余阶段的代价的和,获得该计划树的代价。
应用本申请实施例,根据网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,而网络传输、I/O和CPU计算为数据查询时的主要开销,因此,本申请实施例能够准确的确定出每个计划树的代价,选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。
与数据查询方法实施例对应,本申请实施例还提供了一种电子设备,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504;其中,处理器501、通信接口502、存储器503通过通信总线504完成相互间的通信;
存储器503,用于存放计算机程序;
处理器501,用于执行存储器503上所存放的计算机程序时,实现数据查询方法。其中,数据查询方法包括:
获取查询请求;
根据查询请求建立至少一个计划树;
根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;
按照代价最低的计划树查询数据。
应用本申请实施例,根据网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,而网络传输、I/O和CPU计算为数据查询时的主要开销,因此,本申请实施例能够准确的确定出每个计划树的代价,选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。
通信总线504可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,EISA)总线等。该通信总线504可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口502用于上述电子设备与其他设备之间的通信。
存储器503可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器503还可以是至少一个位于远离前述处理器的存储装置。
处理器501可以是通用处理器,包括CPU、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
与数据查询方法实施例对应,本申请实施例还提供了一种机器可读存储介质,机器可读存储介质内存储有计算机程序,计算机程序被处理器执行时实现数据查询方法。其中,数据查询方法包括:
获取查询请求;
根据查询请求建立至少一个计划树;
根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;
按照代价最低的计划树查询数据。
应用本申请实施例,根据网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,而网络传输、I/O和CPU计算为数据查询时的主要开销,因此,本申请实施例能够准确的确定出每个计划树的代价,选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于数据查询装置、电子设备、机器可读存介质实施例而言,由于其基本相似于数据查询方法实施例,所以描述的比较简单,相关之处参见数据查询方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。

Claims (30)

1.一种数据查询方法,其特征在于,所述方法包括:
获取查询请求;
根据所述查询请求建立至少一个计划树;
根据预设的网络传输权重系数、输入I/输出O权重系数和中央处理器CPU计算权重系数,确定每个计划树的代价;
按照代价最低的计划树查询数据。
2.根据权利要求1所述的方法,其特征在于,所述根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价;
根据得到的每个计划树中每一操作的代价,确定每个计划树的代价。
3.根据权利要求2所述的方法,其特征在于,所述计划树中包括扫描scan操作、过滤filter操作、投影project操作、广播连接broatcast join操作、洗牌哈希连接shufflehash join操作、排序合并连接sort merge join操作和分组group by操作中的一种或多种;
所述根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价的步骤,包括:
若计划树中包括scan操作,根据预设的I/O权重系数,计算每个计划树中scan操作的代价;
若计划树中包括filter操作,根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价;
若计划树中包括project操作,根据预设的project操作的CPU计算权重系数,计算每个计划树中project操作的代价;
若计划树中包括broatcast join操作,根据预设的网络传输权重系数和broatcastjoin操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价;
若计划树中包括shuffle hash join操作,根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hash join操作的代价;
若计划树中包括sort merge join操作,根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价;
若计划树中包括group by操作,根据预设的网络传输权重系数、I/O权重系数和groupby操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
4.根据权利要求3所述的方法,其特征在于,所述根据预设的I/O权重系数,计算每个计划树中scan操作的代价的步骤,包括:
根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价。
5.根据权利要求3所述的方法,其特征在于,所述根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价的步骤,包括:
根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
6.根据权利要求3所述的方法,其特征在于,所述根据预设的project操作的CPU计算权重系数,计算每个计划树中project操作的代价的步骤,包括:
根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据所述查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价。
7.根据权利要求6所述的方法,其特征在于,通过以下方式确定根据所述查询请求从作为project操作对象的表中选择行的概率:
根据预先存储的各个表的列信息,确定根据所述查询请求中每一个条件表达式从作为project操作对象的表中选择行的概率;所述列信息包括每一列去重后的行总数;
根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率。
8.根据权利要求7所述的方法,其特征在于,若表中的列为数据列,所述列信息还包括:最大值和最小值。
9.根据权利要求7或8所述的方法,其特征在于,所述根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率的步骤,包括:
若所述查询请求中条件表达式间的运算符为且and,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据and两侧的条件表达式选择行的概率的乘积;
若所述查询请求中条件表达式间的运算符为或or,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据or两侧的条件表达式选择根据的概率的和减去根据or两侧的条件表达式选择行的概率乘积。
10.根据权利要求3所述的方法,其特征在于,所述根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价的步骤,包括:
根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcastjoin操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcast join操作的代价。
11.根据权利要求3所述的方法,其特征在于,所述根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hashjoin操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的映射任务maptask的个数,计算每个计划树中shuffle hash join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价;
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
12.根据权利要求3所述的方法,其特征在于,所述根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort mergejoin操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort merge join操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort merge join操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价;
根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort mergejoin操作的join关系中右表查询结果的行总数,计算每个计划树中sort merge join操作的代价。
13.根据权利要求3所述的方法,其特征在于,所述根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为group by操作对象的表的maptask的个数,计算每个计划树中group by操作中进行shuffle和排序的代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及合并器reducer的个数,计算得到每个计划树中group by操作的代价。
14.根据权利要求2所述的方法,其特征在于,所述根据得到的每个计划树中每一操作的代价,确定每个计划树的代价的步骤,包括:
对于每一计划树,若该计划树包括多个阶段,计算每一阶段包括操作的代价的和,获得该计划树每一阶段的代价;
过滤掉每个计划树中可并行执行的阶段的代价中非最大的代价;
对于每个计划树,统计剩余阶段的代价的和,获得该计划树的代价。
15.一种数据查询装置,其特征在于,所述装置包括:
获取单元,用于获取查询请求;
建立单元,用于根据所述查询请求建立至少一个计划树;
第一确定单元,用于根据预设的网络传输权重系数、输入I/输出O权重系数和中央处理器CPU计算权重系数,确定每个计划树的代价;
查询单元,用于按照代价最低的计划树查询数据。
16.根据权利要求15所述的装置,其特征在于,所述第一确定单元,包括:
计算子单元,用于根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价;
第一确定子单元,用于根据得到的每个计划树中每一操作的代价,确定每个计划树的代价。
17.根据权利要求16所述的装置,其特征在于,所述计划树中包括扫描scan操作、过滤filter操作、投影project操作、广播连接broatcast join操作、洗牌哈希连接shufflehash join操作、排序合并连接sort merge join操作和分组group by操作中的一种或多种;
所述计算子单元,具体用于:
若计划树中包括scan操作,根据预设的I/O权重系数,计算每个计划树中scan操作的代价;
若计划树中包括filter操作,根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价;
若计划树中包括project操作,根据预设的project操作的CPU计算权重系数,计算每个计划树中project操作的代价;
若计划树中包括broatcast join操作,根据预设的网络传输权重系数和broatcastjoin操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价;
若计划树中包括shuffle hash join操作,根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hash join操作的代价;
若计划树中包括sort merge join操作,根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价;
若计划树中包括group by操作,根据预设的网络传输权重系数、I/O权重系数和groupby操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
18.根据权利要求17所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价。
19.根据权利要求17所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
20.根据权利要求17所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据所述查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价。
21.根据权利要求20所述的装置,其特征在于,所述装置还包括:第二确定单元,用于确定根据所述查询请求从作为project操作对象的表中选择行的概率;
所述第二确定单元,包括:
第二确定子单元,用于根据预先存储的各个表的列信息,确定根据所述查询请求中每一条件表达式从作为project操作对象的表中选择行的概率;所述列信息包括每一列去重后的行总数;
第三确定子单元,用于根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率。
22.根据权利要求21所述的装置,其特征在于,若表中的列为数据列,所述列信息还包括:最大值和最小值。
23.根据权利要求22或22所述的装置,其特征在于,所述第三确定子单元,具体用于:
若所述查询请求中条件表达式间的运算符为且and,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据and两侧的条件表达式选择行的概率的乘积;
若所述查询请求中条件表达式间的运算符为或or,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据or两侧的条件表达式选择行的概率的和减去根据or两侧的条件表达式选择行的概率乘积。
24.根据权利要求17所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcastjoin操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcast join操作的代价。
25.根据权利要求17所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的映射任务maptask的个数,计算每个计划树中shuffle hash join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价;
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
26.根据权利要求17所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort merge join操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort merge join操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价;
根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort mergejoin操作的join关系中右表查询结果的行总数,计算每个计划树中sort merge join操作的代价。
27.根据权利要求17所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为group by操作对象的表的maptask的个数,计算每个计划树中group by操作中进行shuffle和排序的代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及合并器reducer的个数,计算得到每个计划树中group by操作的代价。
28.根据权利要求15所述的装置,其特征在于,所述第一确定子单元,具体用于:
对于每一计划树,若该计划树包括多个阶段,计算每一阶段包括操作的代价的和,获得该计划树每一阶段的代价;
过滤掉每个计划树中可并行执行的阶段的代价中非最大的代价;
对于每个计划树,统计剩余阶段的代价的和,获得该计划树的代价。
29.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的计算机程序,实现权利要求1-14任一所述的方法步骤。
30.一种机器可读存储介质,其特征在于,所述机器可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-14任一所述的方法步骤。
CN201711295212.7A 2017-12-08 2017-12-08 一种数据查询方法及装置 Active CN110019341B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711295212.7A CN110019341B (zh) 2017-12-08 2017-12-08 一种数据查询方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711295212.7A CN110019341B (zh) 2017-12-08 2017-12-08 一种数据查询方法及装置

Publications (2)

Publication Number Publication Date
CN110019341A true CN110019341A (zh) 2019-07-16
CN110019341B CN110019341B (zh) 2021-07-23

Family

ID=67186631

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711295212.7A Active CN110019341B (zh) 2017-12-08 2017-12-08 一种数据查询方法及装置

Country Status (1)

Country Link
CN (1) CN110019341B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112764935A (zh) * 2021-01-29 2021-05-07 中国平安人寿保险股份有限公司 大数据处理方法、装置、电子设备及存储介质
CN113434500A (zh) * 2019-08-20 2021-09-24 北京奥星贝斯科技有限公司 表连接方法、装置、分布式数据库系统、服务器及介质
CN114461677A (zh) * 2022-04-12 2022-05-10 天津南大通用数据技术股份有限公司 一种基于选择度传递调整连接顺序的方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070174292A1 (en) * 2006-01-26 2007-07-26 Wen-Syan Li Autonomic recommendation and placement of materialized query tables for load distribution
CN101408900A (zh) * 2008-11-24 2009-04-15 中国科学院地理科学与资源研究所 一种网格计算环境下的分布式空间数据查询优化方法
WO2009061814A2 (en) * 2007-11-05 2009-05-14 University Of Florida Research Foundation, Inc. Lossless data compression and real-time decompression
US20160378829A1 (en) * 2015-06-29 2016-12-29 Oracle International Corporation One-pass join size estimation with correlated sampling
CN106446039A (zh) * 2016-08-30 2017-02-22 北京航空航天大学 聚合式大数据查询方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070174292A1 (en) * 2006-01-26 2007-07-26 Wen-Syan Li Autonomic recommendation and placement of materialized query tables for load distribution
WO2009061814A2 (en) * 2007-11-05 2009-05-14 University Of Florida Research Foundation, Inc. Lossless data compression and real-time decompression
CN101408900A (zh) * 2008-11-24 2009-04-15 中国科学院地理科学与资源研究所 一种网格计算环境下的分布式空间数据查询优化方法
US20160378829A1 (en) * 2015-06-29 2016-12-29 Oracle International Corporation One-pass join size estimation with correlated sampling
CN106446039A (zh) * 2016-08-30 2017-02-22 北京航空航天大学 聚合式大数据查询方法及装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
KIM C, KALDEWEY T, LEE V W, ET AL.: "Sort vs. hash revisited: Fast join implementation on modern multi-core CPUs", 《PROCEEDINGS OF THE VLDB ENDOWMENT》 *
LI D, CHEN W, LIANG X, ET AL.: "Cost-based query optimization for XPath", 《APPLIED MATHEMATICS & INFORMATION SCIENCES》 *
刘春雷: "基于代价模型的Spark_SQL查询优化研究", 《中国优秀硕士学位论文全文数据库信息科技辑》 *
邢玉钢: "一种改进的闪存数据库 Sort-Merge-Join 算法", 《计算机应用研究》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113434500A (zh) * 2019-08-20 2021-09-24 北京奥星贝斯科技有限公司 表连接方法、装置、分布式数据库系统、服务器及介质
CN112764935A (zh) * 2021-01-29 2021-05-07 中国平安人寿保险股份有限公司 大数据处理方法、装置、电子设备及存储介质
CN114461677A (zh) * 2022-04-12 2022-05-10 天津南大通用数据技术股份有限公司 一种基于选择度传递调整连接顺序的方法

Also Published As

Publication number Publication date
CN110019341B (zh) 2021-07-23

Similar Documents

Publication Publication Date Title
CN110019341A (zh) 一种数据查询方法及装置
CN113360554B (zh) 一种数据抽取、转换和加载etl的方法和设备
EP3217296A1 (en) Data query method and apparatus
CN107003868A (zh) 处理包含联合类型操作的查询
CN105117442B (zh) 一种基于概率的大数据查询方法
Wang et al. Cleanix: A parallel big data cleaning system
CN107480260B (zh) 大数据实时分析方法、装置、计算设备及计算机存储介质
WO2021047323A1 (zh) 一种数据操作方法、装置及系统
CN104204969A (zh) 参数设定装置
CN106202209B (zh) 面向商品筛选应用的分布式结构化数据存储及查询方法
CN105745642B (zh) 查询数据的处理方法和装置
CN107480268A (zh) 数据查询方法及装置
CN108140022B (zh) 数据查询方法和数据库系统
CN107153702A (zh) 一种数据处理方法及装置
CN116881287A (zh) 一种数据查询方法及相关设备
Papadakis et al. JedAI3: beyond batch, blocking-based Entity Resolution.
CN108733781A (zh) 基于内存计算的集群时态数据索引方法
CN109471874A (zh) 数据分析方法、设备及存储介质
CN108073641B (zh) 查询数据表的方法和装置
CN106294468A (zh) 处理业务数据的方法和装置
CN107735781A (zh) 存储查询结果的方法和装置、计算设备
CN113628003A (zh) 酒店匹配方法、系统、终端及存储介质
CN102339303A (zh) 分布式系统
CN111522918A (zh) 数据汇聚方法、装置、电子设备及计算机可读存储介质
KR20180077830A (ko) 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치

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