一种基于网络编码的变长数据段的写入方法及读取方法与流程

文档序号:14910776发布日期:2018-07-10 23:20阅读:135来源:国知局

本发明属于网络编码领域,尤其涉及一种基于网络编码的变长数据段的写入方法及读取方法。



背景技术:

传统的分布式文件系统中对于数据更新功能,很多分布式文件系统不支持数据的随机更新,这影响分布式文件系统的功能的完备性,降低分布式文件系统的应用功能。对于非定长数据块的操作,有的是将不满设定长度的数据块填充为设定标准数据块长度后再进行编码存储,或对不定长的数据块将更新数据和原始数据合并后对整块编码再将编码后的数据进行重新写入存储。

对于传统分布式文件系统对非定长数据块的更新存储方式或增加了磁盘占用空间或加大了传输带宽,从而对存储效率、更新性能都有影响。



技术实现要素:

本发明所要解决的技术问题是:传统分布式文件系统对非定长数据块的更新存储方式或增加了磁盘占用空间或加大了传输带宽,从而对存储效率、更新性能都有影响。

为解决上面的技术问题,本发明提供了一种基于网络编码的变长数据段的写入方法,该写入方法包括:

获取待写入数据段,并分析所述待写入数据段的写入特征量;

根据所述写入特征量判断所述待写入数据段是否属于变长数据段;

若属于,则同时将所述待写入数据段分别进行拆分和复制处理,分别得到k个原始数据块和m个校验数据块;

将所述k个原始数据块和所述m个校验数据块分别对应地写入到k个数据节点和m个校验节点中。

本发明的有益效果:通过上述的方法,将待写入数据段分成两种存储方式,一种是将待写入数据段拆分成k个原始数据块,一种是将待写入数据段复制处理成m个校验数据块,再分别写入到k个数据节点和m个校验节点中,这样对存储在数据节点和校验节点上的数据做不同处理,降低了存储空间,降低传输带宽,同时还降低了代码实现复杂度和计算量,达到提升空间存储率。

进一步地,该写入方法还包括:

在所述待写入数据段写入完后,且需要追加写入新数据段时,判断所述新数据段与所述待写入数据段之和的数据段是否为变长数据段;

若是,则将所述新数据段拆分成k个新的原始数据块,同时将所述新数据段复制成m个新的校验数据块;

将k个所述新的原始数据块和m个所述新的校验数据块分别对应地写入到k个数据节点和m个校验节点中。

上述进一步地有益效果:在追加过程中若该变长数据段达到指定数据段的长度则对该数据段做一次合并,并按照定长数据段的常规处理方法进行处理,使得变长数据段最终和定长数据段达到一致,保证系统中数据处理的一致性,而属于变长数据段时,则进行拆分和复制处理,拆分成k个新的原始数据块和复制成m个新的校验数据块,再对存储在数据节点和校验节点上的数据做不同处理,降低了存储空间,同时降低计算复杂度和代码实现复杂度,达到提升存储效率和数据写入性能的目的。

进一步地,所述将k个所述新的原始数据块和m个所述新的校验数据块分别对应地写入到k个数据节点和m个校验节点中,具体包括:

将k个所述新的原始数据块对应地写入到之前的k个原始校验数据块后面;

将m个所述新的校验数据块对应地写入到之前的m个校验数据块后面;

其中,一个新的原始数据块对应一个数据节点,一个数据节点之前存储一份原始数据块,一个所述新的原始数据块写到之前存储的一个所述原始数据块后面;

一个新的校验数据块对应一个校验节点,一个校验节点之前存储一份校验数据块,一个所述新的校验数据块写到之前存储的一个所述校验数据块后面。

进一步地,所述写入特征量包括:所述待写入数据段的写入长度。

进一步地,该写入方法还包括:

获取更新数据段,同时读取已写入的数据段;

将所述更新数据段与所述已写入的数据段组合成一份全量数据段,并将所述全量数据段拆分成k个全量数据块,同时将所述更新数据段复制成m个全量更新校验数据块;

将k个所述全量数据块和m个全量更新校验数据块分别对应地写入到k个数据节点和m个校验节点中。

进一步地,所述k个所述全量数据块和m个全量更新校验数据块分别对应地写入到k个数据节点和m个校验节点中具体包括:

将k个所述全量数据块写入到所述k个数据节点中,以替换所述k个数据节点中已存储的k个所述原始数据块;

