曹丽蓉
(兰州工商学院 信息工程学院,甘肃 兰州 730000)
信息时代的来临,促使互联网有了突飞猛进的发展,同时带动数据数量出现了指数级的增长。面对数量巨大且复杂的数据,如何实现高效、合理的管理与存储,已经成为当前重点研究的内容之一。
文献[1]提出利用X86建立分布式存储平台,对计算节点和存储节点进行多节点冗余处理,该方法存储少量的数据较为有效,无法处理海量数据;文献[2]利用DOSS(distributed optimized storage strategy)提出了一种新型分布式存储方法,该算法并未考虑到冗余处理,没有进行过滤处理,在一定程度上增加了存储压力。
HBase分布式数据库作为云计算核心技术Bigtable的开源分布式实现平台,可以帮助用户轻松地完成数据整理,进而搭建分布式计算平台,凭借集群的计算和存储能力,实现海量数据的有效管理与存储。但目前对HBase数据库的存储方法研究有限,因此,本文对其展开深入研究。从逻辑模型和物理模型两方面对HBase数据库进行分析,根据其存储特点建立了空间数据模型和索引机制,以此来提高算法整体的读写效率和存储效率;利用网格金字塔模型建立了数据存储模型,通过分析每个网格索引ID值,得到网格内数据的属性信息和拓扑关系,减少用户读取时间。不仅如此,本文还设计了列族过滤,将残缺不全、重复的数据直接过滤掉,在一定程度上节省了存储资源。在仿真试验中,HBase数据库生成9个节点,实现了试验数据的快速写入,从而验证了本文方法的有效性和可行性。
HBase作为一个同时支持结构化和非结构化数据存储的分布式数据库,可以实现海量数据的实时读写。通常情况下,HBase数据模型分为逻辑模型[3]和物理模型。
HBase主要以表的形式存储数据,表格中的“列”代表列族(Column Family),行和列组成的存储单元为一个元素信息(Cell),元素信息可以有多个不同的版本,利用时间戳(Time Stamp)进行标明。由于HBase存储数据的特点为稀疏存储,所以表格中的列有时会出现空白的情况。HBase逻辑数据模型如表1所示,每个数据都有其对应的时间戳,时间戳的数字越大,说明数据越旧。
表1 HBase逻辑数据模型
HBase是以列存储为主的稀疏行/列矩阵,从物理模型角度分析,先将逻辑模型中的行分割,再按照列族的方式存储。将表1中的r1行转换为物理模型,如表2所示。
表2 HBase数据物理模型
数据之间存在着错综复杂的空间拓扑关系[4],为了后期HBase可以实现高效地管理与存储,需要分析数据的对象模型,建立合适HBase的空间数据模型。同时,为了得到理想的读取效率,还需建立数据的空间索引机制。
参考目前众多关于空间数据对象模型的研究,最常用的就是OGC简单要素模型,如图1所示。该模型将空间实体与空间参照系联系在一起,利用WKB标准[5-7],对HBase的字符串进行处理。WKB利用字节对象来描述几何对象,在一定程度上提高了存储效率和读写效率。同时,WKB中含有2种数值类型:uint32和double,二者分别存储节点数和节点坐标值。
图1 OGC简单要素模型
为了提高分布式数据的查询效率,需要对数据建立空间索引机制,本文通过网格空间索引来实现。首先,根据存储数据规模的大小,建立不同的网格;其次,利用Hilbert空间填充曲线得到每个网格的索引ID值。本文设计的空间数据索引表结构如表3所示。其中,IDS表示1个网格内包含的所有空间数据ID,2个ID之间通过逗号隔开。
表3 空间数据索引表结构
参考索引表结构,结合Map Reduce编程模型并行构建数据空间索引,如图2所示。Map Reduce共包含2个阶段:Map阶段和Reduce阶段。在Map阶段,Map函数获取数据的空间要素信息,计算该条信息所在的所有网格索引ID,并将索引ID作为Key、空间要素信息的ID作为Value,存储到HBase数据库中;在Reduce阶段,利用Reduce函数对Map阶段计算得到的索引Key-Value进行合并整理与排序,并将结果存储在索引表中。
图2 基于Map Reduce编程模型的空间索引机制
Map Reduce编程模型最大优势就是可以将网格索引ID的计算过程,同步到多台计算机上同时处理,这样既减少了单台计算机的占用内存,也提高了算法的整体计算效率。
本文利用网格金字塔模型来构建数据存储模型。该模型可提取得到数据的多尺度层级结构特征[8-10],用户在查找数据时只需找到特定的空间区域、属性特征即可直接访问。
将数据的瓦片大小设定为2p×2p(p=0,1,2,…),网格金字塔模型的层数为L=min(L1,L2),满足
(1)
(2)
式中:m表示数据瓦片的空间位置点。
通过上述计算,得到不同层级的数据块,利用均匀网格法对这些数据块进行分类处理。在分类过程中,当数据瓦片的大小小于2p×2p时,将其视为“尾块”,重新计算其大小TailX×TailY。TailX和TailY可通过下式计算得到
(3)
式中:n表示“尾块”的空间位置点;k表示数据瓦片在金字塔中的层级;mod表示取余函数,本文中2p=128。
金字塔模型中每一个层级的数据都包含了3类信息:数据瓦片所在的层级k,数据瓦片的空间位置点m,数据瓦片的横向跨度TileSpanX和纵向跨度TileSpanY。TileSpanX和TileSpanY通过式(4)计算得到,即
(4)
根据金字塔模型每一个层级的数据特征,本文设计了基于HBase数据库的存储图层表结构,如表4所示。
表4 数据图层表结构
表4中,所有数据均以字符串的形式存储,用户读取时需要进行相应的转换。金字塔的所有层级都有对应的表,各个表之间没有任何联系。attribute、coordinate、topo分别表示数据的空间列族、属性列族、拓扑关系列族。其中,属性列族可以有多行,每一行代表数据的一种属性。
基于HBase数据库的图层数据字典表结构如表5所示。表5体现了数据的属性信息和拓扑关系,便于用户快速查找。与数据图层表结构相同,字典表中的数据也是字符串的形式,读取时也需要进行转换。
表5 数据图层字典表结构
HBase数据库还具有region技术,通过分析写入数据量的大小,将其划分为若干个节点,每个节点为1个分布式结构体,共同完成数据的计算与处理,提高存储效率。
为了避免一些残缺、多余的数据被重复存储,节省存储资源,本文设计了过滤列族,经过过滤处理后再进行存储。在过滤列族中,数据瓦片的中心经纬度坐标(MidTileX,MidTileY)计算式为
(5)
式中:(x,y)表示数据瓦片当前所处的网络坐标点;(Xmin,Ymin)表示数据瓦片的起始经纬度坐标;(TileSpanX,TileSpanY)表示层级中数据瓦片的横纵坐标跨度。
过滤列族设计如表6所示。
表6 过滤列族设计
为了验证本文方法在实际应用中是否合理有效,利用SPSS统计软件对本文方法以及引言中提到的文献[1]、文献[2]方法展开了对比仿真试验。试验数据为互联网采集数据,共21 548 621条,总大小约213 GB。根据数据量,HBase数据库生成9个节点。试验设备采用的是NVIDIA GeForce GTX 1080TI,处理器为Inter i7@2.40GHz×6(6核),内存大小为16 GB。
利用本文方法将所有数据划分为3个层级,第 1 个层级有数据4 126 846条,第2个层级有6 524 567条,第3个层级有10 897 208条,大小分别为40、65、108 GB。首先对3个层级数据进行入库试验,结果如表7所示。
表7 数据写入HBase时间
由表7可以看出:随着层级中数据量的不断增加,写入HBase数据库的速率也在不断增加,这是由于减少了单位数据量的写入;与此同时,数据量的增加写入耗时也在不断增加,这是由于数据量越大,分割的时间就越长,所需的耗时就越多。
接下来验证节点数量的多少与写入时间之间的关系,试验结果如图3所示。
图3 节点数量与写入时间关系
由图3可以看出:随着节点数量的不断增加,写入HBase数据库的时间在不断减少,且下降幅度越来越大,最终趋于0。这是由于节点数量较少时,单台服务器的工作负荷加大,使得计算效率降低。
由此可得出结论:选取合适的节点数量尤为重要,节点过多导致计算资源浪费,节点过少则不能取得理想的存储效果。本文方法取得的节点数量正好完成了数据的存储,且没有浪费计算资源。
为了验证本文方法的存储效率,与文献[1]、文献[2]进行对比仿真试验,结果如图4所示。
图4 3种算法存储效率对比
由图4可以看出:随着数据量的不断增加,文献[1]方法花费的存储时间增长迅速,在60×10-4条数据时达到了最高,为80 s;文献[2]方法次之,为68 s;本文方法仅仅花费46 s。这是由于本文方法采用的分布式存储模式,通过并行的方式将任务分配给多个服务器,共同完成存储任务,所以效率较高。由此可以说明,本文方法在海量数据存储方面具有一定的优势和可行性。
本文利用HBase数据库稀疏列存储的特点,提出了一种新的分布式数据存储方法。利用网格金字塔模型建立了数据存储模型,并设计了空间数据模型和空间索引机制,利用并行的方法多个服务器同时处理数据,使算法整体的计算速度和存储效率得到了大幅度提升。在仿真试验中,HBase根据数据量的大小自动生成了9个节点,实现了数据的快速写入。同时,与其他方法对比,本文方法具有更快的存储效率。