数据存储方法及系统的制作方法

文档序号:6436374阅读:186来源:国知局
专利名称:数据存储方法及系统的制作方法
技术领域
本发明涉及计算机领域,特别是涉及一种数据存储方法及系统。
背景技术
在现有技术中,随着多媒体产业的迅猛发展,出于成本、可靠性等多方面的考虑, 越来越多的厂商选择在产品中部署自研的分布式存储系统,使得分布式文件系统也因此得到了快速的发展。在现有的分布式文件系统架构中,文件一般都被分割成多个数据块进行存储;为了保证系统的健壮性及灾难恢复能力,数据块一般又会有多个备份,并分别存放于不同的物理位置,因此需要配置更多的存储设备,从而增加了设备的成本;在数据写入存储设备、 从存储设备上读取数据、或者在数据传输的过程中,都可能发生部分数据出错;此外,保存在存储介质上的数据也可能发生损坏,从而导致数据不可用,从而减低了数据存储的可靠性,特别是在数据存储可靠性要求较高的系统中,数据存储可靠性低的问题显得尤为突出。

发明内容
本发明提供一种数据存储方法及系统,以解决现有技术中数据存储可靠性低的问题。本发明提供一种数据存储方法,包括文件访问客户端根据元数据服务器选定的数据块服务器位置,向相应的数据块服务器发送原始数据、原始数据的数据块句柄、以及原始数据的字节范围;数据块服务器根据字节范围对原始数据进行里所RS编码,并将原始数据、以及数据块句柄写入到存储媒介,保存为信息数据文件;对进行RS编码后获取的冗余数据进行封装,获取冗余数据文件句柄,并将封装后的冗余数据、以及冗余数据文件句柄写入存储媒介,保存为冗余数据文件。优选地,上述方法还包括在用户读取原始数据时,文件访问客户端根据元数据服务器指定的数据块服务器位置,向数据块服务器发送数据读取请求,其中,请求中携带有数据块句柄、以及字节范围;数据块服务器根据数据块句柄、以及字节范围,从存储媒介中读取信息数据文件,获取原始数据;读取与信息数据文件相对应的冗余数据文件,对冗余数据文件进行解封装,获取冗余数据;对冗余数据以及原始数据进行RS解码,并将RS解码后的纠错数据发送给文件访问客户端。优选地,数据块服务器根据字节范围对原始数据进行里所RS编码具体包括从原始数据的第一个字节开始,将原始数据以k字节单位分割成多个数据段,如果最后一个数据段的长度小于k字节,则使用0进行填充,使最后一个数据段的长度等于k字节;分别对每一个k字节的数据段进行RS编码,获取多个m字节的冗余数据,并将多个m字节的冗余数据保存在数据块服务器的缓存中。 优选地,对进行RS编码后获取的冗余数据进行封装,获取冗余数据文件句柄具体包括从数据块服务器的缓存中读取多个m字节的冗余数据,将开始标识符插入到每一个m 字节的冗余数据的第一个字节之前,将结束标识符插入到每一个m字节的冗余数据的最后一个字节之后,获取封装后的冗余数据;根据数据块名称构造冗余数据文件名称,并根据冗余数据文件名称获取冗余数据文件句柄。优选地,对冗余数据文件进行解封装具体包括分别根据开始标识符和结束标识符读取封装后的冗余数据,获取多个m字节的冗余数据。优选地,对冗余数据以及原始数据进行RS解码具体包括从原始数据的第一个字节开始,每次读取k字节数据,从冗余数据的第一个字节开始,每次读取m字节数据,对η字节的原始数据和冗余数据进行RS纠错解码,每次生成k字节的纠错数据,直到处理完原始数据,其中,η = k+m ;如果η个字节中发生错误的字节超过m/2个,则在数据块服务器中记录RS纠错解码错误日志;如果最后一段需要解码的原始数据的长度小于k字节,则只对最后一段原始数据中对应的字节进行RS纠错解码运算。本发明还提供了一种数据存储系统,包括元数据服务器,用于管理系统内所有文件的元数据信息,向文件访问客户端提供选定的数据块服务器位置,并向文件访问客户端提供元数据信息操作接口 ;文件访问客户端,用于根据元数据服务器选定的数据块服务器位置,向相应的数据块服务器发送原始数据、原始数据的数据块句柄、以及原始数据的字节范围;数据块服务器,用于根据字节范围对原始数据进行里所(Reed-solomon,简称为 RS)编码,并将原始数据、以及数据块句柄写入到存储媒介,保存为信息数据文件;对进行 RS编码后获取的冗余数据进行封装,获取冗余数据文件句柄,并将封装后的冗余数据、以及冗余数据文件句柄写入存储媒介,保存为冗余数据文件。优选地,文件访问客户端进一步用于在用户读取原始数据时,根据元数据服务器指定的数据块服务器位置,向数据块服务器发送数据读取请求,并将数据块服务器返回的纠错数据发送给用户,其中,请求中携带有数据块句柄、以及字节范围;数据块服务器进一步用于根据数据块句柄、以及字节范围,从存储媒介中读取信息数据文件,获取原始数据; 读取与信息数据文件相对应的冗余数据文件,对冗余数据文件进行解封装,获取冗余数据; 对冗余数据以及原始数据进行RS解码,并将RS解码后的纠错数据发送给文件访问客户端。优选地,数据块服务器具体包括RS编码模块,用于从原始数据的第一个字节开始,将原始数据以k字节单位分割成多个数据段,如果最后一个数据段的长度小于k字节, 则使用0进行填充,使最后一个数据段的长度等于k字节;分别对每一个k字节的数据段进行RS编码,获取多个m字节的冗余数据,并将多个m字节的冗余数据保存在数据块服务器的缓存中;封装模块,用于从缓存中读取多个m字节的冗余数据,将开始标识符插入到每一个m字节的冗余数据的第一个字节之前,将结束标识符插入到每一个m字节的冗余数据的最后一个字节之后,获取封装后的冗余数据;构造模块,用于根据数据块名称构造冗余数据文件名称,并根据冗余数据文件名称获取冗余数据文件句柄。优选地,数据块服务器具体包括解封装模块,用于分别根据开始标识符和结束标识符读取封装后的冗余数据,获取多个m字节的冗余数据;RS解码模块,用于从原始数据的第一个字节开始,每次读取k字节数据,从冗余数据的第一个字节开始,每次读取m字节数据,对η字节的原始数据和冗余数据进行RS纠错解码,每次生成k字节的纠错数据,直到处理完原始数据,其中,η = k+m;如果η个字节中发生错误的字节超过m/2个,则在数据块服务器中记录RS纠错解码错误日志;如果最后一段需要解码的原始数据的长度小于k字节, 则只对最后一段原始数据中对应的字节进行RS纠错解码运算。本发明有益效果如下通过使用具有很强的检错和纠错能力的RS码对数据进行编码,解决了现有技术中数据存储可靠性低的问题,能够有效提高分布式文件系统的容错能力的同时减少了存储设备的数量,降低了成本。