将m个所述全量更新校验数据块直接更新所述m个校验节点中已存储数据段中的部分数据段,得到所述全量数据段。

本发明还涉及一种基于网络编码的变长数据段的读取方法,该读取方法包括:

获取读取数据的请求;

根据所述读取数据的请求,分析待读取数据段的读取特征量;

根据所述读取特征量,判断所述待读取数据段中最后一个数据段是否属于变长数据段;

若属于,则发送所述读取数据的请求给校验节点,同时从所述校验节点中读取所述待读取数据段。

本发明的有益效果:通过上述的方法,对于变长数据段的读取优先从校验节点上读取全量数据,减少数据计算和网络交互次数,提高了数据读取的效率。

进一步地,所述读取特征量包括:所述待读取数据段的读取长度。

进一步地,所述则发送数据读取请求给校验节点,同时从所述校验节点中读取所述待读取数据段具体包括:

发送所述数据读取请求给第一个所述校验节点,同时从第一个所述校验节点中读取所述待读取数据段,若读取失败,则继续向其他的所述校验节点发送所述数据读取请求,直到有一个所述校验节点读取成功。

进一步地,该读取方法还包括:当所有的校验节点均读取失败后,则发送所述数据读取的请求给所有的原始数据节点,当所有的原始数据节点均读取成功,则读取所述待读取数据段成功,若存在任一个原始数据节点读取失败,则读取所述待读取数据段失败。

附图说明

图1为本发明的一种基于网络编码的变长数据段的写入方法的流程图;

图2为本发明的一种基于网络编码的变长数据段的读取方法的流程图;

图3为本发明的变长数据段写入的示意图;

图4为本发明的追加写入数据段的示意图;

图5为本发明的更新数据段的示意图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

在本发明中其具体系统框架是将APP为应用模块,NCFS对基于网络编码实现的分布式文件系统对外提供的文件操作接口模块。OSD客户端接收NCFS模块的数据请求进行segment组装,数据写入、读取与更新,再将数据写入请求、读取请求、更新请求发送到OSD服务集群,OSD服务集群根据实际请求对数据进行读取、写入、更新等操作,并将结果返回给OSD客户端。

如图1所示,本发明实施例1还涉及一种基于网络编码的变长数据段的写入方法,该写入方法包括:

A1,获取待写入数据段,并分析所述待写入数据段的写入特征量;

A2,根据所述写入特征量判断所述待写入数据段是否属于变长数据段;

A3,若属于,则同时将所述待写入数据段分别进行拆分和复制处理,分别得到k个原始数据块和m个校验数据块;

A4,将所述k个原始数据块和所述m个校验数据块分别对应地写入到k个数据节点和m个校验节点中。

需要说明的是,在本实施例1中是OSD客户端对变长数据段segment处理在变长数据段写入时,对变长数据段进行拆分为k个原始数据块,对变长数据段复制出m个校验数据块,将k个原始数据块存储到对应的数据节点上,将m个校验数据块存储到对应的校验节点上。k个原始节点存储k个原始数据块,K个原始数据块合并后为该变长数据段的一份全量数据,m个校验节点上存储m个校验数据块,m个校验数据块为m份变长数据段的全量数据,如图3所示,其中segment表示数据段,B表示原始数据块(B1表示第一个原始数据块,Bk表示第K原始数据块),pB表示校验数据块(pB1…pBm为变长segment的复制),node表示原始节点(node1表示B1存储的第一个原始节点,nodek表示Bk存储的第k个原始节点),pnode表示校验节点(pnode1表示pB1存储的第一个校验节点,pnodem表示pBm存储的第m个校验节点)。

获取segment拆分的k个原始数据块、segment复制的m个校验数据块,OSD客户端将k个原始数据块和m个校验数据块发送到OSD服务集群的对应数据节点和校验节点上,OSD服务节点将数据块存储到自己节点上。OSD服务集群将各个OSD服务节点上数据块的存储结果返回给OSD客户端,OSD客户端根据所有OSD服务节点的存储结果判断该变长segment数据段的存储结果是成功还是失败。OSD客户端将数据写入结果返回给NCSF,应用获取数据写入结果。

可选地,在另一实施例2中该写入方法还包括:

在所述待写入数据段写入完后,且需要追加写入新数据段时,判断所述新数据段与所述待写入数据段之和的数据段是否为变长数据段;

若是,则将所述新数据段拆分成k个新的原始数据块,同时将所述新数据段复制成m个新的校验数据块;

