MapReduce中迭代查询的最优化
摘要:
提出术语OptIQ:在分布式环境中迭代查询的一种查询优化的方法。(全自动化的)
用到的方法:view materialization and incremental view evaluation.
物化视图和增量视图评估
作用:减少了不同迭代过程中的重复计算
1. INTRODUCTION
几种新的技术:
Spark Haloop REX 查询优化都不是自动化和框架化的,需要程序员指出那些数据需要重用以及手动的指定那些数据如何存储。
OptIQ:为辨别迭代查询中出现的重复计算提出了一个总体框架,应用了在传统数据库领域中的物化视图和增量试图评估和编译器领域中的程序分析和转换的技术。
流程:1、把迭代查询分为变和不变的视图,并且不变的视图将会用到下次的迭代过程中去。
2、通过跳过评估那些收敛的元组来增量化变化的视图。
2、为迭代查询定义SQL语句
包括三部分
Local table 保存当前的迭代中的数据 存在本地磁盘中 let语句
Global table 保存上一次迭代的数据 存在分布式文件系统。set语句
判断是否收敛时跟新表中(update table)的所有的元组都要进行比较。
R和S是输入表,schema(R)表示R表的属性,T(list)表示T表中有一个list属性,表示一个命题公式。
投影操作(projection)投影输入表中特殊的属性集
选择操作(selection)选择满足输入表中满足的元组
连接操作(join)提取两个输入表的叉积满足^2的元组
Group-by操作重组元组和计算聚集函数
PageRank:
三个表,定义的查询语句如下
Src当前节点 Dest 目的节点 Score相当于PR值 count表示节点的出度
K-means:
两个表
Point数据点,Centro聚集的中心点
定义的语句
3、查询优化:
view materialization and incremental view evaluation.(物化视图和增量视图评估)
物化视图重用了未修改属性子查询的结果
增量视图评估重用了未修改元组的结果
为了进行物化视图-------表分解
把表分解成变和不变的视图,重复使用不变的视图。
为了进行自动的增量--------增量表(delta table)
根据收敛条件减少元组数目。
OptIQ概述图
如何物化视图
1、把update table 分解成变和不变的视图,重写迭代查询语句,把update table 用变化的视图表示(变和不变的视图有一个相同的视图,最后可以用来进行join操作)
2、物化查询过程中不变的视图,重写和简化迭代过程重要使用的不变视图
如PageRank
将Graph(src,dest,score)分解成 VI(src,score)和IT(src,dest)
子查询的提升(在上面的基础上继续优化)如利用分解的表在形成另外一个可以物化的表IT_count
IT_Count = select IT.src,IT.dest,Count.count
from IT, Count
where IT.src = Count.src.
VT表和score表可以相互替换
loop invariant code motion(循环不变量)
物化视图最后优化的语句
Automatic incrementalization
1、跟新操作Update operations
Update操作执行的频率大于Insert和delete操作
2、检测增量表Detecting delta tables
3、得到增量查询Deriving incremental queries
刚开始比较常规的语句
T是update table,q(T)相当于查询语句,φ(ΔT )是收敛条件
set T = q(T ⊕ ΔT )
假设:q(T ⊕ ΔT) = q(T) ⊗ q(ΔT ).
Dscore是score表的一个增量表
研究聚集函数中的增量计算,能够很大程度的提高性能
Sum函数
Count函数和sum函数有相同的分布规律,average函数可以分解为count函数和sum函数
Max和min函数
加了incrementalization之后的语句:
实验
Hadoop和spark上使用OptIQ
PageRank
反应时间和迭代次数减少
K-means
View并没有增加效率,优化过程中磁盘读写增加了。
物化视图: 物化视图(Meterialized View)提供了强大的功能,可以用于预先计算,并且保存表连接或者表聚集等耗时比较多的操作的结果,这样子,在执行查询的时候,就可以避免这些耗时的操作,从而快速的得到结果。
空间换时间
如何能够保证IO开销,即消耗空间换取的时间能不能抵消掉读磁盘产生的IO开销。