基于MapReduce的结构化查询机制的设计与实现
【摘要】:随着Web2.0网络应用和云计算服务的兴起和发展,海量数据的存储和处理是其主要的特性,新型互联网应用的新特性对传统的数据管理技术提出了新的挑战。传统的关系型数据管理系统在应对海量数据和急速增长的数据时,遇到了难以克服的难题,海量数据存储和超大规模计算的特点,使数据管理技术关注的重点从一致性C(Consistency)、可用性A(Availability)转向了可用性A(Availability)和分区耐受性P(Partition Tolerance),即在扩展性和可用性方面提出了更高的要求。已有的新型数据管理系统很好的满足了这两方面的要求,相比关系型数据管理系统,它们只支持基于Key上的条件和范围查询,而基于多列的条件和范围查询是数据管理系统一个普遍的需求,而已有的系统主要是通过依靠MapReduce强大的运算能力来全表扫描来实现,使查询性能随着数据规模的增长而变得效率不高。针对多维查询效率低的情况,本文在设计与实现了一套大规模分布式结构化数据存储系统LDS3基础上,还设计了一种基于MapReduce的性能较高、可靠性较强的、低存储开销的分布式查询机制。整个分布式结构化数据管理系统的所包括的基本工作和主要特色:
1.在底层基于P2P的分布式存储系统的基础上,设计与实现了一套类BigTable的分布式结构化数据管理系统,主要包括:采用基于Linux C++设计了一套MapReduce的分布式计算框架和建立在这个计算框架上的分布式结构化数据管理系统。
2.通过将表数据的多个副本采用不同的存放格局来加速多维查询。初始创建表的时候需要指定行记录的主键,而在本系统中除了指定主键外,还支持在其他列上创建索引,然后将表记录按照主键和各索引列分别排序,并按照这个顺序进行物理存储。针对主键和索引列上的条件和范围查询,首先通过子表服务器与子表的映射关系,将结果集的锁定在尽可能少的子表上,由于表的副本是按照主键和索引列有序存储,进而将结果集定位在子表的某一段连续的表记录,最大程度上减少了查询过程中的表数据的随机访问次数。结合基于MapReduce的分布式计算框架(DVCP),并行的在表数据的各副本并行进行过滤查询。
3.通过设计与实现基于Bitcask的底层存储模型,相比基于MapFile的存储引擎,在效率和设计的复杂度方面具有明显的优势。