论文部分内容阅读
面向事件流应用的大规模数据密集型系统得到了越来越广泛的应用,本文在分析事件流应用特征的基础上,展开了查询优化的研究。大规模系统的查询优化,不仅要加速查询的执行过程,更需要在事件流数据生命周期的各个阶段进行优化,包括对数据写入、在线分析、查询处理和查询结果处理四个阶段的优化。
1.针对数据写入,提出了多种直接或间接提高查询性能的优化方法:(1)基于事件流数据的有效分类和划分的存储优化的方法;(2)针对海量数据的分组和去重查询,提出了自适应的基于Hash和Histogram的数据划分策略;(3)针对全复制的事件流配置数据的写入一致性控制和性能的优化方法;(4)提出了对带索引的事件流数据的高速写入和乱序到达情况的优化方法。多个实际系统中的应用表明,这些优化技术对于平衡数据量,降低系统负载,提高查询性能效果显著。
2.针对在线分析,开展了基于热点事件访问的查询请求预测的研究。首先分析了实际系统中的查询请求的分布特点,得出热点事件访问的特性。在此基础上提出了一种查询请求预测系统的设计,包括查询请求的分解,两级查询操作预测算法及其改进,查询请求的预执行机制。对预测系统的执行代价进行了分析,并提出了一种自适应的参数调整机制。在生产系统DBroker上的测试表明,和传统的Cache预取和内存LRU页面替换算法相比,预测算法能够达到更好的预测准确率和有效率,而采用合适的预执行策略,对于大部分预测命中的查询请求,有数倍的性能提升。
3.针对查询处理,对传统的两阶段的查询处理引擎进行了优化,将查询处理改成粗粒度的流水处理方式,省去了物化中间结果的过程。此外针对大规模系统中各数据库节点执行时间存在差异的情况,提出了异步方式的改进方法,避免了多个节点的同步等待的开销。测试表明,和传统的两阶段查询处理相比,流水方式的并行查询处理极大地减少了查询的响应时间,而异步方式更进一步提高了流水线的处理效率,对于中间结果较大的查询请求,性能的提升超过了100%。
4.针对查询结果处理,研究了多种查询结果的优化方法,包括提出多种表现形式提高查询结果的可理解性;提出了模板查询、定向输出查询结果、采用查询结果处理计划等简化查询处理步骤的优化方法;提出了对具有条件规则和时间规则特征的规则查询任务的优化方法;最后给出了各种优化方法的可配置接口的设计。这些优化的方法应用在了DBroker系统中,节省了用户大量的日常工作.大幅提高了系统的生产效率。
本文的工作以面向网络安全监控的大规模数据密集型应用系统DBroker为背景,开展了多项优化研究,大部分成果已经应用在实际系统中,有效地提高了系统的性能和生产率。