数据立方
我们以B+树的结构建立了字段的索引,每个B+树结构的字段索引相当于一个数据平面,这样一个全局数据表与其多个重要字段的索引就组成了一个类似于立方体的数据组织结构,我们称之为“1数据立方(DataCube)”。
基本信息
- 中文名
数据立方
- 外文名
DataCube
- 用于
数据分析与索引
- 类型
技术架构
架构介绍
数据立方(DataCube)是一种用于数据分析与索引的技术架构。它是针对大数据(big data)的处理器,可以对元数据进行任意多关键字实时索引。通过数据立方对元数据进行分析之后,可以大大加快数据的查询和检索效率。
数据立方是凌驾于数据存储层和数据库系统之上的,通过数据立方解析后,可以大大增加数据查询和检索等业务,可以让系统平台具备数据实时入库、实时查询、查询结果实时传输等优势。
主要应用于大数据处理的数据立方大数据一体机。
背景
随着计算机技术的发展,各领域数据的增长越来越快。这些数据来自方方面面,从搜集天气情况的感测器,接入社交媒体网站的指令,数码图片,在线的视频资料,到网络购物的交易记录,手机的全球定位系统信号等等。随着数据规模的急剧膨胀,各行业累积的数据量越来越巨大,数据类型也越来越多、越来越复杂,已经超越了传统数据管理系统、处理模式的能力范围,传统的串行数据库系统已经难以适应这种飞速增长的应用需求。在这种需求的驱动下,云计算中的MapReduce技术、并行数据库技术以及云计算与数据库相结合的技术应运而生。
在大数据的背景下,对大数据处理技术进行了探讨,将其分为三类:MapReduce技术、并行数据库技术和云计算与数据库相结合的技术。通过研究这些技术的架构、适用环境,提出了一种全新的云计算数据库--数据立方。
数据立方技术
云计算中的大数据处理技术--MapReduce
MapReduce计算架构把运行在大规模集群上的并行计算过程简单抽象为两个函数:Map和Reduce,也就是分解与规约。简单说,MapReduce就是“任务的分解与结果的汇总”。程序将大数据分解为多个数据块由Map函数处理,Reduce把分解后多任务处理产生的中间结果汇总起来,得到最终结果。适合MapReduce处理的任务特征为:待处理的大规模数据集可以切分为多个小的数据集,并且每一个小数据集都可以完全并行地进行处理。
图1介绍了用MapReduce处理大数据集的过程。一个MapReduce操作分为两个阶段:Map阶段和Reduce阶段。
图1 MapReduce处理大数据集的过程
在映射阶段,MapReduce并行计算架构将用户的输入数据切分为M个数据段,每个数据段对应1个Map任务。每一个Map函数的输入是数据段中的键值对集合, Map函数是用户继承MapReduce并行计算架构而编写的,Map操作调用此函数,输出一组中间结果,即键值对 集合。接下来,按照中间结果集合的K2将中间结果集进行排序,生成一个新的 集合,使得对应同一个K2的所有值的数据都聚集在一起。然后,按照K2的范围将这些元组分割为R个片断,对应Reduce任务的数目。在规约阶段,每一个Reduce操作的输入是一个片断,Reduce操作调用用户定义的Reduce函数,生成用户需要的键值对进行输出。
这种简洁的并行计算模型在系统层面解决了可用性、扩展性、容错性等问题,是非关系数据管理和分析技术的典型代表。MapReduce是面向廉价计算机组成的大规模集群设计的,其非共享结构、松耦合性和较强的容错能力带来了较强的扩展能力,同时,MapReduce在工业界被广泛应用,Google、twitter、Facebook、Yahoo等厂商对其进行了深度的改进和扩展。此外,MapReduce的存储模型能够存储任意格式的数据,Map和Reduce函数可以进行各种复杂的数据处理,这也使得程序员的负担加重,在对上层业务的开发效率上不如SQL简单。在相同的硬件条件下,对于有具体条件的查询来说,并行数据库的性能是远远超过MapReduce的,但是对于在大数据上的复杂统计业务来说,MapReduce在速度上会占有一定优势,MapReduce是为非结构化大数据的复杂处理而设计的,这些业务具有一次性处理的特点,此外由于采取了全数据扫描的模式以及对中间结果逐步汇总的策略,使其在拥有良好扩展能力和容错能力的同时也导致了较高的磁盘和网络I/O的负载以及较高的数据解析代价。
并行数据库技术
在上世纪80年代,数据库流行的同时并行数据库也开始起源,早期并行数据库(例如:Gamma和Grace)的基础架构被沿用至今,当前的并行数据库主要有Oracle的Exdata、EMC的Greenplum、Teradata和,这些数据库都支持标准SQL。并行数据库一般可以分为shared-nothing和shared-disk两种存储架构,如图2所示。这两种架构有各自的优缺点,在shared-nothing系统中,数据集被切分为多个子集,集群中每个节点分别存储。
图2 shared-nothing和shared-disk存储架构