CN109062949B - 一种提高在线聚集中多表连接查询效率的方法 - Google Patents
一种提高在线聚集中多表连接查询效率的方法 Download PDFInfo
- Publication number
- CN109062949B CN109062949B CN201810649787.2A CN201810649787A CN109062949B CN 109062949 B CN109062949 B CN 109062949B CN 201810649787 A CN201810649787 A CN 201810649787A CN 109062949 B CN109062949 B CN 109062949B
- Authority
- CN
- China
- Prior art keywords
- connection
- index
- query
- join
- formula
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种提高在线聚集中多表连接查询效率的方法。本发明包含步骤S1:构建索引模块,通过混合整数线性规划模型从历史记录的多表查询中选择合适的连接属性,对选择的连接属性建立索引;步骤S2:根据步骤1中创建的索引,设计多表连接查询算法Index Ripple Join;步骤S3:使用中心极限定理对采集的样本进行区间估计,从而得到多表连接查询置信区间。本发明能够有效提高在线聚集中多表连接查询的效率。
Description
技术领域:
本发明涉及一种提高在线聚集中多表连接查询效率的方法,具体涉及一种通过查找索引得到符合连接条件元组从而提高在线聚集中多表连接查询效率的方法。
背景技术:
随着社交网络、物联网、电子商务等的应用和普及,当今信息时代产生的数据相较于十年前发生***性增长。企业、政府机关、科研机构每天产生的数据量非常庞大,淘宝每天产生的数据量达到7T,百度每天需要处理100PB规模的数据。如何处理如此大规模的数据从而挖掘出有用的信息,是各大公司、机构需要解决的问题。在线聚集由于不需要扫描整张表,能够提高SQL查询速度,因此被引入到云计算环境以提高查询性能。在线聚集的基本执行流程是:从原始数据集中通过无放回随机采样得到样本集S,根据中心极限定理对样本集S做区间估计得到聚集结果区间,若不满足用户精度需求,则迭代的从原始数据集中再次采样加入到样本集S中,再进行区间估计,直到满足用户精度需求后停止程序。在线聚集适用于查询精度要求不高的应用,如趋势分析、评估、预测等数据分析场景中,绝对精度的查询结果并不是必需的,近似结果对用户而言完全可以接受。
对于在线聚集中的多表连接,Ripple Join被广泛使用,它从R表和S表中每次通过随机采样,得到样本集rn和sn,在二维矩阵中保存已采集样本的连接结果,若不符合精度要求则迭代执行上述过程。二维矩阵存放在内存中,可能导致内存空间不足,同时RippleJoin通过随机采样获得的样本可能不符合连接条件,使得Ripple Join在执行的初期很难获得大量的连接结果,而基于少量的连接结果后进行区间估计容易导致较大误差,从而显著增加Ripple Join的迭代次数,影响在线聚集多表连接执行效率。
发明内容
本发明的目的是提供一种提高在线聚集中多表连接查询效率的方法,通过查询索引的方式解决多表连接查询效率低下的问题。
上述的目的通过以下技术方案实现:
一种提高在线聚集中多表连接查询效率的方法,
步骤S1:构建索引模块,通过混合整数线性规划模型从历史记录的多表查询中选择合适的连接属性,对选择的连接属性建立索引;
步骤S2:根据步骤1中创建的索引,设计多表连接查询算法Index Ripple Join;
步骤S3:使用中心极限定理对采集的样本进行区间估计,从而得到多表连接查询置信区间。
进一步地,步骤S1中所述的选择合适的连接属性,对选择的连接属性建立索引的具体方法是:根据历史查询的多表查询中出现的连接属性,构建混合整数线性规划模型,选择当模型取得最优解时的连接属性建立索引。
进一步地,所述的混合整数线性规划模型公式是:
T=∑ipi*zi*gi (1)
约束条件公式如下:
∑iBi*zi≤C (2)
约束条件的含义是:索引占用的存储负载之和需要小于等于阈值C,公式(1)中pi表示第i条连接属性在历史查询中出现的频率;zi∈{0,1},0表示对连接属性不建立索引,1表示对连接属性构建索引;gi表示连接属性中Group的数量,其中Group表示连接属性取得一个特定值的所有元组;公式(2)中Bi表示索引占用的磁盘空间大小;参数zi与公式(1)中的zi含义相同。对于上述混合整数线性规划模型,采用动态规划算法进行求解。
进一步地,步骤S2中所述的Index Ripple Join执行过程是:
(1)假设多表连接查询包含R1和R2两个表,表R2在连接属性上存在索引,IndexRipple Join从R1表中进行随机采样;
(2)根据R1表中采集的样本通过索引在表R2中找到符合连接谓词的所有元组进行连接,得到连接结果;
(3)之后根据连接结果进行区间估计,若符合精度要求则停止Index Ripple Join算法并返回结果,若不符合连接结果则重复上述过程直到符合精度要求为止。
进一步地,步骤S3中通过中心极限定理计算多表连接置信区间公式如下:
给定一个从表T中采集的样本集S,样本集的大小是k,令函数f是聚集操作,则在样本集中包含一系列的独立变量f(x0),f(x1),…,f(xk-1),假设f(x)的期望是μ,方差是δ2,根据中心极限定理理论,总体的均值服从以μ为均值,δ2为方差的正态分布,因此通过计算可以得到总体的统计量的置信区间为公式(3):
其中参数c是与置信度有关的常量,当置信度≥99%的时候,c值为2.58,当95%≤置信度<99%时,c值为1.96;当90%≤置信度<95%时c值为1.64;
参数n指总体个数,由于Index Ripple Join仅从1张表中采样,因此n指被采样表中的元组个数;
参数μ通过样本能够得到,计算公式如下:
其中k为样本个数,对于参数δ2,依然能够通过样本获得:
通过公式(4)和(5)即可得到参数μ以及δ2的值,将这些参数带入公式(3)能够得到统计量的置信区间。上述3个公式对于多表连接的Index Ripple Join依然适用。
有益效果:
本发明的方法与现有的对Ripple Join的优化算法相比,其显著的优点是:现有的方法如Hash Ripple Join在连接属性上设定某个Hash函数,将已采集的样本构建成Hash表存放在内存中,新采集的样本根据Hash函数只需O(1)时间复杂度便能快速定位到Hash表中相应位置而不需要对所有元组进行连接,Hash Ripple Join相比于传统的Ripple Join减少了单次连接时间但是没有减少迭代次数,而迭代次数才是影响在线聚集性能的主要因素。为了减少多表连接的迭代次数,本发明首先根据历史查询建立数学模型选择合适的连接属性建立索引,之后通过索引找到符合连接条件的相关元组,使得Index Ripple Join在执行初期能够得到大量连接结果,有效减少多表连接的迭代次数,提高在线聚集中多表连接执行效率。
附图说明
图1为Hive中索引的存储方式;
图2为实验所用SQL查询语句;
图3为查询时间对比实验;
图4为查询精度对比实验。
具体实施方式
下面结合具体实施方式,进一步阐明本发明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。
一种提高在线聚集中多表连接查询效率的方法,该方法包括如下步骤:
步骤S1:构建索引模块,通过混合整数线性规划模型从历史记录的多表查询中选择合适的连接属性,对选择的连接属性建立索引;
步骤S2:根据步骤1中创建的索引,设计多表连接查询算法Index Ripple Join;
步骤S3:使用中心极限定理对采集的样本进行区间估计,从而得到多表连接查询置信区间。
进一步地,步骤S1中所述的选择连接属性建立索引的具体方法是:根据历史查询的多表查询中出现的连接属性,构建混合整数线性规划模型,选择当模型取得最优解时的连接属性建立索引。
进一步地,所述的混合整数线性规划模型公式是:
T=∑ipi*zi*gi (1)
约束条件公式如下:
∑iBi*zi≤C (2)
约束条件的含义是:索引占用的存储负载之和需要小于等于阈值C。公式(1)中pi表示第i条连接属性在历史查询中出现的频率;zi∈{0,1},0表示对连接属性不建立索引,1表示对连接属性构建索引;gi表示连接属性中Group的数量,其中Group表示连接属性取得一个特定值的所有元组。公式(2)中Bi表示索引占用的磁盘空间大小;参数zi与公式(1)中的zi含义相同。
进一步地,所述的混合整数线性规划模型求解过程如下:
求解查询频率pi时,对历史查询进行统计即可得到,参数gi可以通过扫描表获得。索引的存储负载和数据仓库以及索引类型有关,以大数据领域中广泛使用的Hive数据仓库为例,Hive的索引格式如图1所示。
Hive的索引包含3部分,分别是(1)被索引字段的值;(2)特定的值在HDFS中的文件路径,具体到数据表所在的文件块;(3)块中偏移量。Hive没有传统数据库中的B+树、红黑树等索引,它将索引保存为一张快表,因此Hive索引的存储负载不能忽略。
由于Hive中索引的数据类型与传统意义上的字符串类型不同,因此不能简单的通过计算估计索引占用的存储空间;同时,对于存有海量数据的表构建索引比较耗时,因此也不能通过对所有连接属性建立索引以此获得索引的存储负载。为此,本发明采用折中的方案与在线聚集的思想对索引的存储负载进行近似估计,执行过程如下:
(1)获得原始表中的元组个数n;
(2)采集m个样本;
(3)对样本建立索引,存储负载为b;
通过该方法能够近似获得所有连接属性的存储负载。得到所有参数后,本文将公式(1)抽象为0-1背包问题进行求解,连接属性对应物品,存储阈值C对应容量为V的背包,存储负载Bi类比为物品的体积vi,物品的价值xi表示为pi*gi,求解混合整数线性规划模型的算法如表1所示。
表1动态规划求解混合整数线性规划模型
通过对混合整数线性规划模型的求解,选择出需要建立索引的连接属性,在数据仓库中对这些连接属性建立索引。得到索引后提出本发明的查询算法Index Ripple Join。
进一步地,步骤S2中所述的Index Ripple Join执行过程是:
(1)假设多表连接查询包含R1和R2两个表,表R2在连接属性上存在索引,IndexRipple Join从R1表中进行随机采样;
(2)根据R1表中采集的样本通过索引在表R2中找到符合连接谓词的所有元组进行连接,得到连接结果;
(3)之后根据连接结果进行区间估计,若符合精度要求则停止Index Ripple Join算法并返回结果,若不符合连接结果则重复上述过程直到符合精度要求为止。
进一步地,步骤S3中通过中心极限定理计算多表连接置信区间公式如下:
给定一个从表T中采集的样本集S,样本集的大小是k,令函数f是聚集操作,例如f可以是AVG()、COUNT()、SUM()等,因此在样本集中包含一系列的独立变量f(x0),f(x1),…,f(xk-1)。假设f(x)的期望是μ,方差是δ2,中心极限定理理论认为总体的均值服从以μ为均值,δ2为方差的正态分布。因此通过计算可以得到总体的统计量的置信区间为公式(3)。
其中参数c是与置信度有关的常量,常用的置信度与c值对应关系见表2。
表2置信度-c值对照表
参数n指总体个数,因为Index Ripple Join仅从1张表中采样,因此n指被采样表中的元组个数。参数μ通过样本能够得到,计算公式如下:
其中k为样本个数,对于参数δ2,依然能够通过样本获得:
通过公式(4)和(5)即可得到参数μ以及δ2的值,将这些参数带入公式(3)能够得到统计量的置信区间。上述3个公式对于多表连接的Index Ripple Join依然适用。
下面的实验是在拥有12个节点的集群下进行的,其中1个节点作为Spark的主节点,其余的11个作为Spark的工作节点,每个节点的硬件配置是2.7GHz 8核的CPU和64GB内存。主节点中安装Hive数据仓库,对实验中所用的表格进行统一管理。使用TPC-H生成100GB大小的原始数据,根据TPC-H提供的22条查询语句进行统计得到各连接属性的出现频率、Group个数,并通过抽样的方式得到索引大小的估计值,统计结果如表3所示。
表3历史查询统计
实验中设置索引存储阈值C为20%,即索引的存储空间之和等于原始表存储空间之和的20%,根据表3的统计结果和阈值C,使用动态规划对混合整数线性规划模型进行求解得到需要构建索引的属性列如下:
表4构建索引属性列
在建立索引的基础上,首先基于索引进行查询性能实验,将Index Ripple Join、Ripple Join和精确查询在查询时间上进行比较。实验中使用的SQL语句如图2所示,其中o_orderpriority共有5种取值,实验结果如图3所示。从实验结果可以看出,Index RippleJoin的查询时间少于精确查询和Ripple Join,这是因为Index Ripple Join在1次迭代后即可得到足够多的样本进行区间估计,从而能够快速收敛。虽然Index Ripple Join单次执行时间比Ripple Join慢,但由于需要的迭代次数少于Ripple Join,因此最终的查询速度比Ripple Join快。
在查询性能上,Index Ripple Join的执行效率高于Ripple Join,但还需要比较Index Ripple Join与Ripple Join的查询精度,从而确定通过Index Ripple Join得到估计结果的正确性。依然使用图2中的查询,将Index Ripple Join、Ripple Join得到的置信区间和精确值进行比较,实验结果如图4。从实验结果可以看出Index Ripple Join的估计精度比Ripple Join略差,不过误差不会超过精确值的5%,在合理范围内,因此通过IndexRipple Join得到的置信区间是正确的。
应当指出,上述实施实例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定,这里无需也无法对所有的实施方式予以穷举。本实施例中未明确的各组成部分均可用现有技术加以实现。对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (1)
1.一种提高在线聚集中多表连接查询效率的方法,其特征在于,该方法包括如下步骤:
步骤S1:构建索引模块,通过混合整数线性规划模型从历史记录的多表查询中选择合适的连接属性,对选择的连接属性建立索引;
步骤S2:根据步骤S1 中创建的索引,设计多表连接查询算法Index Ripple Join;
步骤S3:使用中心极限定理对采集的样本进行区间估计,从而得到多表连接查询置信区间;
步骤S1中所述的选择合适的连接属性,对选择的连接属性建立索引的具体方法是:根据历史查询的多表查询中出现的连接属性,构建混合整数线性规划模型,选择当模型取得最优解时的连接属性建立索引;
所述的混合整数线性规划模型公式是:
T=∑ipi*zi*gi (1)
约束条件公式如下:
∑iBi*zi≤C (2)
约束条件的含义是:索引占用的存储负载之和需要小于等于阈值C,公式(1)中pi表示第i条连接属性在历史查询中出现的频率;zi∈{0,1},0表示对连接属性不建立索引,1表示对连接属性构建索引;gi表示连接属性中Group的数量,其中Group表示连接属性取得一个特定值的所有元组;公式(2)中Bi表示索引占用的磁盘空间大小;参数zi与公式(1)中的zi含义相同,对于上述混合整数线性规划模型,采用动态规划算法进行求解;
步骤S2中所述的Index Ripple Join执行过程是:
(1)假设多表连接查询包含R1和R2两个表,表R2在连接属性上存在索引,Index RippleJoin从R1表中进行随机采样;
(2)根据R1表中采集的样本通过索引在表R2中找到符合连接谓词的所有元组进行连接,得到连接结果;
(3)之后根据连接结果进行区间估计,若符合精度要求则停止Index Ripple Join算法并返回结果,若不符合连接结果则重复上述过程直到符合精度要求为止;
步骤S3中通过中心极限定理计算多表连接置信区间公式如下:
给定一个从表T中采集的样本集S,样本集的大小是k,令函数f是聚集操作,则在样本集中包含一系列的独立变量f(x0),f(x1),…,f(xk-1),假设f(x)的期望是μ,方差是δ2,根据中心极限定理理论,总体的均值服从以μ为均值,δ2为方差的正态分布,因此通过计算可以得到总体的统计量的置信区间为公式(3):
其中参数c是与置信度有关的常量,当置信度≥99%的时候,c值为2.58,当95%≤置信度<99%时,c值为1.96;当90%≤置信度<95%时c值为1.64;
参数n指总体个数,由于Index Ripple Join仅从1张表中采样,因此n指被采样表中的元组个数;
参数μ通过样本能够得到,计算公式如下:
其中k为样本个数,对于参数δ2,依然能够通过样本获得:
通过公式(4)和(5)即可得到参数μ以及δ2的值,将这些参数带入公式(3)能够得到统计量的置信区间,公式(3)、(4)、(5)对于多表连接的Index Ripple Join依然适用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810649787.2A CN109062949B (zh) | 2018-06-21 | 2018-06-21 | 一种提高在线聚集中多表连接查询效率的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810649787.2A CN109062949B (zh) | 2018-06-21 | 2018-06-21 | 一种提高在线聚集中多表连接查询效率的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109062949A CN109062949A (zh) | 2018-12-21 |
CN109062949B true CN109062949B (zh) | 2021-10-01 |
Family
ID=64820735
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810649787.2A Active CN109062949B (zh) | 2018-06-21 | 2018-06-21 | 一种提高在线聚集中多表连接查询效率的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109062949B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110008238B (zh) * | 2019-03-12 | 2021-04-27 | 北京东方国信科技股份有限公司 | Nlj改进表连接方法及基于该改进方法的数据查询方法 |
CN111078734B (zh) * | 2019-12-25 | 2023-08-08 | 天津南大通用数据技术股份有限公司 | 一种通过创建内部临时表索引提高start with查询性能的方法 |
CN113448969B (zh) * | 2021-08-30 | 2022-02-18 | 阿里云计算有限公司 | 数据处理方法、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7085769B1 (en) * | 2001-04-26 | 2006-08-01 | Ncr Corporation | Method and apparatus for performing hash join |
CN102663117A (zh) * | 2012-04-18 | 2012-09-12 | 中国人民大学 | 面向数据库与Hadoop混合平台的OLAP查询处理方法 |
CN103699696A (zh) * | 2014-01-13 | 2014-04-02 | 中国人民大学 | 一种云计算环境下的数据在线聚集方法 |
-
2018
- 2018-06-21 CN CN201810649787.2A patent/CN109062949B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7085769B1 (en) * | 2001-04-26 | 2006-08-01 | Ncr Corporation | Method and apparatus for performing hash join |
CN102663117A (zh) * | 2012-04-18 | 2012-09-12 | 中国人民大学 | 面向数据库与Hadoop混合平台的OLAP查询处理方法 |
CN103699696A (zh) * | 2014-01-13 | 2014-04-02 | 中国人民大学 | 一种云计算环境下的数据在线聚集方法 |
Non-Patent Citations (1)
Title |
---|
海量多维数据的存储与查询研究;宋爱波等;《计算机工程与应用》;20160405;第25-31页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109062949A (zh) | 2018-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3117347B1 (en) | Systems and methods for rapid data analysis | |
Shao et al. | An efficient similarity search framework for SimRank over large dynamic graphs | |
Cormode et al. | Histograms and wavelets on probabilistic data | |
CN109062949B (zh) | 一种提高在线聚集中多表连接查询效率的方法 | |
US20230177078A1 (en) | Conversational Database Analysis | |
US20120117054A1 (en) | Query Analysis in a Database | |
Zoumpatianos et al. | Data series management: Fulfilling the need for big sequence analytics | |
Kim et al. | Learned cardinality estimation: An in-depth study | |
Yun et al. | Fastraq: A fast approach to range-aggregate queries in big data environments | |
EP3654196A1 (en) | Improved systems and methods for database analysis | |
Luo et al. | Efficient similarity joins on massive high-dimensional datasets using mapreduce | |
Riondato et al. | The VC-dimension of SQL queries and selectivity estimation through sampling | |
EP4071629A1 (en) | Distributed pseudo-random subset generation | |
EP4071626A1 (en) | Improved approximate unique count | |
Lin et al. | BigIN4: Instant, interactive insight identification for multi-dimensional big data | |
CN113918605A (zh) | 数据查询方法、装置、设备以及计算机存储介质 | |
Kalavri et al. | Block sampling: Efficient accurate online aggregation in mapreduce | |
US20230394031A1 (en) | Generating Object Morphisms During Object Search | |
Kulessa et al. | Model-based approximate query processing | |
Mishra et al. | A lightweight online framework for query progress indicators | |
MahmoudiNasab et al. | AdaptRDF: adaptive storage management for RDF databases | |
Liu | Approximate Query Processing. | |
Tao et al. | Performance analysis of R*-trees with arbitrary node extents | |
Wang et al. | Improving online aggregation performance for skewed data distribution | |
Sahal et al. | Big data multi-query optimisation with Apache Flink |
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 |