[发明专利]基于MPI的云存储中数据消冗方法有效
| 申请号: | 201810774657.1 | 申请日: | 2018-07-16 |
| 公开(公告)号: | CN109189995B | 公开(公告)日: | 2021-09-21 |
| 发明(设计)人: | 刘嘉辉;朱宝森 | 申请(专利权)人: | 哈尔滨理工大学 |
| 主分类号: | G06F16/901 | 分类号: | G06F16/901;G06F16/9032 |
| 代理公司: | 暂无信息 | 代理人: | 暂无信息 |
| 地址: | 150080 黑龙*** | 国省代码: | 黑龙江;23 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 mpi 存储 数据 方法 | ||
1.基于MPI的云存储中数据消冗方法,其特征在于:
(1)云存储环境进行数据消冗使用的数据结构包括:二级索引结构、文件分块结构、文件元数据、分块元数据;
(2)基于MPI的云存储中数据消冗方法包括:
Part1:客户端client_i,其中,1≤i≤q,i是客户端编号,q是客户端最大编号;计算文件指纹ffp,并将文件指纹ffp发送到云端的主服务器master上进行全文件消冗处理,若云端服务器集群没有存储过该文件,则将所述文件按照不同的文件类型采用相应的分块策略进行分块,并将文件元数据和所有分块元数据以及数据分块发送给云端的主服务器master;
Part2:云端主服务器master接收文件指纹并在二级索引结构上进行检索处理,从而进行全文件消冗,并接收文件元数据和所有分块元数据以及数据分块;将接收的文件元数据进行存储,并将分块元数据的分块指纹发送给相应的从服务器slaver_j,其中,1≤j≤m,j是从服务器的编号,m是从服务器的最大编号,进行并行全局消冗处理;若不存在此数据分块,则将此分块元数据进行存储,并将数据分块发送给从服务器节点slaver_j进行存储;同时,主服务器master需要管理各个从服务器,并定期获取从服务器集群的IP地址,以便其他客户端client_i计算分块元数据时确定数据分块需要存储的从服务器节点;从服务器slaver_j通过MPI函数库构建消冗矩阵,采用MPI分布式并行处理全局消冗并存储分块数据;
根据权利要求1所述的基于MPI的云存储中数据消冗方法,所述方法的数据结构定义为:
二级索引
高速缓存Cache中的索引表包含了哈希函数H(key)映射后的哈希值,指纹的引用次数,红黑树的节点指针;哈希表中每一个位置都链接一个红黑树,红黑树中实心节点标记为黑色节点,空心节点标记为红色节点;该结构是常驻内存的索引结构,关键字key利用哈希函数H(key)映射到哈希表的对应位置,即哈希值,其中,哈希值位于区间[0,n-1],即从0开始计数,n为哈希表存储位置的总数;当映射到对应位置后,通过遍历该位置的红黑树实现检索关键字;
在检索数据时,首先计算哈希值H(key),其次在索引表中进行检索,若存在该数据,则不需要在哈希表中进行检索;否则,在哈希表中遍历下标为H(key)的红黑树;云端从服务器集群的布隆过滤矩阵发生假阳性误判时,通过二级索引结构进行全局消冗处理;在云端主服务器master中利用该索引结构判断文件是否已经存储在云服务器中;
时间复杂度计算公式:设高速缓存Cache中的索引表针对每一个哈希值的指纹个数为N,哈希表中红黑树的节点个数为n,数据指纹的比较时间记为O(Tfp),则二级索引结构的最坏时间复杂度记为:
N×O(Tfp)+O(log2n)×O(Tfp)=O(N×Tfp)+O(Tfp×log2n)=max(O(N×Tfp),O(Tfp×log2n)),
分块结构
分块指纹记为cfp;
存储的位置记为loc,即存储到云端从服务器slaver的所对应的节点上;
分块结构包括:
第一项:cfp;
第二项:loc;
第三项:offset记为文件内偏移,即该块的编号;该结构在文件元数据中使用;
文件元数据
文件元数据结构包括:
第一项:ffp为文件指纹;
第二项:fs为文件大小;
第三项:frn为文件的引用次数,初始值设置为1;
第四项:chunk为数据分块构成的集合,集合中每一个元素为所述的分块;
该结构保存文件的信息,存储在云端主服务器master上,实现全文件消冗处理;
分块元数据
分块元数据结构包括:
第一项:cfp为分块指纹,与分块结构一一对应;
第二项:cs为分块大小;
第三项:crn为分块引用次数,初始值设置为1;
第四项:loc为存储位置,与分块结构一一对应;
第五项:ds为实现分块进行块内压缩时保存的压缩信息;
所述结构保存数据分块的信息,存储在云端主服务器master上;
根据权利要求1所述的基于MPI的云存储中数据消冗方法,其特征在于:
基于MPI的云存储中数据消冗方法在Part1中包括:
判断云端是否已经存储了需要处理的文件,通过函数ClientIsExist(filename),其中函数参数filename表示需要上传的文件的路径;
函数ClientIsExist(filename)的实现过程描述为:
S1、计算文件指纹ffp;通过MD5、SHA1哈希算法实现,将该指纹发送到云端主服务器master上判断是否存在该文件,并进行全文件消冗处理;
S2、接收云端主服务器master发送返回的值,如果值为“是”,说明云端服务器集群已存储过该文件,返回值“是”;否则,返回值“否”,以及文件指纹;
S3、所述过程结束;
客户端client_i进行文件分块,针对不同类型的文件,采用不同粒度的文件分块策略,包括:
对于db,lib,unity-3db,bin,xm,sdf,stemmer,rdb,aar,caj,ipch,chm,kgtemp,jsa,eps类型文件采用整文件分块WFC策略,对于小文件,限定文件大小不超过1MB,采用整文件分块策略,通过函数WFC(filename)进行文件级粒度的分块处理,其中filename为文件路径;
对于svn-base,jar,js,css,index,dll,vmem,exe,pdb,vmss,pdf类型文件采用文件的并行定长分块ParallelFSC策略,通过函数ParallelFSC(filename)进行文件的定长分块;
所述类型文件之外的其它类型文件采用基于内容感知的并行变长文件分块ParallelCDC策略,通过ParallelCDC(filename)函数;
函数WFC(filename),具体流程描述为:
S1、获取所述的计算文件指纹ffp;
S2、计算分块的元数据的cfp、cs、crn,其中分块元数据的cfp字段与文件指纹ffp一致,cs为文件大小,crn设置为1,loc字段通过一致性哈希算法计算获得;
S3、所述过程结束;
函数ParallelFSC(filename),具体流程描述为:
S1、设定分块大小,设定每一个文件分块为4KB的整数倍,即8KB,16KB,以此类推;
S2、如果文件大小超过实际内存存储,将文件读入缓冲区进行分块处理,并行策略采用流水线技术处理;设置两个相同大小的缓冲区buffer1和buffer2进行缓冲处理;
S3、申请P1、P2、P3并行处理器资源;
S4、处理器P1负责读文件filename,即将文件filename读入内存缓冲区buffer1,缓冲区大小设定为4KB的整数倍;
S5、处理器P2负责执行分块,即复制buffer1里的数据到buffer2,将buffer2中的数据写入分块文件,直到分块文件达到预先设置的值;在分块处理过程中,需要计算分块元数据的cs、crn、loc字段,其中crn设置为1,loc字段通过一致性哈希计算获得;与此同时,处理器P1执行读文件操作;
S6、处理器P3负责计算分块指纹cfp,即利用哈希算法MD5、SHA1计算分块的哈希值,与此同时,处理器P1执行读文件操作,处理器P2执行分块操作;
S7、释放并行处理器资源;
S8、所述过程结束;
函数ParallelCDC(filename),具体流程描述为:
S1、设定文件分块的平均分块值为4KB的整数倍,滑动窗口尺寸为4的整数倍,即8,16,以此类推;
S2、设置两个相同大小的缓冲区buffer1和buffer2;
S3、申请P1、P2、P3并行处理器资源;
S4、处理器P1负责读文件filename,即将文件filename读入缓冲区buffer1;
S5、处理器P2执行分块,即复制buffer1中的数据到buffer2,将滑动窗口沿着缓冲区buffer2移动,当滑动窗口已满时,通过滚动哈希函数,即拉宾指纹签名算法,计算窗口的哈希值并与预先设定的值进行比较;如果相等,则进行分块处理;否则,继续将窗口向后滑动;在分块过程中需要计算分块元数据的cs、crn、loc字段,其中crn设置为1,loc字段通过一致性哈希计算得到;与此同时,处理器P1执行读文件操作;
S6、处理器P3负责计算分块指纹cfp,即利用哈希算法MD5、SHA1计算分块的哈希值,与此同时,处理器P1执行读文件操作,处理器P2执行分块操作;
S7、释放处理器资源;
S8、所述过程结束;
所述算法设定最大分块和最小分块的界限,在滑动窗口移动的过程中若遇到分块边界,如果小于最小分块则不执行分块,继续滑动;如果滑动过程中已经超过最大分块,但是仍未遇到分块边界,则进行分块处理;
在数据分块处理之前计算文件的元数据信息和文件类型,通过函数FileChunk(filename),具体流程描述为:
S1、获取所述的计算文件指纹ffp;
S2、计算文件大小fs;
S3、计算文件类型及文件扩展名;
S4、根据文件的扩展名,调用所述的相应的文件分块函数;
S5、计算文件元数据信息,其中ffp为第一步计算获得,fs为第二步计算获得,frn设置为1,chunk为通过文件分块获得的分块集合;
S6、所述过程结束;
将文件进行分块之后,需要将所有分块上传到云端进行存储,通过函数StorageFile()函数,具体流程描述为:
S1、将文件元数据发送到云端主服务器master;
S2、将文件的第一个分块的分块元数据和数据分块发送到云端主服务器master;
S3、发送下一个分块元数据,转到S2,直到所有的分块处理完毕;
S4、所述过程结束;
基于MPI的云存储中数据消冗方法在Part2中包括:
云端主服务器master接收客户端client_i发送过来的文件指纹ffp,并进行全文件消冗处理来判断是否存储过所述文件,通过函数WFDedundency(ffp),函数参数ffp为文件指纹,具体流程描述为:
S1、通过哈希函数H(ffp)计算出文件指纹ffp的哈希值hashfile;
S2、在Cache中的索引表中进行检索:首先找到对应的哈希值hashfile,其次通过指针找到红黑树中的文件指纹节点,如果两个指纹一致,则已存储过所述文件,修改索引表中的引用次数字段,转到S4;如果不一致,则检索下一条记录,以此类推;如果索引表中不存在所述指纹,则转到S3进行处理;
S3、在哈希表中找到下标为hashfile的红黑树,遍历该红黑树,如果不存在此指纹,则表示未存储过所述文件,返回值“否”,转到S5,否则,返回值“是”并转到S4;
S4、修改所述文件元数据中文件的引用次数字段frn;
S5、所述过程结束;
云端主服务器master接收并存储客户端client_i的文件元数据,接收分块元数据并转发给云端从服务器节点slaver_j,从服务器节点slaver_j由分块元数据中loc字段确定;当从服务器节点slaver_j确认已存储过该数据分块,则主服务器master不需要存储所述数据分块的元数据,否则需要存储所述数据分块的元数据,并将分块数据发送给从服务器节点slaver_j进行处理;通过函数StorageMetaDataAndDispatcher()完成处理,具体流程描述为:
S1、实现MPI运行环境初始化操作,加载MPI的系统函数库,MPI的版本信息;
S2、通过库函数分别获取服务器中的服务器编号、服务器数量、服务器名,其中主服务器master编号设置为0;
S3、接收文件元数据并存储;
S4、通过哈希函数H(ffp)计算获得文件指纹的哈希值hashfile,其中ffp为文件元数据中的文件指纹字段;
S5、将ffp插入到下标为hashfile的哈希表的红黑树中;
S6、接收分块元数据和数据分块;
S7、将分块元数据的分块指纹cfp通过MPI_Send发送给从服务器节点slaver_j,从服务器节点slaver_j由分块元数据中loc标识;
S8、通过MPI_Recv接收从服务器节点slaver_j的消冗处理结果,若为“0”,则存储该分块元数据,并通过MPI_Send将数据分块转发给从服务器节点slaver_j;
S9、通过MPI_Recv接收从服务器节点slaver_j发送的分块数据压缩信息,并将此信息写入分块元数据的ds字段;
S10、转到S6,直到客户端client_i将分块元数据发送完毕;
S11、所述MPI结束;
云端的从服务器节点slaver_j接收主服务器master发送的分块指纹cfp并进行全局分布式并行消冗处理,首先要构造消冗矩阵,通过ConstructMatrix()函数进行处理,具体流程描述为:
S1、实现MPI运行环境初始化,加载MPI的系统函数库,MPI的版本信息;
S2、通过库函数分别获取服务器中的服务器编号、服务器数量、服务器名;
S3、通过MPI_Recv函数接收云端主服务器master发送的分块指纹cfp;
S4、收集云端每一个从服务器节点上的布隆过滤器构造布隆过滤矩阵;
S5、对该分块指纹cfp,通过布隆过滤器的k个哈希函数h1(cfp),h2(cfp),…,hk(cfp)计算出k个哈希值,从而得到矩阵A,其中A的每个列向量均来自BFM;
S6、判断该分块是否已经存储过,对A矩阵做矩阵变换得到B矩阵;
为了充分提高集群系统中处理器的利用率,矩阵变换采用r个并行处理器同时处理来加速矩阵的变换过程,其中r≤min(m,k);但是,由于处理器的主频存在不同会限制处理速度,因此,所述并行处理方式采用处理器轮转方式处理:
S6.1、构造m维的列向量γ=(0,0,…,0)mT;
S6.2、申请r个空闲处理器资源;
S6.3、将r个空闲处理器P1,P2,…,Pr按照顺序添加到空闲队列Queue=(P1,P2,…,Pr);
S6.4、P1,P2,…,Pr出队,此时Queue=(empty);
S6.5、将列向量γ=(0,0,…,0)mT分配给每一个处理器Pi,并将矩阵A中的列向量α1,α2,…,αr分别分配给处理器P1,P2,…,Pr;
S6.6、每个处理器Pi均执行向量加法操作,即将向量αi的每一个分量与γ的每一个分量进行相加,Pi处理完毕后继续添加到空闲队列Queue;
S6.7、将矩阵A中剩余的列向量按照上述步骤分配给Queue中的空闲处理器,直到A中的列向量全部完成加法操作;
S6.8、处理器P1对向量γ执行加法归约操作即可获得矩阵B中的第一个列向量β1,完成矩阵变换,以此类推;
S6.9、释放处理器资源;
S7、所述MPI结束;
云端的从服务器slaver_j构造消冗矩阵B之后,通过函数ParallelGlobalDecundency(cfp)同样采用多处理器轮转方式进行全局消冗处理,其中r≤m,函数参数cfp为分块指纹,具体流程描述为:
S1、实现MPI运行环境初始化,加载MPI的系统函数库,MPI的版本信息;
S2、通过库函数分别获取服务器中的服务器编号、服务器数量、服务器名;
S3、申请r个空闲处理器资源;
S4、设置结果result为0;
S5、将r个空闲处理器P1,P2,…,Pr按照顺序添加到空闲队列Queue=(P1,P2,…,Pr);
S6、P1,P2,…,Pr出队,此时Queue=(empty);
S7、将result和向量β1的每一个分量分配给处理器P1,P2,…,Pr;
S8、每个处理器Pi判断相应分量β1,t是否为k,若不为k则该处理器完成操作,转到S9,若为k,则在第t个从服务器节点slaver_t上进行二级检索从而进行全局消冗处理:
S8.1、通过哈希函数H(cfp)计算获得分块指纹的哈希值hashchunk;
S8.2、在高速缓存Cache的索引表中哈希值为hashchunk的位置进行检索,如果检索后不存在,则转到S8.3,否则,将该索引表中的引用次数加1,将result与1进行“或”运算,转到S9;
S8.3、在哈希表中,遍历下标为hashchunk的红黑树,若找到该分块指纹则说明该分块已经存储在云服务器集群中,将result与1进行“或”运算;
S9、检索过程结束;
S10、将完成检索的处理器添加到空闲队列Queue;
S11、重复执行所述过程,直到向量β1扫描结束;
S12、从服务器节点slaver_j对每个处理器上的result进行“或”归约操作,通过MPI_Send将result发送给主服务器master;
S13、若result为0,则将此分块指纹添加到哈希表中下标为hashchunk的红黑树中;
S14、释放处理器资源;
S15、所述MPI结束;
云端的从服务器slaver_j进行全局消冗处理之后,如果判断结果不存在,则需要将此分块数据进行存储处理;存储时利用LZSS算法对数据分块进行压缩,从而进一步消冗数据,并将压缩信息发送给主服务器master,由主服务器master存入分块元数据的ds字段;LZSS算法关键是一个沿着字符输入流滑动的滑动窗口,该窗口左侧为查找缓冲区,右侧为先行缓冲区,具体描述为:
设定最小匹配长度MIN_LENGTH和最大匹配长度MAX_LENGTH;
若匹配则输出1(offset,len),offset为偏移量,len为匹配长度;否则输出0元字符串;
通过函数StorageChunk()来完成分块数据的存储处理,具体过程描述为:
S1、通过MPI_Recv接收主服务器master发送的数据分块;
S2、设置编码输入流的起始位置;
S3、在查找缓冲区中查找最大匹配长度的字符串,并计算最大匹配长度为len;
S4、比较len与MIN_LENGTH的值,如果len大于等于MIN_LENGTH,则输出二元组并在前面添加标识位1,即1(offset,len),然后将滑动窗口向右移len个字符;否则,输出先行缓冲区的第一个字符并在前面添加标识位0,然后将滑动窗口向右移1个字符;
S5、如果在滑动窗口移动后的先行缓冲区中还有未编码字符,则转到S3;
S6、通过MPI_Send将压缩结果发送给主服务器master,主服务器master存储将该结果存储在分块元数据的ds字段中;
S7、所述MPI结束。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨理工大学,未经哈尔滨理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810774657.1/1.html,转载请声明来源钻瓜专利网。
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置





