Big Data是近年在云计算领域中出现的一种新型数据,传统关系型数据库系统在数据存储规模、检索效率等方面不再适用。目前的分布式No-SQL数据库可以提供分布式数据存储环境,但是无法支持多列查询,本文设计并实现分布式海量结构化数据存储检索系统(MDSS),系统采用列存储结构,采用集中分布式B+Tree索引和局部索引相结合的方法提高检索效率,在此基础上讨论复杂查询条件的任务分解机制,支持大数据的多属性检索、模糊检索以及统计分析等查询功能。
引言
Big Data是近年在云计算领域提出的对数据的加载效率、存储规模以及数据的检索效率有很高要求的应用场合,通常数据的加载效率在Mb/s甚至Gb/s量级,数据的存储规模在TB甚至PB规模,本文称这种模式为“大数据集”管理。大数据集的一类重要应用针对结构化数据的存储与检索。典型的应用如海量日志、网络报文以及web2,0框架下的SNS,电子商务,数据挖掘等应用场合。传统的RDBMS由于数据一致性的约束,在管理大规模数据集存储条件下,在数据更新、局部数据失效以及系统扩展性等方面工作效率低下。目前的解决思路是:通过放宽对于数据一致性的要求,取消复杂的关联查询,结合具体的应用场景,提高系统的可用性。但是由于大量的记录存放于同一个表空间中,会达到数十亿条甚至上百亿条记录的规模。在如此大规模数据存储条件下,如何高效的实现数据的存储、检索都面临着新的挑战。
Google对这一问题进行深入分析,结合Google的业务背景,提出Bigtable数据管理方法,建立列存储数据结构,提供基于Row-Key的数据检索接口。此后,业界也纷纷提出分布式结构化数据存储管理模型,也称为No-SQL(Not Only Sql)数据库。典型的No-SQL数据库包括Dynamo,Cassandra, PNUTS,Hbase以及Hypertable等:但是目前的海量结构化数据管理系统对于数据检索的多属性支持较弱,通常仅提供基于Key的读取GET和写入PUT操作,不具备多属性查询,数值统计、分析等复杂的查询功能。
目前基于Hadoop提出的数据仓库工具HIVE、PIG等,可以支持复杂的查询条件,但是不适用于流数据的高效存储与检索。如HIVE仅支持文本文件的批量导入,不支持流数据在线频繁加载操作。在复杂条件的检索过程中HIVE会把查询条件分解成多个MapReduce任务,每个Map过程以及Reduce结果都要把文件写入到集群文件系统中进行缓存,导致系统检索效率低,不适用于流数据的高效存储与查询。
针对该问题,本文基于Hadoop建立面向结构化流数据提出具有在线数据加载和快速检索的分布式数据存储系统MDSS(Massive Data Storage System),建立二维表空间数据管理模型,重点解决数据的分布存储与复杂条件的快速查询问题。
1 MDSS系统工作原理
“大数据集”要求较高的数据加载效率、数据存储效率以及数据检索效率,目前主要的解决思路是利用多机协同的分布式存储环境提高系统的处理效率。MDSS分布式系统结构如图1所示,系统包括三个部分:加载机集群、查询机集群、元数据节点集群以及存储节点集群。
图1 MDSS系统结构图
加载机集群:整个系统的数据加载端。可以以进程为单位,在多台设备上同时建立多个并发数据加载客户端,通过并发加载提高系统整体加载效率。在MDSS中,加载机集群同时缓存近期入库的数据,经过固定的时间周期,把缓存数据通过Gb Ethernet写到数据存储管理装置中。
查询机集群:用户在查询机上发出查询指令,查询机根据元数据节点集群保存的元数据信息,向存储节点分发查询任务,最后汇总多个存储节点返回的查询结果,提交给用户;
存储节点集群:持久存储长期保存的历史数据。把数据源进行分块存储,通常把一次或几次从加载机刷新到集群中的数据作为数据分块。
元数据节点集群:用来协调整个集群的工作,查询子任务的并发执行,保存整个系统工作所需的元数据信息。元数据节点集群存储的元数据包括:系统节点状态信息;索引分片具体的存储位置信息;表空间元数据、每个表空间的一些辅助信息以及系统的工作日志等。MDSS系统主要支持分布式的数据存储和检索,具体数据查询流程如图2所示。