图1是本发明实施例的数据存储方法的流程图;图2是本发明实施例的数据存储的系统架构图;图3是本发明实施例的写数据的操作示意图;图4是本发明实施例的冗余数据封装的操作示意图;图5是本发明实施例的读文件的操作示意图;图6是本发明实施例的数据存储系统的结构示意图。
具体实施例方式为了解决现有技术中数据存储可靠性低的问题,本发明提供了一种数据存储方法及系统,特别适用于对数据存储可靠性要求高、对存储容量要求高的应用场景,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。方法实施例根据本发明的实施例,提供了一种数据存储方法,图1是本发明实施例的数据存储方法的流程图,如图1所示,根据本发明实施例的数据存储方法包括如下处理步骤101,文件访问客户端根据元数据服务器选定的数据块服务器位置,向相应的数据块服务器发送原始数据、原始数据的数据块句柄、以及原始数据的字节范围;其中,元数据服务器主要负责管理系统内所有文件的文件名、数据块、文件名与数据块的对应关系等元数据信息;并向文件访问客户端提供元数据写入和查询等操作接口; 文件访问客户端主要完成客户端代理功能,一方面为应用进程提供文件操作的应用程序编程接口(Application Programming Interface,简称为API)接口,另一方面完成和元数据服务器和数据块服务器的交互。数据块服务器主要负责与本节点内的存储媒介进行交互, 进行实际数据块的读写操作;管理存储媒介上存储的数据块信息;响应文件访问客户端的数据读写请求,从存储媒介上读取数据并返回给文件访问客户端;从文件访问客户端读取数据并写入存储媒介;步骤102,数据块服务器根据字节范围对原始数据进行里所RS编码,并将原始数据、以及数据块句柄写入到存储媒介,保存为信息数据文件;在步骤102中,数据在写入存储媒介之前,需要对数据进行RS编码,生成冗余数据,具体地,数据块服务器根据字节范围对原始数据进行里所RS编码具体包括如下处理 1、从原始数据的第一个字节开始,将原始数据以k字节单位分割成多个数据段,如果最后一个数据段的长度小于k字节,则使用0进行填充,使最后一个数据段的长度等于k字节; 2、分别对每一个k字节的数据段进行RS编码,获取多个m字节的冗余数据,并将多个m字节的冗余数据保存在数据块服务器的缓存中。步骤103,对进行RS编码后获取的冗余数据进行封装,获取冗余数据文件句柄,并将封装后的冗余数据、以及冗余数据文件句柄写入存储媒介,保存为冗余数据文件。在步骤103中,由于RS解码时,需要信息数据和冗余数据精确的同步,当发生数据丢失时,RS码的性能变差,因此,对编码生成的冗余数据进行封装,实现数据同步。具体地, 对进行RS编码后获取的冗余数据进行封装,获取冗余数据文件句柄具体包括如下处理1、 从数据块服务器的缓存中读取多个m字节的冗余数据,将开始标识符插入到每一个m字节的冗余数据的第一个字节之前,将结束标识符插入到每一个m字节的冗余数据的最后一个字节之后,获取封装后的冗余数据;2、根据数据块名称构造冗余数据文件名称,并根据冗余数据文件名称获取冗余数据文件句柄。在实际应用中,封装冗余数据以一个0x7e的标志字符开始,又以一个0x7e的标志字符结束,如果冗余数据中某个字符为0x7e,那么就使用两个字节0x7d和0x5e来取代0x7e,以实现标志字符的转义;如果冗余数据中某个字符为0X7d,那么就使用两个字节 0x7d和0x5d来取代0X7d,以实现转义字符的转义。综上所述,当文件写入时,文件访问客户端根据元数据服务器选定的数据块服务器位置,携带数据块句柄和字节范围,向数据块服务器发送数据;数据块服务器接收到数据后,对数据进行RS编码。编码完成后,将数据块服务器接收到的数据写入存储媒介中,文件句柄为接收到的数据块句柄。然后对编码生成的冗余数据进行封装,然后将进行了封装处理的冗余数据写入存储媒介中,保存为冗余数据文件。在用户读取原始数据时,可以执行以下操作1、文件访问客户端根据元数据服务器指定的数据块服务器位置,向数据块服务器发送数据读取请求,其中,请求中携带有数据块句柄、以及字节范围;2、数据块服务器根据数据块句柄、以及字节范围,从存储媒介中读取信息数据文件,获取原始数据;3、读取与信息数据文件相对应的冗余数据文件,对冗余数据文件进行解封装,获取冗余数据;在该步骤中,从存储媒介读取封装的冗余数据之后,需要对其中的封装信息进行处理,获得冗余数据,具体地,对冗余数据文件进行解封装具体包括分别根据开始标识符和结束标识符读取封装后的冗余数据,获取多个m字节的冗余数据。例如,在实际应用中,读取取封装后的冗余数据从一个0x7e的标志字符开始,到下一个0x7e的标志字符结束,如果连续读取的两个字节为0x7d和0x5e,就用字符0x7e来取代这2个字节;如果连续读取的两个字节为0x7d和0X5d,就用字符0x7d来取代这2个字节;获得冗余数据。4、对冗余数据以及原始数据进行RS解码,并将RS解码后的纠错数据发送给文件访问客户端。在该步骤中,从存储媒介读取信息数据之后,需要根据信息数据和冗余数据进行 RS解码,在解码过程中进行数据纠错,具体地,对冗余数据以及原始数据进行RS解码具体包括从原始数据的第一个字节开始,每次读取k字节数据,从冗余数据的第一个字节开始,每次读取m字节数据,对η字节的原始数据和冗余数据进行RS纠错解码,每次生成k字节的纠错数据,直到处理完原始数据,其中,η = k+m ;如果η个字节中发生错误的字节超过 m/2个,则在数据块服务器中记录RS纠错解码错误日志;如果最后一段需要解码的原始数据的长度小于k字节,则只对最后一段原始数据中对应的字节进行RS纠错解码运算。综上所述,当读取文件时,文件访问客户端根据元数据服务器选定的数据块服务器位置,携带数据块句柄和字节范围,向数据块服务器发送数据读取请求;数据块服务器接收到数据读取请求后,根据接收到的数据块句柄和字节范围,从存储媒介中读取信息数据; 再从存储媒介中读取冗余数据文件中的数据,根据读取的信息数据和冗余数据,进行RS解码;将解码后的数据发送给文件访问客户端;文件访问客户端再将数据发送给用户。以下结合附图,对本发明实施例的上述技术方案进行详细说明。图2是本发明实施例的数据存储的系统架构图,如图2所示,文件访问客户端与元数据服务器和数据块服务器连接,元数据服务器下连接有多个数据块服务器,每个数据块服务器下连接有多个磁盘。基于上述系统架构,对数据进行存储和读取的操作包括如下处理步骤1,当文件写入时,文件访问客户端根据元数据服务器选定的数据块服务器位置,携带数据块句柄、数据块名称和字节范围,向数据块服务器发送数据;步骤2,数据块服务器接收到数据后,对数据进行RS(n,k)编码,图3是本发明实施例的写数据的操作示意图,如图3所示,从接收数据的第1个字节开始,每次取出k字节, 对k字节数据进行RS (n, k)编码,每次生成m字节的冗余数据,将冗余数据保存在数据块服务器的缓存中,直到对数据块服务器收到的IM字节的数据都进行了编码,其中,最后1次需要处理的接收数据长度小于或等于k字节,在最后1次需要处理的接收数据长度小于k字节时,需要将接收该段数据前面使用0进行填充,构成k字节,进行RS (n, k)编码,生成m字节的冗余数据,保存在数据块服务器的缓存中;步骤3,将生成的m字节的冗余数据进行封装处理,图4是本发明实施例的冗余数据封装的操作示意图,如图4所示,封装冗余数据以一个0x7e的标志字符开始,又以一个 0x7e的标志字符结束,如果冗余数据中某个字符为0x7e,那么就使用两个字节0x7d和0x5e 来取代0x7e,以实现标志字符的转义;如果冗余数据中某个字符为0X7d,那么就使用两个字节0x7d和0x5d来取代0X7d,以实现转义字符的转义;步骤4,当数据块服务器接收到数据的达到IM字节时,将这IM字节的数据写入存储媒介,文件句柄为接收到的数据块句柄;步骤5,构造冗余数据文件名,文件名的构造形式是“接收到的数据块名称 _.rsCOde\0",随后,根据文件名创建冗余文件句柄;步骤6,将封装的冗余数据写入存储媒介,文件句柄在步骤5中已经生成;步骤7,当读取文件时,文件访问客户端根据元数据服务器选定的数据块服务器位置,携带数据块句柄,数据块名称和字节范围,向数据块服务器发送数据读取请求;步骤8,数据块服务器接收到数据读取请求后,根据接收到的数据块句柄和字节范围,从存储媒介中读取信息数据;步骤9,根据接收到的数据块名称,构造冗余文件名称“接收到的数据块名称.rSCOde\0",从存储媒介中读取冗余数据文件中的数据,读取数据从一个0x7e的标志字符开始,到下一个0x7e的标志字符结束,如果连续读取的两个字节为0x7d和0x5e,就用字符0x7e来取代这2个字节,如果连续读取的两个字节为0x7d和0x5d,就用字符0x7d来取代这2个字节,获得m字节冗余数据;步骤10,对信息数据和冗余数据数据,进行RS(n,k)解码,图5是本发明实施例的读文件的操作示意图,如图5所示,从读取的信息数据的第1个字节开始,每次取出k字节数据,从读取的冗余数据的第1个字节开始,每次取出m字节数据,对(k+m)字节数据,即η 字节数据,进行RS(n,k)纠错解码,每次生成k字节的纠错后的数据,将纠错后数据保存在数据块服务器的缓存中,直到处理完数据块服务器收到的IM字节的信息数据。如果当η个字节中发生错误的字节数超过(m/2)个字节时,RS(n,k)纠错解码失败,此时仍将k字节的信息数据作为纠错后的数据,保存在数据块服务器的缓存中,同时在数据块服务器上打印 RS解码错误日志;其中,最后1次需要解码的信息数据长度需要小于或等于k字节,如果最后1次需要解码的信息数据长度小于k字节,在进行RS (n, k)纠错解码时,只需要对信息数据对应的字节进行解码运算。上述处理与对η个字节依次进行解码运算的方法相比,能够有效地提高解码的效率;步骤11,将数据块服务器的缓存中RS纠错解码后生成的数据发送给文件访问客户端;步骤12,文件访问客户端再将数据发送给用户。综上所述,借助于本发明实施例的技术方案,通过使用具有很强的检错和纠错能力的RS码对数据进行编码,解决了现有技术中数据存储可靠性低的问题,能够有效提高分布式文件系统的容错能力的同时减少了存储设备的数量,降低了成本。系统实施例根据本发明的实施例,提供了一种数据存储系统,图6是本发明实施例的数据存储系统的结构示意图,如图6所示,根据本发明实施例的数据存储系统包括元数据服务器 60、文件访问客户端62、以及数据块服务器64,以下对本发明实施例的各个模块进行详细的说明。具体地,元数据服务器60,用于管理系统内所有文件的元数据信息,向文件访问客户端62提供选定的数据块服务器64位置,并向文件访问客户端62提供元数据信息操作接 Π ;也就是说,元数据服务器60主要负责管理系统内所有文件的文件名、数据块、文件名与数据块的对应关系等元数据信息;并向文件访问客户端62提供元数据写入和查询等操作接口 ;文件访问客户端62,用于根据元数据服务器60选定的数据块服务器64位置,向相应的数据块服务器64发送原始数据、原始数据的数据块句柄、以及原始数据的字节范围;也就是说,文件访问客户端62主要完成客户端代理功能,一方面为应用进程提供文件操作的API接口,另一方面完成和元数据服务器60和数据块服务器64的交互。数据块服务器64,用于根据字节范围对原始数据进行RS编码,并将原始数据、以及数据块句柄写入到存储媒介,保存为信息数据文件;对进行RS编码后获取的冗余数据进行封装,获取冗余数据文件句柄,并将封装后的冗余数据、以及冗余数据文件句柄写入存储
10媒介,保存为冗余数据文件。 数据块服务器64具体包括RS编码模块,用于从原始数据的第一个字节开始,将原始数据以k字节单位分割成多个数据段,如果最后一个数据段的长度小于k字节,则使用0进行填充,使最后一个数据段的长度等于k字节;分别对每一个k字节的数据段进行RS编码,获取多个m字节的冗余数据,并将多个m字节的冗余数据保存在数据块服务器64的缓存中;封装模块,用于从缓存中读取多个m字节的冗余数据,将开始标识符插入到每一个m字节的冗余数据的第一个字节之前,将结束标识符插入到每一个m字节的冗余数据的最后一个字节之后,获取封装后的冗余数据;在实际应用中,封装冗余数据以一个0x7e的标志字符开始,又以一个0x7e的标志字符结束,如果冗余数据中某个字符为0x7e,那么就使用两个字节0x7d和0x5e来取代0x7e,以实现标志字符的转义;如果冗余数据中某个字符为0X7d,那么就使用两个字节0x7d和0x5d来取代0X7d,以实现转义字符的转义。构造模块,用于根据数据块名称构造冗余数据文件名称,并根据冗余数据文件名称获取冗余数据文件句柄。综上所述,当文件写入时,文件访问客户端62根据元数据服务器60选定的数据块服务器64位置,携带数据块句柄和字节范围,向数据块服务器64发送数据;数据块服务器 64接收到数据后,对数据进行RS编码。编码完成后,将数据块服务器64接收到的数据写入存储媒介中,文件句柄为接收到的数据块句柄。然后对编码生成的冗余数据进行封装,然后将进行了封装处理的冗余数据写入存储媒介中,保存为冗余数据文件。在用户读取原始数据时,文件访问客户端62进一步用于根据元数据服务器60指定的数据块服务器64位置,向数据块服务器64发送数据读取请求,并将数据块服务器64 返回的纠错数据发送给用户,其中,请求中携带有数据块句柄、以及字节范围;数据块服务器64进一步用于根据数据块句柄、以及字节范围,从存储媒介中读取信息数据文件,获取原始数据;读取与信息数据文件相对应的冗余数据文件,对冗余数据文件进行解封装,获取冗余数据;对冗余数据以及原始数据进行RS解码,并将RS解码后的纠错数据发送给文件访问客户端62。数据块服务器64具体包括解封装模块,用于分别根据开始标识符和结束标识符读取封装后的冗余数据,获取多个m字节的冗余数据;例如,在实际应用中,读取取封装后的冗余数据从一个0x7e的标志字符开始,到下一个0x7e的标志字符结束,如果连续读取的两个字节为0x7d和0x5e,就用字符0x7e来取代这2个字节;如果连续读取的两个字节为0x7d和0X5d,就用字符0x7d来取代这2个字节;获得冗余数据。RS解码模块,用于从原始数据的第一个字节开始,每次读取k字节数据,从冗余数据的第一个字节开始,每次读取m字节数据,对η字节的原始数据和冗余数据进行RS纠错解码,每次生成k字节的纠错数据,直到处理完原始数据,其中,η = k+m ;如果η个字节中发生错误的字节超过m/2个,则在数据块服务器64中记录RS纠错解码错误日志;如果最后一段需要解码的原始数据的长度小于k字节,则只对最后一段原始数据中对应的字节进行RS 纠错解码运算。
综上所述,当读取文件时,文件访问客户端62根据元数据服务器60选定的数据块服务器64位置,携带数据块句柄和字节范围,向数据块服务器64发送数据读取请求;数据块服务器64接收到数据读取请求后,根据接收到的数据块句柄和字节范围,从存储媒介中读取信息数据;再从存储媒介中读取冗余数据文件中的数据,根据读取的信息数据和冗余数据,进行RS解码;将解码后的数据发送给文件访问客户端62 ;文件访问客户端62再将数据发送给用户。也就是说,数据块服务器64主要负责与本节点内的存储媒介进行交互,进行实际数据块的读写操作;管理存储媒介上存储的数据块信息;响应文件访问客户端62的数据读写请求,从存储媒介上读取数据并返回给文件访问客户端62 ;从文件访问客户端62读取数据并写入存储媒介。以下结合附图,对本发明实施例的上述技术方案进行详细说明。如图2所示,文件访问客户端与元数据服务器和数据块服务器连接,元数据服务器下连接有多个数据块服务器,每个数据块服务器下连接有多个磁盘。基于上述系统架构, 对数据进行存储和读取的操作包括如下处理步骤1,当文件写入时,文件访问客户端62根据元数据服务器60选定的数据块服务器64位置,携带数据块句柄、数据块名称和字节范围,向数据块服务器64发送数据;步骤2,数据块服务器64接收到数据后,对数据进行RS (n,k)编码,如图3所示, 从接收数据的第1个字节开始,每次取出k字节,对k字节数据进行RS (n,k)编码,每次生成m字节的冗余数据,将冗余数据保存在数据块服务器64的缓存中,直到对数据块服务器 64收到的IM字节的数据都进行了编码,其中,最后1次需要处理的接收数据长度小于或等于k字节,在最后1次需要处理的接收数据长度小于k字节时,需要将接收该段数据前面使用0进行填充,构成k字节,进行RS (n, k)编码,生成m字节的冗余数据,保存在数据块服务器64的缓存中;步骤3,将生成的m字节的冗余数据进行封装处理,如图4所示,封装冗余数据以一个0x7e的标志字符开始,又以一个0x7e的标志字符结束,如果冗余数据中某个字符为 0x7e,那么就使用两个字节0x7d和0x5e来取代0x7e,以实现标志字符的转义;如果冗余数据中某个字符为0X7d,那么就使用两个字节0x7d和0x5d来取代0X7d,以实现转义字符的转义;步骤4,当数据块服务器64接收到数据的达到IM字节时,将这IM字节的数据写入存储媒介,文件句柄为接收到的数据块句柄;步骤5,构造冗余数据文件名,文件名的构造形式是“接收到的数据块名称.rscodeXO",随后,根据文件名创建冗余文件句柄;步骤6,将封装的冗余数据写入存储媒介,文件句柄在步骤5中已经生成;步骤7,当读取文件时,文件访问客户端62根据元数据服务器60选定的数据块服务器64位置,携带数据块句柄,数据块名称和字节范围,向数据块服务器64发送数据读取请求;步骤8,数据块服务器64接收到数据读取请求后,根据接收到的数据块句柄和字节范围,从存储媒介中读取信息数据;步骤9,根据接收到的数据块名称,构造冗余文件名称“接收到的数据块名称.rSCOde\0",从存储媒介中读取冗余数据文件中的数据,读取数据从一个0x7e的标志字符开始,到下一个0x7e的标志字符结束,如果连续读取的两个字节为0x7d和0x5e,就用字符0x7e来取代这2个字节,如果连续读取的两个字节为0x7d和0x5d,就用字符0x7d来取代这2个字节,获得m字节冗余数据;步骤10,对信息数据和冗余数据数据,进行RS(n,k)解码,如图5所示,从读取的信息数据的第1个字节开始,每次取出k字节数据,从读取的冗余数据的第1个字节开始, 每次取出m字节数据,对(k+m)字节数据,即η字节数据,进行RS (n,k)纠错解码,每次生成 k字节的纠错后的数据,将纠错后数据保存在数据块服务器64的缓存中,直到处理完数据块服务器64收到的IM字节的信息数据。如果当η个字节中发生错误的字节数超过(m/2) 个字节时,RS (n, k)纠错解码失败,此时仍将k字节的信息数据作为纠错后的数据,保存在数据块服务器64的缓存中,同时在数据块服务器64上打印RS解码错误日志;其中,最后1 次需要解码的信息数据长度需要小于或等于k字节,如果最后1次需要解码的信息数据长度小于k字节,在进行RS(n,k)纠错解码时,只需要对信息数据对应的字节进行解码运算。 上述处理与对η个字节依次进行解码运算的方法相比,能够有效地提高解码的效率;步骤11,将数据块服务器64的缓存中RS纠错解码后生成的数据发送给文件访问客户端62;步骤12,文件访问客户端62再将数据发送给用户。综上所述,借助于本发明实施例的技术方案,通过使用具有很强的检错和纠错能力的RS码对数据进行编码,解决了现有技术中数据存储可靠性低的问题,能够有效提高分布式文件系统的容错能力的同时减少了存储设备的数量,降低了成本。尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。
权利要求
1.一种数据存储方法,其特征在于,包括文件访问客户端根据元数据服务器选定的数据块服务器位置,向相应的数据块服务器发送原始数据、所述原始数据的数据块句柄、以及所述原始数据的字节范围;所述数据块服务器根据所述字节范围对所述原始数据进行里所RS编码,并将所述原始数据、以及所述数据块句柄写入到存储媒介,保存为信息数据文件;对进行RS编码后获取的冗余数据进行封装,获取冗余数据文件句柄,并将封装后的所述冗余数据、以及所述冗余数据文件句柄写入所述存储媒介,保存为冗余数据文件。
2.如权利要求1所述的方法,其特征在于,所述方法还包括在用户读取所述原始数据时,所述文件访问客户端根据所述元数据服务器指定的数据块服务器位置,向所述数据块服务器发送数据读取请求,其中,所述请求中携带有所述数据块句柄、以及所述字节范围;所述数据块服务器根据所述数据块句柄、以及所述字节范围,从所述存储媒介中读取所述信息数据文件,获取所述原始数据;读取与所述信息数据文件相对应的冗余数据文件,对所述冗余数据文件进行解封装, 获取所述冗余数据;对所述冗余数据以及所述原始数据进行RS解码,并将RS解码后的纠错数据发送给所述文件访问客户端。
3.如权利要求2所述的方法,其特征在于,所述数据块服务器根据所述字节范围对所述原始数据进行里所RS编码具体包括从所述原始数据的第一个字节开始,将所述原始数据以k字节单位分割成多个数据段,如果最后一个数据段的长度小于k字节,则使用0进行填充,使所述最后一个数据段的长度等于k字节;分别对每一个k字节的数据段进行RS编码,获取多个m字节的冗余数据,并将所述多个m字节的冗余数据保存在所述数据块服务器的缓存中。
4.如权利要求3所述的方法,其特征在于,对进行RS编码后获取的冗余数据进行封装, 获取冗余数据文件句柄具体包括从所述数据块服务器的缓存中读取所述多个m字节的冗余数据,将开始标识符插入到每一个m字节的冗余数据的第一个字节之前,将结束标识符插入到每一个m字节的冗余数据的最后一个字节之后,获取封装后的所述冗余数据;根据数据块名称构造冗余数据文件名称,并根据所述冗余数据文件名称获取所述冗余数据文件句柄。
5.如权利要求4所述的方法,其特征在于,对所述冗余数据文件进行解封装具体包括分别根据开始标识符和结束标识符读取封装后的所述冗余数据,获取多个m字节的冗余数据。
6.如权利要求5所述的方法,其特征在于,对所述冗余数据以及所述原始数据进行RS 解码具体包括从所述原始数据的第一个字节开始,每次读取k字节数据,从所述冗余数据的第一个字节开始,每次读取m字节数据,对η字节的所述原始数据和所述冗余数据进行RS纠错解码,每次生成k字节的纠错数据,直到处理完所述原始数据,其中,η = k+m ;如果η个字节中发生错误的字节超过m/2个,则在所述数据块服务器中记录RS纠错解码错误日志;如果最后一段需要解码的原始数据的长度小于k字节,则只对所述最后一段原始数据中对应的字节进行RS纠错解码运算。
7.一种数据存储系统,其特征在于,包括元数据服务器,用于管理系统内所有文件的元数据信息,向所述文件访问客户端提供选定的数据块服务器位置,并向所述文件访问客户端提供元数据信息操作接口 ;所述文件访问客户端,用于根据所述元数据服务器选定的数据块服务器位置,向相应的数据块服务器发送原始数据、所述原始数据的数据块句柄、以及所述原始数据的字节范围;所述数据块服务器,用于根据所述字节范围对所述原始数据进行里所RS编码,并将所述原始数据、以及所述数据块句柄写入到存储媒介,保存为信息数据文件;对进行RS编码后获取的冗余数据进行封装,获取冗余数据文件句柄,并将封装后的所述冗余数据、以及所述冗余数据文件句柄写入所述存储媒介,保存为冗余数据文件。
8.如权利要求7所述的系统,其特征在于,所述文件访问客户端进一步用于在用户读取所述原始数据时,根据所述元数据服务器指定的数据块服务器位置,向所述数据块服务器发送数据读取请求,并将所述数据块服务器返回的纠错数据发送给用户,其中,所述请求中携带有所述数据块句柄、以及所述字节范围;所述数据块服务器进一步用于根据所述数据块句柄、以及所述字节范围,从所述存储媒介中读取所述信息数据文件,获取所述原始数据;读取与所述信息数据文件相对应的冗余数据文件,对所述冗余数据文件进行解封装,获取所述冗余数据;对所述冗余数据以及所述原始数据进行RS解码,并将RS解码后的纠错数据发送给所述文件访问客户端。
9.如权利要求8所述的系统,其特征在于,所述数据块服务器具体包括RS编码模块,用于从所述原始数据的第一个字节开始,将所述原始数据以k字节单位分割成多个数据段,如果最后一个数据段的长度小于k字节,则使用0进行填充,使所述最后一个数据段的长度等于k字节;分别对每一个k字节的数据段进行RS编码,获取多个m 字节的冗余数据,并将所述多个m字节的冗余数据保存在所述数据块服务器的缓存中;封装模块,用于从所述缓存中读取所述多个m字节的冗余数据,将开始标识符插入到每一个m字节的冗余数据的第一个字节之前,将结束标识符插入到每一个m字节的冗余数据的最后一个字节之后,获取封装后的所述冗余数据;构造模块,用于根据数据块名称构造冗余数据文件名称,并根据所述冗余数据文件名称获取所述冗余数据文件句柄。
10.如权利要求9所述的系统,其特征在于,所述数据块服务器具体包括解封装模块,用于分别根据开始标识符和结束标识符读取封装后的所述冗余数据,获取多个m字节的冗余数据;RS解码模块,用于从所述原始数据的第一个字节开始,每次读取k字节数据,从所述冗余数据的第一个字节开始,每次读取m字节数据,对η字节的所述原始数据和所述冗余数据进行RS纠错解码,每次生成k字节的纠错数据,直到处理完所述原始数据,其中,η = k+m ;如果η个字节中发生错误的字节超过m/2个,则在所述数据块服务器中记录RS纠错解码错误日志;如果最后一段需要解码的原始数据的长度小于k字节,则只对所述最后一段原始数据中对应的字节进行RS纠错解码运算。
全文摘要
本发明公开了一种数据存储方法及系统。该方法包括文件访问客户端根据元数据服务器选定的数据块服务器位置,向相应的数据块服务器发送原始数据、原始数据的数据块句柄、以及原始数据的字节范围;数据块服务器根据字节范围对原始数据进行里所RS编码,并将原始数据、以及数据块句柄写入到存储媒介,保存为信息数据文件;对进行RS编码后获取的冗余数据进行封装,获取冗余数据文件句柄,并将封装后的冗余数据、以及冗余数据文件句柄写入存储媒介,保存为冗余数据文件。借助于本发明的技术方案,能够有效提高分布式文件系统的容错能力的同时减少了存储设备的数量,降低了成本。
文档编号G06F17/30GK102364472SQ20111032723
公开日2012年2月29日 申请日期2011年10月25日 优先权日2011年10月25日
发明者刘澍, 肖蓉, 雷靖 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1