论文部分内容阅读
身处在互联网和信息化的时代,我们周围每天都会产生大量的信息,伴随着身边的信息量呈爆炸式的形式增长,传统的关系数据库已经不能满足大数据量的处理,在这种信息量的增长趋势下,给我们传统的业务网站或者信息系统原本正常的功能带来了灾难性的后果,带来这种后果的主要原因不仅仅是因为数据规模的扩大,也与数据结构的变化有关[1]。相比于原有的关系型数据库,现在需要处理的数据大多数为非结构化的。目前的关系型数据库系统不但不能够处理非结构化的数据,同时也无法高效地处理大规模海量的数据,为此催生了许多非关系型数据库用来处理此类数据,其中HBase就是一种处理海量数据的非关系型数据库。HBase是基于Hadoop平台的一个大规模的、分布式的、面向列的开源数据库,在处理大规模、非结构化的数据方面表现卓越,但是HBase只提供通过RowKey主键去检索数据的方式,用户只能通过键查找数据库中的值,却无法根据值来条件筛选数据,在使用过程中多有不便。而且,HBase数据库还放弃了关系型数据库中的事务特性,二级索引机制和使用结构化查询语言SQL语句来检索数据等特点。而在许多的应用中,又有着需要根据具体信息内容来检索数据的需求,同时由于数据本身的复杂性和结构的不确定性,以及当前系统中的数据量越来越大,人们对系统的查询速度和准确性的要求不断提高,针对普遍的需求,开发者们希望HBase在保持原有高效处理海量数据特点的同时,增加复杂条件查询的功能,而本文正是要介绍一种基于HBase系统基础之上的复杂条件查询系统。本文在HBase的基础上,设计一个能够满足复杂条件查询的高性能系统。系统保持了HBase原有的特性,改进了易用性和实时性,并且增加了对SQL语言的支持,使系统更易于使用,并且在支持SQL语言查询数据的同时为了保证查询的效率,建立了二级索引,用于数据的实时查询。用户输入的SQL先经过本系统所设计的SQL转化引擎进行SQL命令解析,然后将解析出来的字段和关键字经过查询策划器对不同类型的SQL语句的处理流程进行规划,并将其转化为HBase API对数据进行操作,其中本文使用ANTLR作为SQL语句解析器。为了提高查询的效率,在数据上建立二级索引,并使用Coprocessor框架开发了属性条件删除功能和属性条件更新功能,还利用Coprocessor栏截Region的put,delete等操作,实时生成索引,同时本文还提供了使用MapReduce框架为已经存在表中的数据生成索引的功能。最后对本系统进行测试,与不同的实验条件作比较。并得出实验结果,本文所构建的系统能够支持SQL语句的查询,并且提供了良好的性能,可以在不失去HBase原有性能的基础上进行复杂条件的查询。