基于多级列式索引的海量数据高效查询设计

2016-05-16 02:03杨淙钧艾中良刘忠麟李常宝
软件 2016年3期

杨淙钧+艾中良+刘忠麟+李常宝

摘要:伴随海量数据存储、处理技术的发展,数据中心中积累了大量的格式化历史数据,此类数据呈现出数据规模庞大、被查询频次低和查询内容规律不确定等特点,而当前以文件为操作对象的系统在查询此类数据时主要采用分布式计算引擎对数据进行全局遍历,存在处理时间长、系统资源消耗高等问题。因此,本文提出了一种基于列式多级索引的海量数据高效查询方法,使得查询过程中只有承载相关数据的节点参与计算,大幅降低了系统资源消耗。实验表明,本文方法在用于大规模历史数据内容查询时,相对于较主流的文件系统查询技术有明显的效率提升。

关键词:海量数据;文件系统;索引机制

中图分类号:TP314 文献标识码:A DOI:10.3969/j.issn.1003-6970.2016.03.020

0引言

随着大数据技术的发展以及互联网+应用模式的不断推广,通过分析全信息要素获取更加准确信息的数据分析模式被各领域广泛采用,许多领域中存在大量信息采集原始数据并积累了大规模的历史产品数据,其中包含了大量有价值的信息要素,目前该类数据主要采用文件系统存储,当前大数据技术仅支持对分布式文件系统中的数据进行全量处理,而数据调研分析是制定海量数据处理流程的前提,当前技术无法有效支撑数据调研阶段内容分析。针对这一问题,本文设计了较为完善的数据查询系统,通过建立合理的索引、数据模型为分布式文件系统构建高效内存查询功能。

本文首先介绍国内外研究现状,针对海量格式化的历史数据查询问题,详细分析当前技术的局限性;然后阐述基于列式多级索引的海量数据高效查询方法,在此基础上进行系统实现,最后通过实验对本文方法的有效性进行验证。

1工团国内外研究现状

随着对海量数据的存储及使用的需求得增多,许多企业、组织对海量数据的存储、查询做出了研究,并开发出相应工具,例如Apache SoftwareFoundation(AFS)的HBase和Hive项目,Google公司开发的Dremel等。

Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC上搭建起大规模结构化存储集群。由于HBase使用了基于RowKey进行检索的机制,因此无法在不指定RowKey的情况下针对列簇中的值直接进行条件查询。

Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据。Hive提供了一套类数据库的数据存储和处理机制,并采用HQL(类SQL)语言对数据进行自动化管理和处理。Hive经过对语句进行解析和转换,最终生成一系列MapReduce任务,通过执行产生的任务完成对数据的处理。由于Hive需要使用MapReduce任务对数据进行遍历查询,因此查询效率低。

Dremel是Google的“交互式”数据分析系统,可以处理PB级别的数据,并将处理数据的时间缩短到秒级。Dremel并非是MapReduce的替代品,而是作为MapReduee的有力补充,常常被用来处理MapReduee的结果集或用来建立分析原型。由于Dremel采用了基于内存的查询方式,受集群内存的限制,因此难以将非高频使用的数据全部导入作为待查询数据。

2基于列式多级索引的海量数据高效查询方法

在海量数据环境中,由于数据规模的原因,需要将数据存储于分布式文件系统中,而直接基于文件的查询方式不仅查询效率低而且系统资源消耗大,因此本文设计了基于列式多级索引的海量数据高效查询方法。

本章首先介绍了数据组织方式以及列式多级索引模型,其次介绍了索引的更新方式,最后具体的介绍了基于列式多级索引的海量数据高效查询的流程。

2.1数据组织

由于海量数据环境中,单机节点的存储系统无法存放所有的数据,因此本课题所设计的查询系统将数据存储在HDFS(Hadoop Distributed File Sys-tern,Hadoop分布式文件系统),以展开基于文件的查询。

虽然HDFS可支持非常大的单个文件容量(TB级),但鉴于海量数据查询系统无法避免对数据进行全量或局部检索,因此在本文所设计的查询系统中不适于采用单个或数个大文件(GB级及以上)存储被导人数据,通过减小单个数据文件大小以达到缩小单次文件检索的数据量的目的。

基于此原因,在将数据导人该查询系统时,需要对待查数据分文件进行管理,即进行文件切片操作,以严格控制单个文件的大小以及文件个数,用于存储数据的文件结构大致如下图所示:

在本系统建立的索引中有一个指向待查数据中对应记录的指针,为使该指针能够快速定位记录位置,我们为待查数据中的每一个记录隐身地生成一个RowID。RowID由文件全局路径以及行号两部分信息组成,其形式为RowID=。基于该形式的RowID,在记录定位时可以先通过文件全局路径定位结果记录所在的文件,再通过行号直接获取记录的完整信息。

2.2列式多级索引模型

本文通过对历史数据特点的分析结果,建立基于分布式文件系统的全属性列式多级索引模型。本节从全属性列式索引和多级索引两个角度描述索引模型。

在海量格式化数据的环境下,数据往往具有较多的属性,各个属性之间关系相对较弱,因此针对多个属性的联合索引实用价值较低。而且由于数据规模方面的原因,会导致联合索引创建和维护成本较高。因此本课题采用单属性索引。

在实际的查询场景中,结构化数据中的任意一个属性都有作为筛选条件进行查询的可能性,为了满足这一条件,本文所设计的系统针对数据中的所有属性建立索引。

基于以上两点原因,采用了全属性列式索引的机制。使用这种机制可以保证在处理对任意属性作为筛选条件的查询请求时都可以高效的完成,并且通过分列建立索引的方法降低索引的创建和维护成本。