CN101539950A - 数据存取方法和装置 - Google Patents
数据存取方法和装置 Download PDFInfo
- Publication number
- CN101539950A CN101539950A CN200910138580A CN200910138580A CN101539950A CN 101539950 A CN101539950 A CN 101539950A CN 200910138580 A CN200910138580 A CN 200910138580A CN 200910138580 A CN200910138580 A CN 200910138580A CN 101539950 A CN101539950 A CN 101539950A
- Authority
- CN
- China
- Prior art keywords
- memory node
- routing table
- cryptographic hash
- data block
- prefix
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种数据存取方法和装置。该存储方法包括:获得数据块的哈希值前缀或后缀;根据所述数据块的哈希值前缀或后缀建立路由表,以使哈希值前缀或后缀相同的数据块在所述路由表中指向同一个存储节点;根据所述路由表将所述数据块存储于相应的存储节点。本发明实施例通过文件数据块的哈希值前缀或后缀来建立路由表,并以路由表为依据将数据块存储于相应的存储节点,这种有序的存储方式可以在很大程度上提高文件的查找及读取速度。
Description
技术领域
本发明是关于存储领域的文件管理,特别是关于一种数据存取方法和装置。
背景技术
目前,随着存储领域直连式存储(Direct-Attached Storage,DAS)、网络接入存储(Network-Attached Storage,NAS)、存储区域网络(Storage Area Network,SAN)的高速发展,存储新技术不断涌现出来。其中,分布式文件系统得到大力发展,开始广泛地应用于存储解决方案中。
分布式文件系统的设计基于客户机/服务器模式,其分为三个部分:客户端Client、元数据服务器(Metadata Server,MDS)和存储节点(StorageNode,SN)。分布式文件系统在存储文件时需要将文件切分成数据块,然后对各个数据块进行哈希计算,最后根据哈希值进行分配存储节点。传统技术中,元数据服务器在给数据块分配存储节点时,采用的是根据哈希值进行随机分配,然后记录存储节点和数据块之间的对应关系。哈希算法可以将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值即称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式,要找到同一个哈希值的两个不同的输入,在计算上是不可能的,所以以哈希值为依据进行分布式存储可以保证数据的唯一性和完整性。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题,现有技术查找数据块和存储节点的对应关系时很不方便,从而也极大地影响了对数据块的读取速度。
发明内容
本发明实施例提供一种数据存取方法和装置,用于提高文件的查找及读取速度。
本发明实施例提出了一种数据存储方法,该方法包括:获得数据块的哈希值前缀或后缀;根据所述数据块的哈希值前缀或后缀建立路由表,以使哈希值前缀或后缀相同的数据块在所述路由表中指向同一个存储节点;根据所述路由表将所述数据块存储于相应的存储节点。
本发明实施例还提出了一种数据读取方法,该方法包括:获得待读取数据块的哈希值前缀或后缀和路由表;根据所述哈希值前缀或后缀从所述路由表中获得所述数据块所在的存储节点;向所述存储节点发送请求以读取所述待读取数据块。
本发明实施例还提出了一种元数据服务器,包括获取单元,用于获得数据块的哈希值前缀或后缀;路由单元,用于根据所述数据块的哈希值前缀或后缀建立路由表,以使哈希值前缀或后缀相同的数据块在所述路由表中指向同一个存储节点;数据存储单元,用于根据所述路由表将所述数据块存储于相应的存储节点。
本发明实施例还提出了一种客户端,包括获取单元,用于获得待读取数据块的哈希值前缀或后缀和路由表;数据读取单元,用于根据所述哈希值前缀或后缀从所述路由表中获得所述待读取数据块所在的存储节点,并向所述存储节点发送请求以读取所述待读取数据块。
本发明实施例提供的技术方案通过数据块的哈希值前缀或后缀来建立路由表,并以路由表为依据将数据块存储于相应的存储节点,这种有序的存储方式可以在很大程度上提高文件的查找及读取速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种数据存储方法流程图;
图2为本发明实施例一提供的一种前缀树的结构示意图;
图3为本发明实施例二提供的一种数据存储方法流程图;
图4为本发明实施例三提供的一种数据存储方法流程图;
图5为本发明实施例四提供的一种分布式文件系统的网络结构图;
图6为本发明实施例四提供的前缀树和路由表的示意图;
图7为本发明实施例五提供的在图6基础上经过修改后的前缀树和路由表示意图;
图8为本发明实施例六提供的一种数据读取方法流程图;
图9为本发明实施例六提供的一种数据读取过程示意图;
图10为本发明实施例六提供的现有的数据读取过程示意图;
图11为本发明实施例八提供的一种元数据服务器的结构图;
图12为本发明实施例九提供的一种元数据服务器的结构图;
图13为本发明实施例十提供的一种元数据服务器的结构图;
图14为本发明实施例十一提供的一种元数据服务器的结构图;
图15为本发明实施例十二提供的一种客户端的结构图;
图16为本发明实施例十三提供的一种客户端的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
如图1所示为本发明实施例一提供的一种数据存储方法流程图。该方法包括:
S101:获得数据块的哈希值前缀,需要指出的是,本发明对于哈希值后缀也同样适用,其原理和方法和哈希值的前缀并无区别,因此在以下描述中将只以哈希值前缀对本发明进行描述。
S102:根据所述数据块的哈希值前缀建立路由表,以使哈希值前缀相同的数据块在所述路由表中指向同一个存储节点。
S103:根据所述路由表将所述数据块存储于相应的存储节点。
作为本发明的一个实施例,在步骤S101中,为了得到文件的数据块,需将文件按照一定的分片算法切分成多个数据块,该分片算法为一现有技术,在此不多介绍,其可以包括删除代码算法(Erasure Code),迭代深度优先算法(IDA)等算法。然后,对上述切分所得到的数据块进行哈希运算得到每个数据块的哈希值以及哈希值前缀,哈希值前缀是在哈希值的基础上取得的,其用于为数据块有序地分配存储节点,在本实施例中,可以取哈希值的N位前缀;而哈希值则用于将相应的数据块存储在存储节点内的特定位置上,从而方便后续的数据读取。目前的哈希算法多种多样,比如常用的有:MD5,SHA-1,SHA-2,SHA-256,SHA-512等等,在本发明实施例中,并不限定以何种哈希算法对数据块进行哈希运算。
元数据服务器再根据上述得到的哈希值的N位前缀建立前缀树和路由表,这里的前缀树只是为了配合路由表对本发明实施例加以说明而加入的,实际中可以只建立路由表,在路由表中我们将哈希值的N位前缀相同的数据块指向同一个存储节点,在本发明实施例中,N的取值是根据实际的存储节点数量来确定的,一般在1--8位不等。如图2所示为本发明实施例一提供的前缀树的结构示意图,其中,实心圆代表叶子节点,而矩形则代表数据块,从图2中可见,该前缀树上有5个叶子节点:节点204、205、206、207和208,该5个叶子节点代表了物理上的5个存储节点,另外图2中每个父节点下的子节点都是在父节点内数据块哈希值的基础上,按照哈希值中N位前缀相同进行的分类,越往下,其分类越细。比如节点202和203是在节点201的基础上按照N位前缀相同进行的数据块分类,而节点204和205则是在节点202的基数上按照N+2位前缀相同进行的再分类。
作为本发明的一个实施例,步骤S102中元数据服务器在建立路由表后,还包括利用负载均衡算法计算路由表中存储节点的负载,如果负载均衡,则根据路由表将所述数据块存储于相应的存储节点;如果负载不均衡,则调整路由表,再次利用负载均衡算法计算存储节点负载。
作为本发明的一个实施例,上述所说的负载均衡算法包括数据块数量优先法、数据块大小优先法或权重法。其中,数据块数量优先法根据比较每个存储节点下的数据块数量来确定该存储节点负载;数据块大小优先法根据比较每个存储节点下的所有数据块大小来确定该存储节点负载;权重法是事先定义好每个存储节点下数据块数量的权重和数据块大小的权重,然后确定该存储节点负载。上述各种负载均衡算法可以根据实际情况加以选用,或者将各种算法结合起来使用。
经过上述负载均衡算法,如果存储节点的负载均衡,则根据路由表中数据块所指向的存储节点进行数据存储;如果发现存储节点的负载不均衡,则找出负载较重的存储节点,增加负载较重的存储节点内的数据块的哈希值前缀或后缀的位数,以形成新的哈希值前缀或后缀,使所述新的哈希值前缀或后缀相同的数据块在所述路由表中指向其它负载较轻的存储节点,即将该存储节点上的数据块按照M位哈希值前缀进一步进行分类,然后将其中一部分M位哈希值位前缀相同的数据块分配到其他负载较轻的存储节点之上,这里M为大于N的整数。比如,找出负载最重的存储节点,该存储节点上存放的是N位(例如2位)前缀相同的数据块,然后进一步根据M位(例如3位)前缀相同,将上述数据块加以分类并将其中一部分3位前缀相同的数据块分配到其它负载较轻的存储节点之上。元数据服务器在完成上述负载调整后,会动态修改相应的前缀树和路由表,以记录下相应的改动。
本发明实施例通过数据块的哈希值前缀来建立前缀树及路由表,并以路由表为依据将数据块存储于相应的存储节点,这种有序的存储方式可以在很大程度上提高文件的查找及读取速度。另外,本发明实施例在进行数据存储的同时还会对存储节点的负载情况进行分析,并动态修改路由表以均衡存储节点的负载。
实施例二
如图3所示为本发明实施例二提供的一种数据存储方法流程图。
S301:元数据服务器根据分片算法将所述文件切分成多个数据块,并计算出全部数据块的哈希值以及哈希值的N位前缀。
S302:元数据服务器根据哈希值前缀建立路由表,以使哈希值中N位前缀相同的数据块在路由表中指向同一个存储节点。
S303:元数据服务器根据路由表将数据块存储于相应的存储节点。
S304:元数据服务器将数据块的哈希值、哈希值的N位前缀以及路由表同步至客户端。
在本实施例中步骤S301中完成文件切分以及计算数据块的哈希值、哈希值前缀的是元数据服务器,且在步骤S303之后,还增加了元数据服务器将数据块的哈希值、哈希值的N位前缀以及路由表同步至客户端这一步骤,该步骤是为了让客户端拥有一份哈希值、哈希值的N位前缀以及路由表的本地副本,以方便后续的数据查找和读取,另外当客户端拥有哈希值、哈希值的N位前缀以及路由表的本地副本后,可以为元数据服务器分担数据查找的负荷,从而大大降低了元数据服务器的负荷。
作为本发明的一个实施例,步骤S302中元数据服务器在建立路由表后,还包括利用负载均衡算法计算路由表中存储节点的负载,如果负载均衡,则根据路由表将所述数据块存储于相应的存储节点;如果负载不均衡,则调整路由表,再次利用负载均衡算法计算存储节点负载。
实施例三
如图4所示为本发明实施例三提供的一种数据存储方法流程图。
S401:客户端根据分片算法将所述文件切分成多个数据块,并计算出全部数据块的哈希值以及哈希值的N位前缀,然后将哈希值及哈希值的N位前缀上传至元数据服务器。某些实施方式中,也可以是元数据服务器从客户端提取哈希值及哈希值的N位前缀。
S402:元数据服务器根据哈希值的N位前缀建立路由表,在路由表中将哈希值中N位前缀相同的数据块指向同一个存储节点。
S403:元数据服务器根据路由表将数据块存储于相应的存储节点。
S404:元数据服务器将数据块的路由表同步至客户端。
在本实施例中步骤S402和步骤S403和实施例二中步骤S302及步骤S303相同,所不同的是,在本实施例步骤S401中完成文件切分以及计算数据块的哈希值以及哈希值前缀的是客户端,客户端在完成了切分和哈希计算后还将哈希值及哈希值的N位前缀上传至元数据服务器,作为本发明的一个实施例,也可以是客户端完成切分及哈希计算后通知元数据服务器来提取哈希值及哈希值的N位前缀。另外在步骤S403之后,元数据服务器只是将路由表同步至客户端,这是由于客户端在步骤S401中已经保存了一份哈希值及哈希值前缀的本地副本。
作为本发明的一个实施例,步骤S402中元数据服务器在建立路由表后,还包括利用负载均衡算法计算路由表中存储节点的负载,如果负载均衡,则根据路由表将所述数据块存储于相应的存储节点;如果负载不均衡,则调整路由表,再次利用负载均衡算法计算存储节点负载。
实施例四
本实施例是以一具体实例对上述实施例的存储操作做进一步说明,具体的说是对实施例二的存储操作做进一步说明。如图5所示为本发明实施例四提供的一种分布式文件系统的网络结构图。该系统中包括客户端501、元数据服务器502、第一存储节点503、第二存储节点504和第三存储节点505。其中,客户端501和元数据服务器502相连,而第一存储节点503、第二存储节点504和第三存储节点505都分别和客户端501和元数据服务器502相连。
客户端501首先在本地完成一写操作,创建一个完整的文件,假设该文件的文件名为“Mary.doc”,其文件内容为:“Mary had a little lamb little lamb..”。然后客户端501将该文件上传至元数据服务器502以进行数据存储。
元数据服务器502接收客户端501上传的文件,并对该文件按照分片算法切分成若干数据块,如图6所示,上述文件被切分成九个数据块:“Mary”,“had”,“a l”,“ittl”,“e la”,“mb l”,“ittl”,“e la”,“mb..”,该切分是以四个字符为一组进行的切分(包括空格)。
然后,元数据服务器502对上述9个数据块按照哈希算法计算出它们各自的哈希值,假设上述9个数据块的哈希值分别为:1427,3273,7122,1483,3218,7152,1483,3218,1422,其中,哈希值1483及3218为重复出现的值,这表示它们所代表的数据块也重复出现了。元数据服务器502再根据上述哈希值取N位前缀来建立前缀树和路由表,在本实施例中,我们N取2,因而建立的前缀树及路由表如图6所示。其中,前缀树包含了一个父节点和三个子节点,该三个子节点即分别代表第一存储节点503、第二存储节点504和第三存储节点505。从路由表中可以看出,本实施例中哈希值前缀为32的数据块指向了第三存储节点505,哈希值前缀为71的数据块指向了第二存储节点504,而哈希值前缀为14的数据块则指向了第一存储节点503。
当元数据服务器502建立起上述前缀树和路由表之后,启动负载均衡算法计算每个存储节点中的负载是否均衡,在本实施例中,负载均衡算法采用数据块数量优先法,通过计算可以看出,第一存储节点503、第二存储节点504和第三存储节点505内所存放的数据块数量分别是3、2、2,因此此时各个存储节点的负载都是均衡的,此时元数据服务器502即可根据路由表将各个数据块按照它们的指向存入各个存储节点之内,其数据存放结果如图6所示。
当然,假设上述第一存储节点503、第二存储节点504和第三存储节点505内存放的数据块数量为4、2、1,即以前缀为14的数据块有4个,而前缀为32的数据块只有1个的时候,则元数据服务器502会对第一存储节点503内的数据块按照N=3或者N=4进行再分类,并将分出的一部分数据指向第三存储节点505,然后再相应的修改前缀树及路由表。
元数据服务器502在将上述数据存入存储节点后,即将数据块的哈希值、哈希值的N位前缀及路由表同步至客户端501。
实施例五
本实施例是在实施例四的基础上,阐述当分布式文件系统存储节点发生改变时,本发明实施例如何做到使各个存储节点负载均衡。这里所说的存储节点发生改变包括新增、删除存储节点以及存储节点发生故障。本实施例中分布式文件系统的架构和实施例四中相同,在此不再赘述。
在本实施例中,当该分布式文件系统新增一第四存储节点506时,此时系统内的负载必然是不均衡的。元数据服务器502检测到新增存储节点后即启动负载均衡算法(数据块数量优先法),发现系统内负载并不均衡。元数据服务器502查找出负载最高的第一存储节点503,并对其内的数据按照前缀3位相同进行再分类(即M取3),此时,第一存储节点503内的数据块被分为两类:148*和142*,元数据服务器502将前缀为148指向了第一存储节点503,而将前缀为142的数块指向了第四存储节点506,并修改相应的前缀树和路由表,修改后的前缀树和路由表可以如图7所示。
当然,上述元数据服务器502也可以将前缀为142指向第一存储节点503,而将前缀为148的数块指向第四存储节点506,这种指向的不同只是依附于不同的软件编程来完成的。
同样的,当本实施例中的分布式文件系统删除第三存储节点505、或者第三存储节点505发生故障时,元数据服务器502也会启动负载均衡算法,在本实施例中,元数据服务器会找出剩余存储节点中负载最小的第二存储节点504,并将原第三存储节点505内的数据块(即前缀为32的数据块)指向该第二存储节点504,然后修改相应的前缀树和路由表。
作为本发明的一个实施例,元数据服务器502在因增加、删除存储节点或者存储节点故障后修改的路由表,均会被实时地同步到客户端501内。
本发明实施例在分布式文件系统存储节点发生改变时,以负载均衡算法动态修改路由表,重新分配数据块的存储,从而使得本发明实施例可以在分布式文件系统结构变动时仍然保持存储节点的负载均衡。
实施例六
如图8所示为本发明实施例六提供的一种数据读取方法流程图。该方法包括:
S801:客户端获得待读取数据块的哈希值前缀和路由表。
S802:根据所述哈希值前缀从所述路由表中获得所述数据块所在的存储节点。
S803:向所述存储节点发送请求以读取所述待读取数据块。
获得待读取数据块的哈希值前缀或后缀包括:
将文件切分成多个数据块,并计算出全部数据块的哈希值前缀或后缀,或者接收由元数据服务器将文件切分成多个数据块并计算出的全部数据块的哈希值前缀或后缀;
获得所述路由表包括:接收由元数据服务器发送的所述路由表。
作为本发明的一个实施例,步骤S801中客户端获得待读取数据块的哈希值前缀的途径有两种:一种是客户端在本地将文件切分成多个数据块,并计算出全部数据块的哈希值前缀,而后保存的哈希值前缀的本地副本;另一种是元数据服务器将文件切分成多个数据块并计算出的全部数据块的哈希值前缀,而客户端接收该哈希值前缀,在此,客户端接收哈希值前缀又可以包括客户端主动获取和元数据服务器主动同步给客户端两种方式。
作为本发明的一个实施例,客户端查找存储节点所需的路由表是由元数据服务器完成存储后同步至客户端的,这样可以节省查找所需的时间,当然本发明实施例也不排除客户端在需要读取文件的时候向元数据服务器请求返回路由表的情况。
作为本发明的一个实施例,我们将上述数据读取方法进一步加以细分,如图9所示,该方法包括:
S901:在客户端输入要查找的文件。
S902:客户端在本地查找上述文件切分后的所有数据块的哈希值和哈希值的N位前缀。
S903:客户端根据哈希值前缀在路由表中快速查找到数据块存放的存储节点位置。
S904:客户端向步骤S903中的存储节点发送读取数据块的请求。
S905:存储节点收到数据块读取请求后,根据和数据块对应的哈希值查找出相应的数据块。
S906:存储节点将查找到的数据块反馈给客户端。
为了更好的理解本发明实施例,以及更好地体现本发明实施例相对于现有技术的优势,下面我们对现有技术中文件的读取过程予以介绍(如图10所示),该读取过程包括:
S1001:在客户端输入要查找的文件。
S1002:客户端向元数据服务器发送查找上述文件的请求。
S1003:元数据服务器根据文件切分情况和数据块的布局信息,在B+树上查找到数据块所在的存储节点。
S1004:元数据服务器将布局信息发送给客户端。
S1005:客户端向指定的存储节点发送查询数据块的请求。
S1006:存储节点根据请求,查找数据块。
S1007:存储节点将查找的数据块反馈给客户端。
由上述可知,本发明实施例在数据读取方面不但应用了根据哈希值前缀查找路由表的读取方式,而且其读取与数据块相对应的存储节点信息的过程都是在客户端完成的,该读取过程完全和元数据服务器无关,因此本发明实施例在读取速度上比现有技术有了大幅提高。另外,元数据服务器的查找速度将决定着整个系统的查找速度,本发明实施例读取数据的过程由于和元数据服务器无关,因此大大降低了元数据服务器的负荷。
实施例七
本实施例是以一具体实例对上述实施例六的数据读取操作做进一步说明,在此我们以实施例二为基础对本实施例加以说明。
我们在客户端501输入需要查找的文件名:Mary.doc。
客户端501首先查找该文件对应数据块的全部哈希值及哈希值的2位前缀,然后根据图6所示的路由表查找到该文件的数据块分别位于第一存储节点503、第二存储节点504和第三存储节点505内。
客户端501向第一存储节点503、第二存储节点504和第三存储节点505分别发送读取相应数据块的请求。上述存储节点在收到客户端的读取请求后,根据哈希值和存储节点中存储地址的对应关系,读取出相应的数据块“Mary”,“had”,“a l”,“ittl”,“e la”,“mb l”,“ittl”,“e la”,“mb..”,并将该些数据块反馈给客户端501。
客户端501收到上述数据块后,按照一定规则予以重组便完成了一次数据读取操作。
实施例八
如图11所示为本发明实施例八提供的一种元数据服务器的结构图。
该元数据服务器1100包括获取单元1101、路由单元1102和数据存储单元1103,获取单元1101、路由单元1102和数据存储单元1103之间依次相连。
其中,获取单元1101用于获得数据块的哈希值前缀。首先,为了得到文件的数据块,需将文件按照一定的分片算法切分成多个数据块,然后再对全部数据块进行哈希运算以得到全部数据块的哈希值和哈希值前缀。该文件切分以及哈希运算过程既可以是由元数据服务器1100自己完成的,也可以是由客户端完成后传给元数据服务器1100的:
当文件切分以及哈希运算过程是由元数据服务器1100自己完成的,在本实施例中获取单元1101还具有将将文件切分成多个数据块,并计算出全部数据块哈希值前缀的功能。
当文件切分以及哈希运算过程是由户端完成的,在本实施例中获取单元1101则只需具备和客户端进行通信的功能以接收客户端上传的哈希值和哈希值前缀,或者主动向客户端调用该哈希值和哈希值前缀。
获取单元1101将获取到的数据块的哈希值前缀传给路由单元1102,路由单元1102即根据数据块的哈希值前缀建立路由表,以使哈希值前缀相同的数据块在路由表中指向同一个存储节点,该路由表的具体建立过程和方法可以参见实施例一。
数据存储单元1103用于根据路由表将数据块存储于相应的存储节点。数据块存储于存储节点后,其哈希值和存储节点内的存储地址存在一个对应关系,这为后续的数据读取奠定了基础。
本发明实施例的元数据服务器通过数据块的哈希值前缀来建立路由表,并在路由表中将哈希值前缀相同的数据块指向了同一个存储节点,这种有序的分配方式可以在很大程度上提高文件的查找及读取速度。
实施例九
如图12所示为本发明实施例九提供的一种元数据服务器的结构图。该元数据服务器1200包括哈希运算单元1201、获取单元1202、路由单元1203、数据存储单元1204和同步单元1205,其中,哈希运算单元1201、获取单元1202、路由单元1203和数据存储单元1204依次相连,而同步单元1205则分别和哈希运算单元1201及路由单元1203相连。
哈希运算单元1201用于将文件切分成多个数据块,并计算出全部数据块的哈希值和哈希值前缀。这里,哈希运算单元1201切分的文件来自客户端,其可以是客户端主动上传的,也可以是客户端通知元数据服务器1200,告知其需要存储,要求元数据服务器1200来主动提取。
获取单元1202用于获得数据块的哈希值和哈希值前缀,在本实施例中,其获得的哈希值和哈希值前缀即来自于哈希运算单元1201,其再将获得的哈希值和哈希值前缀传给路由单元1203。
路由单元1203即根据数据块的哈希值前缀建立路由表,以使哈希值前缀相同的数据块在路由表中指向同一个存储节点。
数据存储单元1204用于根据路由表将数据块存储于相应的存储节点。
同步单元1205用于根据路由表将数据块存储于相应的存储节点后,将哈希值、哈希值前缀以及路由表同步至客户端。该步骤是为了让客户端拥有一份哈希值、哈希值的前缀以及路由表的本地副本,以方便后续的数据查找和读取,另外当客户端拥有哈希值、哈希值前缀以及路由表的本地副本后,可以为元数据服务器分担数据查找的负荷,从而大大降低了元数据服务器的负荷。
实施例十
如图13所示为本发明实施例十提供的一种元数据服务器的结构图。该元数据服务器1300包括获取单元1301、路由单元1302、数据存储单元1303和同步单元1304,其中,获取单元1301、路由单元1302和数据存储单元1303依次相连,而同步单元1304则和路由单元1302相连。
在本实施例中路由单元1302和数据存储单元1303的作用和实施例八及实施例九相类似,在此不再赘述。
在本实施例中,获取单元1301用于获取由客户端计算得到的数据块的哈希值和哈希值前缀,这就是说,本实施例文件的切分和计算是在客户端完成的。
和实施例九所不同的是,本实施中同步单元1304在根据路由表将数据块存储于相应的存储节点后,仅将路由表同步至客户端,这是由于客户端在将文件切分和进行哈希计算的时候已经保存了一份哈希值及哈希值前缀的本地副本,因此不再需要元数据服务器1300再反馈哈希值及哈希值前缀了。
实施例十一
如图14所示为本发明实施例十一提供的一种元数据服务器的结构图。该元数据服务器1400包括获取单元1401、路由单元1402、负载均衡单元1403、数据存储单元1404和同步单元1405,其中,获取单元1401、路由单元1402、负载均衡单元1403和数据存储单元1404依次相连,而同步单元1405则和路由单元1402相连。
在本实施例中获取单元1401、路由单元1402、数据存储单元1404和同步单元1405的作用和实施例十中相类似,在此不再赘述。
和实施例十所不同的是,本实施例还包括负载均衡单元1403,其用于确定路由表中各存储节点的负载,若负载均衡,则根据路由表将数据块存储于相应的存储节点;若负载不均衡,则调整路由表。
确定各存储节点负载时,可以采用负载均衡算法,在本实施例中,负载均衡算法包括数据块数量优先法、数据块大小优先法或权重法。其中,数据块数量优先法根据比较每个存储节点下的数据块数量来确定该存储节点负载;数据块大小优先法根据比较每个存储节点下的所有数据块大小来确定该存储节点负载;权重法是事先定义好每个存储节点下数据块数量的权重和数据块大小的权重,然后确定该存储节点负载。上述各种负载均衡算法可以根据实际情况加以选用,或者将各种算法结合起来使用。
经过上述负载均衡算法,如果存储节点的负载均衡,则根据路由表中数据块所指向的存储节点进行数据存储;如果发现存储节点的负载不均衡,则找出负载较重的存储节点(假设该些存储节点上原先是按数据块哈希值N位前缀进行存储的,N的取值是根据实际的存储节点数量来确定的,一般在1--8位不等),并将该存储节点上的数据块按照M位哈希值前缀进一步进行分类,然后将其中一部分M位哈希值前缀相同的数据块分配到其他负载较轻的存储节点之上,这里M为大于N的整数。比如,找出负载最重的存储节点,该存储节点上存放的是2位前缀相同的数据块,然后进一步根据3位前缀相同,将上述数据块加以分类并将其中一部分3位前缀相同的数据块分配到其它存储节点之上。元数据服务器在完成上述负载调整后,会动态修改相应的前缀树和路由表,以记录下相应的改动。
本发明实施例的元数据服务器在进行数据存储的同时还会对存储节点的负载情况进行分析,并动态修改路由表以均衡存储节点的负载。
实施例十二
如图15所示为本发明实施例十二提供的一种客户端的结构图。该客户端1500包括获取单元1501、数据读取单元1502,它们之间相互连接。
获取单元1501用于获得待读取数据块的哈希值前缀和路由表。获取单元1501获得待读取数据块的哈希值前缀的途径有两种:
当文件切分成数据块,以及数据块的哈希运算是在客户端1500本地完成时,客户端1500会保留一份数据块的哈希值和哈希值前缀的本地副本,获取单元1501从该本地副本中即可获得待读取数据块的哈希值前缀。
当文件切分成数据块,以及数据块的哈希运算是在元数据服务器上完成时,获取单元1501则接收元数据服务器传来的待读取数据块的哈希值前缀。
数据读取单元1502用于根据哈希值前缀从所述路由表中获得待读取数据块所在的存储节点,并向该存储节点发送请求以读取待读取数据块。由于路由表中记录着数据块和存储节点的对应关系,所以可以很容易地获取到存储节点。数据读取单元1502发送的请求中包括待读取数据块的哈希值,哈希值的获取方式可以采用上述哈希值前缀的获取方式,此处不再赘述。当存储节点收到数据读取单元1502发送的请求后,会根据数据块的哈希值和存储节点中存储地址的对应关系,提取出相应的数据块反馈给客户端1500。
本发明实施例的客户端可以根据数据块的哈希值前缀在路由表中路由表快速查找到存储节点位置,因而大大提高了文件的查找和读取速度。
实施例十三
如图16所示为本发明实施例十三提供的一种客户端的结构图。该客户端1600包括哈希运算单元1601、获取单元1602和数据读取单元1603,获取单元1602分别和哈希运算单元1601及数据读取单元1603相连。
哈希运算单元1601用于将文件切分成多个数据块,并计算出全部数据块的哈希值和哈希值前缀。
获取单元1602用于获得待读取数据块的哈希值、哈希值前缀和路由表。在本实施例中,其所获得的待读取数据块的哈希值和哈希值前缀是哈希运算单元1601传来的,而路由表则是元数据服务器传来的。
数据读取单元1603用于根据哈希值前缀从所述路由表中获得待读取数据块所在的存储节点,并向该存储节点发送请求以读取待读取数据块。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种数据存储方法,其特征在于所述方法包括:
获得数据块的哈希值前缀或后缀;
根据所述数据块的哈希值前缀或后缀建立路由表,以使哈希值前缀或后缀相同的数据块在所述路由表中指向同一个存储节点;
根据所述路由表将所述数据块存储于相应的存储节点。
2.如权利要求1所述的数据存储方法,其特征在于,根据所述数据块的哈希值前缀或后缀建立路由表后,所述方法还包括:
确定所述路由表中各存储节点的负载,若负载均衡,则根据所述路由表将所述数据块存储于相应的存储节点;若负载不均衡,则调整路由表。
3.如权利要求2所述的数据存储方法,其特征在于,所述确定所述路由表中各存储节点的负载包括:
根据比较每个存储节点下的数据块数量来确定该存储节点负载;
或者根据比较每个存储节点下的所有数据块大小来确定该存储节点负载;
或者事先定义好每个存储节点下数据块数量的权重和数据块大小的权重,然后确定该存储节点负载。
4.如权利要求2所述的数据存储方法,其特征在于,所述调整路由表包括:
增加负载较重的存储节点内的数据块的哈希值前缀或后缀的位数,以形成新的哈希值前缀或后缀,使所述新的哈希值前缀或后缀相同的数据块在所述路由表中指向其它负载较轻的存储节点。
5.如权利要求1所述的数据存储方法,其特征在于,获得数据块的哈希值前缀或后缀包括:
将文件切分成多个数据块,并计算出全部数据块的哈希值前缀或后缀;或,获得由客户端将文件切分成多个数据块后计算出的全部数据块的哈希值前缀或后缀。
6.如权利要求1所述的数据存储方法,其特征在于,所述根据所述路由表将所述数据块存储于相应的存储节点后,所述方法还包括:
将所述哈希值前缀或后缀以及路由表同步至客户端;或将所述路由表同步至客户端。
7.如权利要求1至6任一项所述的数据存储方法,其特征在于,所述方法还包括:
当存储节点发生改变时,元数据服务器根据存储节点的负载情况,对所述路由表进行动态修改,重新根据所述路由表将所述数据块存储于相应的存储节点;
所述改变包括新增、删除或存储节点故障。
8.一种数据读取方法,其特征在于所述方法包括:
获得待读取数据块的哈希值前缀或后缀和路由表;
根据所述哈希值前缀或后缀从所述路由表中获得所述待读取数据块所在的存储节点;
向所述存储节点发送请求以读取所述待读取数据块。
9.如权利要求8所述的数据读取方法,其特征在于,获得待读取数据块的哈希值前缀或后缀包括:
将文件切分成多个数据块,并计算出全部数据块的哈希值前缀或后缀,或者接收由元数据服务器将文件切分成多个数据块后计算出的全部数据块的哈希值前缀或后缀;
获得所述路由表包括接收元数据服务器的所述路由表。
10.一种元数据服务器,其特征在于,所述元数据服务器包括:
获取单元,用于获得数据块的哈希值前缀或后缀;
路由单元,用于根据所述数据块的哈希值前缀或后缀建立路由表,以使哈希值前缀或后缀相同的数据块在所述路由表中指向同一个存储节点;
数据存储单元,用于根据所述路由表将所述数据块存储于相应的存储节点。
11.如权利要求10所述的元数据服务器,其特征在于,还包括:
哈希运算单元,用于将文件切分成多个数据块,并计算出全部数据块哈希值前缀或后缀;
同步单元,用于根据所述路由表将所述数据块存储于相应的存储节点后,将所述哈希值前缀或后缀以及路由表同步至客户端。
12.如权利要求10或11所述的元数据服务器,其特征在于,还包括
负载均衡单元,用于确定所述路由表中各存储节点的负载,若负载均衡,则根据所述路由表将所述数据块存储于相应的存储节点;若负载不均衡,则调整路由表。
13.一种客户端,其特征在于,所述客户端包括:
获取单元,用于获得待读取数据块的哈希值前缀或后缀和路由表;
数据读取单元,用于根据所述哈希值前缀或后缀从所述路由表中获得所述待读取数据块所在的存储节点,并向所述存储节点发送请求以读取所述待读取数据块。
14.如权利要求13所述的客户端,其特征在于,还包括:
哈希运算单元,用于将文件切分成多个数据块,并计算出全部数据块的哈希值前缀或后缀。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910138580A CN101539950A (zh) | 2009-05-08 | 2009-05-08 | 数据存取方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910138580A CN101539950A (zh) | 2009-05-08 | 2009-05-08 | 数据存取方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101539950A true CN101539950A (zh) | 2009-09-23 |
Family
ID=41123136
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910138580A Pending CN101539950A (zh) | 2009-05-08 | 2009-05-08 | 数据存取方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101539950A (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101957861A (zh) * | 2010-10-18 | 2011-01-26 | 江苏大学 | 新型元数据服务器集群和基于调整表的元数据管理方法 |
CN102004797A (zh) * | 2010-12-24 | 2011-04-06 | 深圳市同洲电子股份有限公司 | 一种数据处理方法、装置和系统 |
CN102065098A (zh) * | 2010-12-31 | 2011-05-18 | 网宿科技股份有限公司 | 网络节点之间数据同步的方法和系统 |
CN103873504A (zh) * | 2012-12-12 | 2014-06-18 | 鸿富锦精密工业(深圳)有限公司 | 数据分块存储至分布式服务器的系统及方法 |
CN104301233A (zh) * | 2014-10-31 | 2015-01-21 | 易准科技发展(上海)有限公司 | 路由访问方法、路由访问系统及用户终端 |
CN104424220A (zh) * | 2013-08-23 | 2015-03-18 | 阿里巴巴集团控股有限公司 | 一种数据处理方法及装置 |
CN104468793A (zh) * | 2014-12-10 | 2015-03-25 | 北京奇虎科技有限公司 | 分布式数据存储方法及分布式数据集群系统 |
CN104580439A (zh) * | 2014-12-30 | 2015-04-29 | 创新科存储技术(深圳)有限公司 | 一种云存储系统中使数据均匀分布的方法 |
CN105025057A (zh) * | 2014-04-25 | 2015-11-04 | 中兴通讯股份有限公司 | 一种实现用户数据分布的方法、装置及系统 |
CN105100149A (zh) * | 2014-05-13 | 2015-11-25 | 中国电信股份有限公司 | 用于管理文件的方法和系统 |
CN106201771A (zh) * | 2015-05-06 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 数据存储系统和数据读写方法 |
CN109388351A (zh) * | 2018-12-18 | 2019-02-26 | 平安科技(深圳)有限公司 | 一种分布式数据存储的方法及相关装置 |
CN109902071A (zh) * | 2019-01-31 | 2019-06-18 | 阿里巴巴集团控股有限公司 | 业务日志存储方法、系统、装置及设备 |
CN110955681A (zh) * | 2019-10-14 | 2020-04-03 | 京东数字科技控股有限公司 | 一种信息处理方法、装置、电子设备及存储介质 |
CN111290700A (zh) * | 2018-12-10 | 2020-06-16 | 北京京东尚科信息技术有限公司 | 分布式数据读写方法和系统 |
CN111930757A (zh) * | 2020-09-24 | 2020-11-13 | 南京中兴软件有限责任公司 | 数据处理方法、系统、封装节点和解封装节点 |
CN111966649A (zh) * | 2020-10-21 | 2020-11-20 | 中国人民解放军国防科技大学 | 一种高效去重的轻量级在线文件存储方法及装置 |
CN112130772A (zh) * | 2020-09-29 | 2020-12-25 | 合肥城市云数据中心股份有限公司 | 一种基于稀疏随机纠删码技术的区块链安全存储方法 |
CN115982414A (zh) * | 2022-12-16 | 2023-04-18 | 清华大学 | 一种图数据处理与增量存储方法、装置及计算机设备 |
-
2009
- 2009-05-08 CN CN200910138580A patent/CN101539950A/zh active Pending
Cited By (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101957861A (zh) * | 2010-10-18 | 2011-01-26 | 江苏大学 | 新型元数据服务器集群和基于调整表的元数据管理方法 |
CN102004797A (zh) * | 2010-12-24 | 2011-04-06 | 深圳市同洲电子股份有限公司 | 一种数据处理方法、装置和系统 |
CN102065098A (zh) * | 2010-12-31 | 2011-05-18 | 网宿科技股份有限公司 | 网络节点之间数据同步的方法和系统 |
CN103873504A (zh) * | 2012-12-12 | 2014-06-18 | 鸿富锦精密工业(深圳)有限公司 | 数据分块存储至分布式服务器的系统及方法 |
CN104424220A (zh) * | 2013-08-23 | 2015-03-18 | 阿里巴巴集团控股有限公司 | 一种数据处理方法及装置 |
CN104424220B (zh) * | 2013-08-23 | 2018-07-13 | 阿里巴巴集团控股有限公司 | 一种数据处理方法及装置 |
CN105025057A (zh) * | 2014-04-25 | 2015-11-04 | 中兴通讯股份有限公司 | 一种实现用户数据分布的方法、装置及系统 |
CN105100149A (zh) * | 2014-05-13 | 2015-11-25 | 中国电信股份有限公司 | 用于管理文件的方法和系统 |
WO2016066108A1 (zh) * | 2014-10-31 | 2016-05-06 | 阿里巴巴(中国)有限公司 | 路由访问方法、路由访问系统及用户终端 |
CN104301233A (zh) * | 2014-10-31 | 2015-01-21 | 易准科技发展(上海)有限公司 | 路由访问方法、路由访问系统及用户终端 |
CN104468793B (zh) * | 2014-12-10 | 2017-11-03 | 北京奇虎科技有限公司 | 分布式数据存储方法及分布式数据集群系统 |
CN104468793A (zh) * | 2014-12-10 | 2015-03-25 | 北京奇虎科技有限公司 | 分布式数据存储方法及分布式数据集群系统 |
CN104580439A (zh) * | 2014-12-30 | 2015-04-29 | 创新科存储技术(深圳)有限公司 | 一种云存储系统中使数据均匀分布的方法 |
CN104580439B (zh) * | 2014-12-30 | 2020-01-03 | 深圳创新科技术有限公司 | 一种云存储系统中使数据均匀分布的方法 |
CN106201771A (zh) * | 2015-05-06 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 数据存储系统和数据读写方法 |
CN111290700A (zh) * | 2018-12-10 | 2020-06-16 | 北京京东尚科信息技术有限公司 | 分布式数据读写方法和系统 |
CN109388351A (zh) * | 2018-12-18 | 2019-02-26 | 平安科技(深圳)有限公司 | 一种分布式数据存储的方法及相关装置 |
CN109902071A (zh) * | 2019-01-31 | 2019-06-18 | 阿里巴巴集团控股有限公司 | 业务日志存储方法、系统、装置及设备 |
CN110955681B (zh) * | 2019-10-14 | 2021-09-03 | 京东数字科技控股有限公司 | 一种信息处理方法、装置、电子设备及存储介质 |
CN110955681A (zh) * | 2019-10-14 | 2020-04-03 | 京东数字科技控股有限公司 | 一种信息处理方法、装置、电子设备及存储介质 |
CN111930757A (zh) * | 2020-09-24 | 2020-11-13 | 南京中兴软件有限责任公司 | 数据处理方法、系统、封装节点和解封装节点 |
CN111930757B (zh) * | 2020-09-24 | 2021-01-12 | 南京中兴软件有限责任公司 | 数据处理方法、系统、封装节点和解封装节点 |
CN112130772A (zh) * | 2020-09-29 | 2020-12-25 | 合肥城市云数据中心股份有限公司 | 一种基于稀疏随机纠删码技术的区块链安全存储方法 |
CN111966649B (zh) * | 2020-10-21 | 2021-01-01 | 中国人民解放军国防科技大学 | 一种高效去重的轻量级在线文件存储方法及装置 |
CN111966649A (zh) * | 2020-10-21 | 2020-11-20 | 中国人民解放军国防科技大学 | 一种高效去重的轻量级在线文件存储方法及装置 |
CN115982414A (zh) * | 2022-12-16 | 2023-04-18 | 清华大学 | 一种图数据处理与增量存储方法、装置及计算机设备 |
CN115982414B (zh) * | 2022-12-16 | 2023-07-25 | 清华大学 | 一种图数据处理与增量存储方法、装置及计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101539950A (zh) | 数据存取方法和装置 | |
CN106066896B (zh) | 一种应用感知的大数据重复删除存储系统及方法 | |
US8666955B2 (en) | Data management method and data management system | |
US9183213B2 (en) | Indirection objects in a cloud storage system | |
CN106484877B (zh) | 一种基于hdfs的文件检索系统 | |
CN103473239B (zh) | 一种非关系型数据库数据更新方法和装置 | |
CN105138678B (zh) | 一种地图瓦片数据的读取、分发方法及读取、分发系统 | |
CN103581331B (zh) | 虚拟机在线迁移方法与系统 | |
CN102708165B (zh) | 分布式文件系统中的文件处理方法及装置 | |
US8682874B2 (en) | Information processing system | |
CN108829344A (zh) | 数据存储方法、装置及存储介质 | |
CN110347651B (zh) | 基于云存储的数据同步方法、装置、设备及存储介质 | |
CN108089816B (zh) | 一种基于负载均衡的查询式重复数据删除方法及装置 | |
CN105683898A (zh) | 对储存系统中数据高效存储与检索的组相关哈希表组织 | |
CN102968498A (zh) | 数据处理方法及装置 | |
CN101944124A (zh) | 分布式文件系统管理方法、装置以及对应的文件系统 | |
CN104573064B (zh) | 一种大数据环境下的数据处理方法 | |
CN103176754A (zh) | 一种海量小文件读取存储方法 | |
CN109299056B (zh) | 一种基于分布式文件系统的数据同步方法和装置 | |
CN106909595A (zh) | 一种数据迁移方法及装置 | |
CN103049574A (zh) | 实现文件动态副本的键值文件系统及方法 | |
CN109597903A (zh) | 图像文件处理装置和方法、文件存储系统及存储介质 | |
CN104391961A (zh) | 千万级小文件数据的一种读写解决策略 | |
CN115454994A (zh) | 一种基于分布式键值数据库的元数据存储方法及装置 | |
CN104375782A (zh) | 千万级小文件数据的一种读写解决方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20090923 |