论文部分内容阅读
近年来,随着NoSQL数据库的飞速发展和大规模实践应用,越来越多的企业和研究机构,选择NoSQL数据库构建内部的高性能系统,以应对日益增长的内部业务需求和大数据的存储检索挑战。MongoDB便是其中一种优秀的NoSQL数据库,已被成千上万家企业和研究机构应用在一线生产环境中。和传统关系型数据库相比,MongoDB不基于关系代数,查询语句、索引类型与传统的关系型数据库有较大的差别,而查询语句的编写,索引设计的好坏,都是影响MongoDB查询性能的重要因素。因此如何根据MongoDB的查询特点、索引特点,对业务方Mongo DB的查询进行优化建议,成为了一个需要研究的问题。基于上述情况,本文以MongoDB慢查询日志为依据,采用流程分解、影响因素分析、语法检查、索引推荐等技术,设计并实现了对MongoDB的查询进行优化建议的系统。(1)本文首先对项目背景和用户需求进行了实地调研,重点分析了当前的优化流程和管控系统的业务背景。在此基础上,对MongoDB的查询处理过程进行了流程分解,从瓶颈资源、影响因素、优化方向三个角度对分解后的各阶段进行了分析。结合减少数据访问、返回更少数据等优化原则,最终确立了以查询谓词检查、索引评估、索引推荐、结果集数量分析作为管控系统的优化方向。(2)日志获取、判重与初步解析。系统首先读取MongoDB实例的慢查询日志,对单条日志记录,提取日志中的唯一性标识,计算对应的MD5值,利用缓存进行判重。将没有重复的原始日志保存到数据库中,接着对原始日志进行初步解析,提取关键属性,并对日志中的查询条件进行标准化处理,最后将初步解析结果保存到数据库中。(3)从查询谓词检查、索引优化、结果集数量分析三个方面,进行优化建议。利用初步解析结果,在查询谓词检查方面,对相关查询谓词进行语法层面的检查,兼容谓词和普通查询条件混用的情况。在索引评估方面,计算索引选择率,评估索引过滤能力,结合用户实例内存评估索引大小的影响,基于影响权重的原则进行最左前缀匹配评估和索引覆盖情况评估。在索引推荐方面,基于等值排序范围条件的索引建立原则,对集合进行索引推荐。在结果集数量分析方面,计算本次返回文档数量占总文档数的比重,结合语法层面投影限行谓词的检查,分析结果集返回数量的影响。系统最后将优化建议结果保存到数据库中。本论文最后对系统功能性和非功能性需求进行了测试,实验结果证明本系统能满足管控系统业务需求。本文从管控平台的角度,对MongoDB查询进行优化建议,具有一定的通用性,对相关运维平台查询优化系统的实现,具有一定的借鉴意义。