将k个所述新的原始数据块和m个所述新的校验数据块分别对应地写入到k个数据节点和m个校验节点中。

需要说明的是,在本实施例2中假设追加的数据段是△segment。OSD客户端对△segment进行处理,获取△segment拆分的k个原始数据块和△segment复制的m个校验块,OSD客户端将△segment的k个原始数据块和m个校验块发送到OSD服务集群的对应节点上,OSD服务节点上将追加的对应数据块追加到对应的原始数据块上和校验数据块上,最终OSD服务节点上对数据追加写入结果。OSD服务节点将数据写入结果返回给OSD客户端,OSD客户端根据所有OSD服务节点的返回结果判断△segment是否追加写入成功,继而将数据写入结果通过NCSF返回给应用。

可选地,在另一实施例3中所述将k个所述新的原始数据块和m个所述新的校验数据块分别对应地写入到k个数据节点和m个校验节点中,具体包括:

将k个所述新的原始数据块对应地写入到之前的k个原始校验数据块后面;

将m个所述新的校验数据块对应地写入到之前的m个校验数据块后面;

其中,一个新的原始数据块对应一个数据节点,一个数据节点之前存储一份原始数据块,一个所述新的原始数据块写到之前存储的一个所述原始数据块后面;

一个新的校验数据块对应一个校验节点,一个校验节点之前存储一份校验数据块,一个所述新的校验数据块写到之前存储的一个所述校验数据块后面。

需要说明的是,在本实施例3中变长数据段在数据段追加写入且追加的数据与之前存在的数据之和不满足定长数据段时(即为变长数据段时),对追加的数据段进行拆分为k个原始数据块,对追加的数据复制出m个校验数据块,将k个原始数据块存储到对应的数据节点上,且写入时,需要追加写入的数据段需要写在对应的老数据块后面,而不是写成一个独立的数据块,将m个校验数据块存储到对应的校验节点上,且需要追加的m个校验数据块在对应的老校验数据块后面,而不是写成一个独立的校验数据块。如图4所示,k个原始节点存储由追加的数据拆分出的k个原始数据块,m个校验节点上存储m个校验数据块,m个校验数据块为m份追加数据的全量数据,其中△segment为追加写入的数据段,△B1-△Bk为△segment拆分出的k个原始数据块,△pB1-△pBm为△segment的m个复制。即追加数据后,m个校验节点上都存储追加后变长数据段的全量数据,k个节点上存储一份全量数据。

可选地,在另一实施例4中所述写入特征量包括:所述待写入数据段的写入长度。

