压缩数据上的关系代数操作算法.docx
《压缩数据上的关系代数操作算法.docx》由会员分享,可在线阅读,更多相关《压缩数据上的关系代数操作算法.docx(10页珍藏版)》请在冰豆网上搜索。
![压缩数据上的关系代数操作算法.docx](https://file1.bdocx.com/fileroot1/2023-2/9/fb485705-a7b1-4a53-8205-7e23c754b505/fb485705-a7b1-4a53-8205-7e23c754b5051.gif)
压缩数据上的关系代数操作算法
压缩数据上的关系代数操作算法
摘要:
针对在大数据管理中,在压缩的数据上无需解压即可进行相关操作的问题,在数据服从正态分布的前提下,根据列数据存储的特点,提出了一种新的面向列存储的压缩方法――CCA。
首先,通过对列数据的长度进行归类;然后,采用抽样的方法获得重复度较高的前缀;最后,使用字典编码进行压缩,提出了列索引(CI)和列实体(CR)作为数据压缩结构来降低大数据存储的空间需求,从而直接有效地在压缩数据上支持选择、投影、连接等基本操作,并实现了基于CCA的数据库原型系统――DDBMS。
理论分析和在1TB数据上的实验结果表明,该压缩算法能够显著提高大数据的存储效率和数据操作性能,与BAP和TIDC压缩方法相比,在压缩率分别提高了51%、14%;在执行速度上提高了47%、42%。
关键词:
大数据压缩;列索引;列实体;关系代数操作
0引言
在当今信息爆炸的时代里,每天都在产生着巨量的数据,如此巨量的数据如何存储,存储后如何进行高效的分析,这是一个亟待解决的问题。
磁盘存储器单位容量价格的下降使得人们能够用更低的成本存储更多的数据,但对于大数据来说仍然无法满足需求。
于是就出现了很多的云存储解决方案,但对于数据体量巨大的数据,在综合考虑安全性、实时性、传输性等方面的因素后,仍然未能得到广泛、全面的应用。
对于大数据的处理,一般情况下需要对数据进行过滤分析,并执行相应的操作以得到具体结果,例如对数据进行统计分析、机器学习、数据挖掘等,将现有的数据通过适当的算法进行筛选处理,最终得到相应的结果,其中相应的最基本操作即为代数操作。
在大数据上进行一系列基础且高效的代数操作,目前有两种解决方法:
一种是采用并行的方式,如采用Hadoop[1]解决;另一种是采用压缩技术。
本文主要对大数据上的数据压缩技术进行讨论研究。
对于压缩后的数据,通常需要整个数据完全解压后再进行计算,这也是采用压缩技术存在的瓶颈之一。
如何在压缩的数据上进行无需解压的相关操作,获得更好的压缩效率和压缩比等,都是当前大数据压缩处理技术中存在的挑战。
本文在数据服从正态分布的前提下,针对列存储数据的特点,根据数据value的长度,提出了列索引(ColumnIndex,CI)和列实体(ColumnReality,CR)压缩结构及数据压缩算法――CCA(ColumnCompressionAlgorithm),分析了压缩效率,并实现了基于CCA的数据库原型系统――DDBMS(DingDataBaseManagementSystem)。
通过理论分析和实验,与相关无解压代数操作算法进行了对比,实验结果表明CCA在压缩率和无解压关系代数操作效率上优于目前相关的无解压压缩算法。
1相关工作
文献[2]提出了BTF(BitTransposedFile)的文件结构,在科学与统计数据库(StatisticalandScientificDataBase,SSDB)上采用RLE(RunLengthEncoding)方法对Bitpartitions进行压缩,然后在压缩的Bitvector上进行查询操作,但只考虑了单表的查询操作,没有给出连接操作。
文献[3]提出了BAP(BitAddressPhysical)压缩算法,能够在SSDB上进行快速双向映射操作,比传统的位图法、RLE、Header压缩方法效果更好,但对于常量的比例有一定的要求。
文献[4]提出了在压缩数据仓库上的无解压聚集算法,给出了线性化和反线性化函数,能够实现联机分析处理(OnLineAnalyticalProcessing,OLAP),但未给出其他算法。
文献[5]提出了一种在压缩数据上进行Cube计算的算法,在压缩数据上实现了完全映射。
文献[6]提出了一种基于属性划分的海量数据高频度关系数据压缩存储方法TIDC(TupleIDCenter),实现了选择、投影、连接操作,但要求常量频度要在60%以上才能有较好的效果。
文献[7]提出了一种区级压缩模式,通过学习参照信息与当前区之间的相似性和差异性进行相关的压缩策略推荐方法,从而提高了压缩性能。
文献[8]对现有的字典压缩方法进行了总结;同时提出新的压缩方法,并与其他算法进行了比较,具有较好的效果。
文献[9]提出了在ERP(EnterpriseResourcePlanning)的多属性数据上采用CGK(CompositeGroupKey)的方式来进行压缩索引。
文献[10]提出了基于列存储的数据库管理系统CStore,它通过建立决策树来判定每一列应该采用何种压缩算法。
文献[11]对列存储数据的关键技术进行了相应的描述和总结。
综上所述,目前数据处理技术能够到达属性级别的无解压计算,但仍然需要进行BackwardMapping,故会增加查询处理时间。
目前在压缩数据上实现相关代数操作算法的有文献[6],但是其压缩算法对于常量比例的要求比较高。
本文提出的CCA在数据服从正态分布的条件下,主要采用对数据value的长度进行分类处理,生成CI和CR压缩结构,从而达到较好的压缩效果和查询效率。
2预备知识
本章描述相关的压缩数据上无解压计算的压缩算法,以及下文中所用的符号定义。
常见的压缩算法有RunLengthEncoding、HeaderCompression、BitMap、DictionaryEncoding、GolombCoding、HuffmanCoding等。
目前在数据库上常见的压缩算法有游程编码、头部压缩、位图编码、字典编码、哈弗曼编码、哥伦布编码等方法。
数据库的压缩一般在以下几个粒度中进行:
表、块、元组、属性、比特[7]。
下面简单介绍一下BAP、TIDC、CompositeGroupKeys等压缩、索引查找算法。
2.1BAP压缩算法
文献[3]提出了一种新的针对SSDB数据去重的压缩编码方法。
BAP将压缩去重的数据称为常量,其他数据叫作非常量。
压缩后的数据生成3个向量:
BV(BitVector)、AV(AddressVector)、PV(PhysicalVector)。
假设未压缩的数据为D=(d1,d2,…,dn)。
1)BV(BitVector)。
用来表示非常量在数据中出现的地方,非常量出现的位置用1表示,常量出现的位置用0表示。
常量设为C。
2)AV(AddressVector)。
用来表示非常量的个数与对应位置信息。
3)PV(PhysicalVector)。
用来记录非常量。
BV、AV、PV的形式化定义如下:
BV=(b1,b2,…,bi,…bn)ifbi=Cthenbi=0elsebi=1。
AV=(a1,a2,…,ae,…,am),a1=0,m为划分数,ae表示第e分区前的非常量个数。
PV=(p1,p2,…,pj,…,pk);1≤k≤n,pj≠c。
BAP压缩算法中有两个映射函数:
ForwardMapping和BackwardMapping。
第1个映射函数为给定AV,求PV;第2个映射函数是给定PV,求AV。
2.2TIDC
文献[5]提出的TIDC是基于划分的面向列存储的适合于海量高频度关系数据的压缩存储方法。
定义2高频度数据。
定义:
对经过属性划分后的某列数据,存在某一数值C,C的频度大于60%,则称此数据为高频度数据,称为常量。
TIDC将整列数据按照磁盘块大小划分为不均匀的子部分,然后使用非常量的TupleID数值即TupleIDValue(TIDV),与每部分的数据数量TupleIDNum(TIDN)来表示压缩后的数据。
TIDV、TIDN的形式化定义如下:
压缩前每个数据的大小为b,TIDV中TupleID和Value所占用空间分别为bID、b,TIDN中每个元素占用大小bTN,常量C的频度为f,磁盘块大小为B,则TIDC压缩算法的压缩比为:
n×b(n×(1-f)×(bID+b))/B)×(B+bTN
TIDC压缩算法时间复杂度为O(2n)=O(n)。
文献[5]在TIDC压缩算法上实现了无解压的选择、投影、连接等关系代数操作。
设TIDV被划分为每部分有m个元素的num个子部分,待投影元组集合大小为T,待投影属性集合大小为M,TIDN中元素的个数与m数值中较大的值为k,则关系代数操作的时间复杂度如表1所示。
2.3CGK
文献[9]在分析SAPERP应用数据的基础上,提出了CGK的索引方法,直接在字典压缩的数据上建立高效的索引。
该方法会生成两个数据结构,一个是keyidentifierlist,用K表示;一个是positionlist,用P表示。
KI中包含整数键值kid。
最终通过使用改进的B+Tree来达到快速查找的目的。
索引的创建过程如下,如图1(a)所示。
图1(a)中的编码对应图1(b)中的字典。
1)所有需要组合在一起的值组合成K的向量KU,在加上递增列表rowids(PU);
2)然后根据K排序,得到最终的K和P。
设数据表长为n,组合key的长度为k,查询的时间复杂度为O(klogn)。
2.4符号定义
具体的符号定义见表2。
3CCA
3.1压缩存储结构
CCA读取列文件,主要用于查询,不进行插入、删除、更新等CUD操作。
定义3列文件。
面向列存储的数据库中逻辑行的数据内容为R=(r1,r2,…,rN),按每一个ri为一个属性,按每个属性一个文件进行存储,成为列文件。
设列文件存储格式为(key,value),key是对应value值在列文件中的唯一值。
在数据服从N(μ,σ2)正态分布的条件下,列文件key值是从小到大递增的。
CCA采用CI和CR来存储(key,value)压缩后的数据。
CI(ColumnIndex),用来存储value的长度值与value长度值所在CR中的对应位置。
形式化定义:
CIi=(valuelength,indexkj),1≤i≤k,1≤j≤n。
CR(ColumnReality),用来存储value及key。
形式定义:
CRi=(value,indexcj),1≤i≤p,1≤j≤n。
CI和CR结构示意如图2(a)、(b)。
其中1≤k≤p≤n,每个valuelengthk的indexkj个数都不尽相同,每个valuep中的indexcj亦是如此。
3.2压缩存储方法
CCA扫描数据一遍即可获得压缩文件。
方法是扫描列数据的时候,读入每个元组(key,value),求出value的长度bi,到ci_buffer中查找是否长度bi已经存在,不存在则在ci_buffer中创建一个,存在则在ci_buffer中写入其在cr_buffer中的位置;同时把key值写入cr_buffer中value所对应的位置。
算法如下。
当列数据具有一部分相同前缀时,加入字典编码的方法能够更进一步地提高压缩效率。
首先对数据进行抽样,对于抽样到的数据,对数据每隔4个字符匹配一次前缀,对这些数据生成字典,使用4字节为其编码,总共支持4294967296种编码,在大多数情况下已经足够使用。
3.3压缩效率
读取列文件时,每个key占用的长度为实际长度,例如key=1234567,则占用7个字符,行数据库存储时,会预留每个key最长的宽度。
key存入CR时采用二进制方式写,故当数据量在4294967296条记录内时,可以采用4字节的二进制整数来存储key值。
当数据量大于上述条记录4294967296条此处语句不通顺,请作相应调整。
时,可以根据需求适当拓展存储key的字节数。
3.4无损性
定理1当列数据的值只有一种长度,且100%无重复时,μ>4时CCA就有压缩效果。
证明即k=1,p=n的情况,4(k+p)/(n-k)=4(1+n)/(n-1),n为大数据上元组的个数,故n1,故4(1+n)/(n-1)=4,即μ>4时,y>0,也就是CCA有压缩效果。
证毕。
3.5算法复杂度分析
算法CCA_Compression_1的时间复杂度为O(nlogp+n),其中定位到ci_buffer中对应位置需要O(∑kj=1kj),定位到cr_buffer中对应位置需要O(logp+∑pj=1cj),最坏情况即为无重复value,此时间复杂度为O(nlog(p+k)+n)。
算法CCA_Compression_2的时间复杂度为O(mlogm+nlogp+n)。
4基于CCA的关系代数操作算法
4.1选择操作
选择操作分为3种:
1)知key求value;2)知value求key;3)进行op操作,op∈{,≥},num为value存在的不同磁盘块个数。
算法5CCA_Select_ByKey(key)。
5实验
本文实现了一个数据库原型系统――DDBMS,在这个原型系统上实现了BAP、TIDC和CCA压缩方法,目前系统能对列数据文件进行批量载入压缩存储,以及选择、投影、连接等关系代数操作。
5.1实验设置
实验环境:
IntelXeonE3,3.30GHz四核,内存16GB,硬盘2TB,操作系统Windows7。
所有算法和数据库原型系统全部采用Python2.7.6编写。
实验数据采用部分真实学生数据148GB信息STU(StudentDataSet)及采用TPCH(HversionofTransactionProcessingPerformanceCouncil)[12]生成858GB信息TPCHD(TPCHDataSet);同时按照一定规则生成STU与TPCHD之间的关联信息22GB,数据量1028GB。
5.2压缩比的比较
实验1对BAP、TIDC、CCA压缩时间进行比较。
考察压缩时间与数据量、常量频度类型进行比较。
实验2对BAP、TIDC、CCA压缩比进行比较。
考察压缩比常量频度、数据分布类型进行比较。
从图3可看出,CCA具有较快的压缩效率。
BAP需对数据先进行0,1编码,然后在进行Golomb编码,故速度要比TIDC慢。
TDIC与CCA压缩时间接近,因为TIDC对数据进行两遍扫描,而CCA只对数据进行一遍扫描的同时作相关压缩操作。
二者在常量频度相同时时间复杂度相近。
由图4可以看出CCA相比BAP和TIDC有较好的压缩率,因为BAP和TIDC都要求常量的比例要在较高(大于60%)的时候才具有较好的压缩率,CCA有点类似于采用了多个常量的方法,所以压缩效率会更好。
5.3压缩数据上的不同操作算法效率对比
实验3CCA与BAP、TIDC作单表选择操作时间比较,DDBMS目前实现and连接操作。
元组数量为21亿,属性数量为5,常量频度从30%到90%。
实验4CCA与BAP、TIDC作单表投影操作时间比较。
元组数量为21亿,属性数量为5,常量频度从30%到90%。
实验5CCA与BAP、TIDC作连接操作时间比较,DDBMS目前实现了双表等值连接操作。
两个元组数量分别为1000万和5000万,属性数量为5,常量频度从30%到90%。
图5反映的是常量频度对选择操作的影响,此处由于BAP需要进行解压操作,且需根据BV定位后再找PV此处添加文字,开销较大,故在这里不作比较。
TIDC需要扫描一遍数据,CCA对于一些选择操作可以直接定位,故比TIDC效率高。
图6显示的是常量频度对投影的影响,BAP需要解压后计算;同时磁盘I/O较大,CCA对于投影查询的数据都保存在相近的位置,故效率会比TIDC高一些。
图7由于BAP作连接操作时间复杂度太高,故不作比较。
当常量频度在90%时两者连接操作时间相近,但当频度小于90%时,CCA具有更好的效果,因为CCA对于相近的数据能够直接获取。
图5常量频度对选择操作的影响图5是一个图形,还是两个图形,若是两个,请补充两个子图的子图名。
若是一个图形,那么应该保留哪一个图形?
请明确。
若是保留上一个图形,则其横轴的坐标名称是什么,请补充。
回复:
图5保留下方的图。
6结语
本文提出了CCA,在数据服从正态分布的条件下,根据面向列存储的数据特点,采用针对value的长度的分类方法,并对key值进行压缩;同时使用抽样的方式获得多个重复率较高的前缀,并对其进行编码,从而得到更高的压缩率。
本文实现了一个数据库原型系统――DDBMS,并采用CCA实现了数据库上无解压的选择、投影、连接等关系代数操作,并与相关无解压计算算法进行了对比,与BAP(BitAddressPhysical)和TIDC(TupleIDCenter)压缩方法相比,在压缩率分别提高了51%、14%,在执行速度上提高了47%、42%。
理论分析和实验结果表明CCA是一个大的压缩数据上的高效无解压计算算法。
参考文献:
[1]
LINY,AGRAWALD,CHENC,etal.Llama:
leveragingcolumnarstorageforscalablejoinprocessingintheMapReduceframework[C]//Proceedingsofthe2011ACMSIGMODInternationalConferenceonManagementofdata.NewYork:
ACM,2011:
961-972.
[2]
WONGHKT,LIJ,OLKENGF,etal.Bittranspositionforverylargescientificandstatisticaldatabases[J].Algorithmica,1986,1
(1):
289-309.
[3]
LIJ,ROTEMD,WONGHKT.Anewcompressionmethodwithfastsearchingonlargedatabase[C]//Proceedingsofthe13thInternationalConferenceonVeryLargeDataBases.SanFrancisco,CA:
MorganKaufmann,1987:
311-318.
[4]
LIJ,SRIVASTAVAJ.Efficientaggregationalgorithmsforcompresseddatawarehouses[J].IEEEtransactionsonknowledgeanddataengineering,2002,14(3):
515-529.
[5]
WUW,GAOH,LIJ.Newalgorithmforcomputingcubeonverylargecompresseddatasets[J].IEEEtransactionsonknowledgeandengineering,2006,18(12):
1667-1680.