论文部分内容阅读
基于关系型数据库的MPP(Massive Parallel Processing,大规模并行处理)数据库因其对SQL标准的完善支持和大规模并行处理的方式,为大数据处理和分析提供一种很好的解决方案。但由于其底层使用的是本地文件系统,因此不能完全满足海量数据存储的要求。在海量数据存储和管理上,分布式文件系统因其在可靠性、可用性和可扩展性上的良好表现越来越多的被采用。因此,基于分布式文件系统的MPP数据库成为了目前的研究热点。在关系型数据库中,扫描操作几乎是所有查询的最底层操作。在执行查询时往往会进行数据扫描操作,由查询引擎调度负责执行查询操作的执行单元来扫描存储在分布式文件系统上的数据。在执行数据扫描操作前,需要对执行单元进行调度,以便确定对哪些数据块进行扫描。在执行数据扫描操作时,不同的执行单元根据调度结果扫描各自的数据块。由于数据块在分布式文件系统中的分布情况各有不同,当执行单元和待扫描的数据块不在同一个物理节点上时,将通过网络读取,产生网络延迟,进而影响查询的执行效率。本文的研究围绕在基于分布式文件系统的MPP数据库中如何更有效的进行扫描操作的调度上。本文选取了一款主流的MPP数据库HAWQ作为研究对象,讨论在HAWQ系统中查询的扫描操作调度问题。本文首先针对HAWQ系统中扫描操作调度的过程,对扫描操作调度问题进行了详细的分析和定义,使用形式化的描述建立了调度问题的模型,总结出这个问题中的关键因素,包括数据块的读取代价、节点的工作负载,以及执行单元和数据块的分配关系。目前的调度方法是基于文件中数据块连续性,但是这种方法仅关注最大化读取数据本地副本,未考虑节点的工作负载的情况。因此,本文提出了一种基于节点负载的扫描操作调度方法。这种方法同时结合了数据本地性和节点负载两方面进行考虑,一方面通过本地读分配阶段保证调度结果满足良好的数据本地性,另一方面基于节点的实时工作负载对中间调度结果进行重分配调整,以达到减少数据扫描操作完成时间的目标。本文在模拟实验中以数据本地性和完成时间作为衡量指标,评价了本文提出的方法和目前已有的方法在这两项指标上的综合性能。实验结果表明,本文提出的基于节点负载的调度方法综合性能更好,在9种测试情况中都能产生所需完成时间更少的查询调度策略,平均优化达25%,达到预期目标。