需要说明的是,在本实施例4中是为了解析上述提及到的写入特征量,该写入特征量包括:待写入数据段的写入长度,可以理解的是在了解到待写入数据段的写入长度,可以需要确认到将待写入数据段写入到的文件的当前总大小、待写入数据段写入文件的位置(即针对文件头的偏移量。

可选地,在另一实施例5中该写入方法还包括:

获取更新数据段,同时读取已存储的数据段;

将所述更新数据段与所述已存储的数据段组合成一份全量数据段,并将所述全量数据段拆分成k个全量数据块,同时将所述更新数据段复制成m个全量更新校验数据块;

将k个所述全量数据块和m个全量更新校验数据块分别对应地写入k个数据节点和m个校验节点中。

需要说明的是,本实施例5是在上述实施例3或者实施例4的基础上进行的,采用上述变长数据段的读取方法读取oldsegment(已存储的数据段),OSD客户端读取到oldsegment后将oldsegment与upsegment(更新数据段)进行处理,从而OSD客户端获取更新后的全量数据段newsegment,OSD客户端将newsegment拆分为K个原始数据块,OSD客户端将newsegment拆分的k个原始数据块发送到OSD服务集群的k个原始节点上,k个OSD服务节点上将newsegment拆分的k个原始数据块替换掉oldsegment对应的k个原始数据块。OSD客户端将upsegment复制出m个更新数据段对应的校验数据块,并将m个更新校验块发送到OSD服务集群中的m个校验节点上,m个OSD服务校验节点根据upsegment对oldsegment进行数据更新,更新后m个OSD服务检验节点上存储的是全量的newsegment的数据,OSD客户端根据所有OSD服务节点的数据存储处理结果判断数据跟新写入是否成功,将结果通过NCSF返回给应用。

可选地,在另一实施例6中所述k个所述全量数据块和m个全量更新校验数据块分别对应地k个数据节点和m个校验节点中具体包括:

将k个所述全量数据块写入到所述k个数据节点中,以替换所述k个数据节点中已存储的k个所述原始数据块;

将m个所述全量更新校验数据块直接更新所述m个校验节点中已存储数据段中的部分数据段,得到所述全量数据段。

需要说明的是,在本实施例6中在对变长数据段进行更新时候,需要对存在的老数据和要更新的数据进行一次合并。如图5所示,其过程如下:先采用上述变长数据段读取的方法获读取更新之前的全量老数据段(oldsegment),将更新的数据段(upsegment)与更新之前的oldsegment中对应的数据进行合并,即用更新的数据替换oldsegment中对应位置的老数据从而获取到更新后的全量新数据段(newsegment),若newsegment未满标准数据段的长度,则采用变长数据段更新方法:将newsegment拆分成k个原始数据块,k个原始数据块发送到原始节点上进行存储,之前原始节点上存储的该数据段相关数据删除。将更新的数据upsegment发送到m个校验节点上,对校验节点上的全量数据进行更新,更新后的数据为全量的newsegment。

如图2所示,下面是本发明实施例7中提供的一种基于网络编码的变长数据段的读取方法,该读取方法包括:

S1,获取读取数据的请求;

S2,根据所述读取数据的请求,分析待读取数据段的读取特征量;

S3,根据所述读取特征量,判断所述待读取数据段中最后一个数据段是否属于变长数据段;

S4,若属于,则发送所述读取数据的请求给校验节点,同时从所述校验节点中读取所述待读取数据段。

需要说明的是,在本实施例7中是实现数据读取的方式,应用先通过NCSF提供的打开文件接口打开要读取的文件,然后使用读取数据接口读取数据,NCSF端根据应用的请求将要读取的文件总大小、读取的位置、要读取的数据的长度传给OSD客户端。

OSD客户端根据文件总大小、读取的位置以及一个标准数据段的长度来判定要读取的数据是处于标准长度的数据段内还是非定长数据段内,只有此文件的最后一个数据段是非定长的数据段,文件中的其它的数据段都是标准定长的数据段。本发明实施例1中假设OSD客户端判断NCSF要读取的数据是文件中的最后一个数据段,且该数据段不满标准长度的数据段,即为一个变长的数据段,则发送所述读取数据的请求给校验节点,同时从所述校验节点中读取所述待读取数据段。

可选地,在另一实施例8中所述读取特征量包括:所述待读取数据段的读取长度。

需要说明的是,在本实施例8中OSD客户端根据文件总大小、读取的位置以及一个标准数据段的长度来判定要读取的数据是处于标准长度的数据段内还是非定长数据段内,可以理解的是是在了解到待读取数据段的读取长度,可以需要确认到将要读取的文件的当前总大小、待读取数据段在文件中的位置(即针对文件头的偏移量)。

可选地,在另一实施例9中所述则发送数据读取请求给校验节点,同时从所述校验节点中读取所述待读取数据段具体包括:

发送所述数据读取请求给第一个所述校验节点,同时从第一个所述校验节点中读取所述待读取数据段,若读取失败,则继续向其他的所述校验节点发送所述数据读取请求,直到有一个所述校验节点读取成功。

需要说明的是,在本实施例9中OSD客户端先向OSD服务集群中的第一个校验节点发送读取数据请求,若读取成功OSD客户端则直接将从校验节点上的数据读取的数据段中取出NCSF所要读取的数据返回给应用。若第一个校验节点上读取数据失败,则继续向其它校验节点发送读取数据请求,直到有一个校验节点读取成功,则结束。

可选地,在另一实施例10中该读取方法还包括:当所有的校验节点均读取失败后,则发送所述数据读取的请求给所有的原始数据节点,当所有的原始数据节点均读取成功,则读取所述待读取数据段成功,若存在任一个原始数据节点读取失败,则读取所述待读取数据段失败。

需要说明的是,在本实施例10中在上述m个校验节点上的数据均读取失败后,OSD客户端则向OSD服务集群中的k个原始数据节点发送读取数据请求,若k个原始数据节点中有一个节点上数据读取失败,则整个数据过程失败,若k个原始数据节点上的原始数据块均读取成功,OSD客户端将从k个原始数据块上读取的数据k个数据块组装成一个全量的变长数据段,然后从变长数据段中取出应用所需读取的数据返回给NCSF,从而完成整个变长数据段的读取过程。

在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1