一种分布式存储系统的目录读取方法及客户端与流程

文档序号:13236769阅读:118来源:国知局
一种分布式存储系统的目录读取方法及客户端与流程

本发明涉及信息技术领域,特别涉及一种分布式存储系统的目录读取方法及客户端。



背景技术:

在信息技术高速发展的当代,数据量越来越大,分布式存储也应运而生。分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。

在分布式存储中,就不得不提到元数据。元数据(metadata),又称中介数据、中继数据,为描述数据的数据(dataaboutdata),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录,为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。

然而在大数据环境下,目录的体量也非常大,目录的存取性能是整个分布式文件系统性能的关键。在现有技术中,分布式存储系统的客户端收到业务端的读取请求消息之后,从元数据服务器(metadataserver,简称为“mds”)并发读取目标目录中多个目录分片对象的目录项,目录项指的是目录中每条描述数据的元数据,再将读取的目录项交付给该客户业务端。若一次未交付完,则再次读取该目标目录中多个目录分片对象的子项元数据并将读取的子项元数据交付给该业务端,直到该目标目录中所有子项元数据都交付完毕为止。

在当前的分布式存储系统中,海量数据越来越多,大目录伴随而生,单个目录下达到几十万、上百万甚至千万级的文件数量;由于数据量越来越大,业务访问时的读目录操作消耗的时间也越来越长,给用户比较差的应用体验。

因此,如何提供一种分布式存储系统的目录读取方法及元数据,来提高业务端读取目录的速度,是本领域技术人员亟待解决的问题。



技术实现要素:

有鉴于此,本发明的目的在于提供一种分布式存储系统的目录读取方法及客户端,来提高业务端读取目录的速度。其具体方案如下:

本发明提供一种分布式存储系统的目录读取方法,应用于分布式存储系统的客户端,包括:

获取业务端针对目标目录发起的读取请求;

确定所述目标目录的目录大小;

判断所述目录大小是否超过预设阈值,如果是,则针对所述目标目录的部分目录项向所述分布式存储系统中的元数据服务器发起相应的预读操作,以从所述元数据服务器中读取出相应的目录项并保存至本地缓存;

利用所述本地缓存上的目录项对所述读取请求进行响应,若当前所述本地缓存中的目录读取进度满足预设条件,则针对所述目标目录中的剩余目录项再次向所述元数据服务器发起预读操作,直到所述读取请求被完全响应。

优选地,所述针对所述目标目录的部分目录项向所述分布式存储系统中的元数据服务器发起相应的预读操作,以从所述元数据服务器中读取出相应的目录项并保存至本地缓存;利用所述本地缓存上的目录项对所述读取请求进行响应,若当前所述本地缓存中的目录读取进度满足预设条件,则针对所述目标目录中的剩余目录项再次向所述元数据服务器发起预读操作,直到所述读取请求被完全响应,包括:

a11:读取所述元数据服务器上所述目标目录中预设数目的目录项到所述本地缓存上;

a12:向业务端发送所述本地缓存上的目录项,当发送完所述本地缓存上预设比例的当前目录项时,启动下一次读取,将所述目标目录中的下一步要发送的目录项读取到当前发送过目录项的所述本地缓存上;

a13:进入步骤a12,直到从所述本地缓存中向业务端发送完所述目标目录中的所有目录项。

优选地,在步骤a13之后,进一步包括:

判断在预设时间内,是否有针对所述目标目录发起的读取请求,如果否,则释放所述本地缓存。

优选地,在步骤a13之后,进一步包括:

当获取到业务端针对目录发起的读取请求,判断所述本地缓存中是否存在所述目录,如果是,则在所述本地缓存中读取;如果否,则向所述元数据服务器读取。

优选地,从所述元数据服务器中读取出目录项并保存至所述本地缓存的过程中的读取具体为n个线程同时读取;其中,n为大于1的整数。

优选地,所述n个线程同时读取过程,包括:

a21:按照所述目标目录的偏移,向n个预读线程分别分配相应的起始偏移和要读取的文件个数长度;其中n为大于1的整数;

a22:所述预读线程按照所述起始偏移和所述文件个数长度生成报文,发送所述报文到所述元数据服务器,并接收所述元数据服务器返回对应的目录项信息;

a23:将所述目录项信息保存至对应的本地缓存。

优选地,所述判断所述目录大小是否超过预设阈值,包括:

判断所述目标目录的文件个数是否超过预设阈值;

和/或

判断所述目标目录占用的储存空间大小是否超过预设阈值。

优选地,所述直到所述读取请求被完全响应,包括:

直到所述读取请求通过m个线程同时被完全响应;

其中m为大于1的整数。

本发明还提供一种客户端,包括:

请求获取单元,用于获取业务端针对目标目录发起的读取请求;

大小确定单元,用于确定所述目标目录的目录大小;

循环发送单元,用于判断所述目录大小是否超过预设阈值,如果是,则针对所述目标目录的部分目录项向所述分布式存储系统中的元数据服务器发起相应的预读操作,以从所述元数据服务器中读取出相应的目录项并保存至本地缓存;

利用所述本地缓存上的目录项对所述读取请求进行响应,若当前所述本地缓存中的目录读取进度满足预设条件,则针对所述目标目录中的剩余目录项再次向所述元数据服务器发起预读操作,直到所述读取请求被完全响应。

优选地,所述循环发送单元,包括:

读取单元,用于读取所述元数据服务器上所述目标目录中预设数目的目录项到所述本地缓存上;

判定单元,用于向业务端发送所述本地缓存上的目录项,当发送完所述本地缓存上预设比例的当前目录项时,启动下一次读取,将所述目标目录中的下一步要发送的目录项读取到当前发送过目录项的所述本地缓存上;

循环单元,用于向所述本地缓存中读取目录项,直到从所述本地缓存中向业务端发送完所述目录中的所有目录项。

与现有技术相比,上述技术方案具有以下优点:

本发明所提供的一种分布式存储系统的目录读取方法,应用于分布式存储系统的客户端,包括:获取业务端针对目标目录发起的读取请求;确定所述目标目录的目录大小;判断所述目录大小是否超过预设阈值,如果是,则针对所述目标目录的部分目录项向所述分布式存储系统中的元数据服务器发起相应的预读操作,以从所述元数据服务器中读取出相应的目录项并保存至本地缓存;利用所述本地缓存上的目录项对所述读取请求进行响应,若当前所述本地缓存中的目录读取进度满足预设条件,则针对所述目标目录中的剩余目录项再次向所述元数据服务器发起预读操作,直到所述读取请求被完全响应。

可见,本发明中,在分布式存储系统的客户端向业务端发送目录时,根据本地缓存中的目录读取进度,将所述目录中的目录项读取到本地缓存中,直到所述读取请求被完全响应,这样本地缓存中就一直储存有当前要向业务端发送的目录项,从而可以不间断的向业务端发送目录。相对于现有技术中发送目录,中间有业务端需要等待元数据服务器向本地缓存储存目录项的等待时间,上述方案无需等待时间,从而加快元数据服务器上目录的发送速度。

本发明还提供了一种客户端,能够运行上述方法,也具有上述的有益效果。

附图说明

为了更清楚地说明本发明实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明第一种具体实施方式所提供的一种分布式存储系统的目录读取方法的流程图;

图2为本发明第二种具体实施方式所提供的一种分布式存储系统的目录读取方法的分批储存目录的流程图;

图3为本发明第三种具体实施方式所提供的一种分布式储存系统中读取目录的方法的多线程读取目录项的流程图;

图4为本发明具体实施方式所提供的一种客户端的组成示意图;

图5为本发明具体实施方式所提供的一种客户端的循环发送单元组成示意图。

具体实施方式

本发明的核心是提供一种分布式存储系统的目录读取方法,应用于分布式存储系统的客户端,包括:获取业务端针对目标目录发起的读取请求;确定所述目标目录的目录大小;判断所述目录大小是否超过预设阈值,如果是,则针对所述目标目录的部分目录项向所述分布式存储系统中的元数据服务器发起相应的预读操作,以从所述元数据服务器中读取出相应的目录项并保存至本地缓存;利用所述本地缓存上的目录项对所述读取请求进行响应,若当前所述本地缓存中的目录读取进度满足预设条件,则针对所述目标目录中的剩余目录项再次向所述元数据服务器发起预读操作,直到所述读取请求被完全响应。这样本地缓存中就一直储存有当前要向业务端发送的目录项,从而可以不间断的向业务端发送目录。

下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。

分布式存储系统一般涉及元数据服务器、客户端和业务端。业务端、客户端和元数据服务器可以理解为三个服务器,它们之间通过网络连接。元数据服务器负责管理本文件系统内所有文件的文件名、数据块等元数据信息,并向客户端提供元数据写入和查询等操作。业务端即为使用文件系统的应用程序。当业务端需要获取文件系统的目标目录下的目录项时,就需要客户端从元数据服务器中读取该目标目录的所有目录分片对象,从中提取目录项,交付给该业务端。本发明实施例涉及的就是客户端从元数据服务器中读取目录项,并将读取的目录项发送给业务端的过程

如图1所示,图1为本发明第一种具体实施方式所提供的一种分布式存储系统的目录读取方法的流程图,所述方法包括:

步骤s11:获取业务端针对目标目录发起的读取请求。

在本发明的第一种具体实施方式中,本发明实施方式所提供的一种分布式存储系统的目录读取方法,首先要获取业务端针对目标目录发起的读取请求。在分布式存储系统中,一般有元数据服务器,元数据服务器向业务端提供元数据服务,也就是提供目录。元数据服务器一般搭配有分布式存储系统的客户端,该分布式存储系统的客户端能够接受业务端发送的读取目录请求,一般地,业务端指的可以是与元数据服务器签署了协议,获得元数据服务器的服务支持的设备,当然,也可以无需签署协议的业务端,元数据服务器进行开放式的元数据服务。

步骤s12:确定所述目标目录的目录大小。

在接收到业务端发送的目标目录请求后,分布式存储系统的客户端向元数据服务器请求所数目目标目录的目录大小,目录大小可以用目录中所含有的目录项数量来表示,这里所述的目录项指的是描述具体文件的属性的数据,也就是通常所说的描述数据的数据,包括文件的属性,比如文件创建、修改及访问的时间,文件拥有者,文件权限,映射信息等,也可以称为元数据。

值得指出的是,目录大小可以用目录中含有的目录项数量来表示,也可以用目录所占用的存储空间的大小来表示,当然如果有其他的恰当方式来表示目录大小,也是可行的。

步骤s13:判断所述目录大小是否超过预设阈值,如果是,则针对所述目标目录的部分目录项向所述分布式存储系统中的元数据服务器发起相应的预读操作,以从所述元数据服务器中读取出相应的目录项并保存至本地缓存;利用所述本地缓存上的目录项对所述读取请求进行响应,若当前所述本地缓存中的目录读取进度满足预设条件,则针对所述目标目录中的剩余目录项再次向所述元数据服务器发起预读操作,直到所述读取请求被完全响应。

元数据服务器上的元数据,也就是目录,存储在硬盘上,当接收到读取目录的请求后,元数据服务器上运行的程序可以判断所请求的目录的大小是否超过了预先设定好的数量标准,如果超过了,那么这个目录按照常规的方法读取就会花费较多的时间,因此就要采取本发明第一种具体实施方式中的方法,针对所述目标目录的部分目录项向所述分布式存储系统中的元数据服务器发起相应的预读操作,以从所述元数据服务器中读取出相应的目录项并保存至本地缓存;利用所述本地缓存上的目录项对所述读取请求进行响应,若当前所述本地缓存中的目录读取进度满足预设条件,则针对所述目标目录中的剩余目录项再次向所述元数据服务器发起预读操作,直到所述读取请求被完全响应,这样本地缓存中就一直储存有当前要向业务端发送的目录项,从而可以不间断的向业务端发送目录。相对于现有技术中发送目录,中间有业务端需要等待元数据服务器向本地缓存储存目录项的等待时间,上述方案无需等待时间,从而加快元数据服务器上目录的发送速度。

其中,值得指出的是,在判断所述目录的大小是否超过预设阈值时,可以采用判断所述目录的文件个数是否超过预设阈值的方式,比如是否超过十万个、或则五万个,也可以采用判断所述目录占用的储存空间大小是否超过预设阈值的方式,比如100m。因为在现有技术中,元数据服务器上的每条元数据都是有固定形式的,相应的每条元数据所占用的空间也是大体相当的,由此可知,目录中的目录项的数量越多,即目录描述的文件个数越多,那么这个目录相对应的占用的储存空间的大小也就越大,所以可以采用判断所述目录的文件个数是否超过预设阈值的方式,也可以采用判断所述目录占用的储存空间大小是否超过预设阈值的方式,来判定目录的大小。

如图2所示,图2为本发明第二种具体实施方式所提供的一种分布式存储系统的目录读取方法的分批储存目录的流程图。

在第一种具体实施方式中,针对所述目标目录的部分目录项向所述分布式存储系统中的元数据服务器发起相应的预读操作,以从所述元数据服务器中读取出相应的目录项并保存至本地缓存;利用所述本地缓存上的目录项对所述读取请求进行响应,若当前所述本地缓存中的目录读取进度满足预设条件,则针对所述目标目录中的剩余目录项再次向所述元数据服务器发起预读操作,直到所述读取请求被完全响应,这个过程可以有多种方式,在本实施例中重点说明一种实施该过程的方式。

该过程可以包括:

a11:读取所述元数据服务器上所述目标目录中预设数目的目录项到所述本地缓存上。

首先,为了让元数据服务器开始时有目录的目录项可以发送,而一般地,都是从目录的开始部分开始顺序发送,所以元数据服务器从业务端所申请目录的开端开始读取,读取预设数目的目录项到本地缓存中去,这里所说的预设数目可以是预先设定好的值,也可以是根据业务端所申请的目录大小,预先设定好的对应的值,比如可以设定这个预设数目为目录中的10000个目录项,相应地也可以申请本地缓存的大小为正好储存10000个目录项大小的本地缓存空间。

a12:向业务端发送所述本地缓存上的目录项,当发送完所述本地缓存上预设比例的当前目录项时,启动下一次读取,将所述目标目录中的下一步要发送的目录项读取到当前发送过目录项的所述本地缓存上;

其次,分布式存储系统的客户端将本地缓存中储存的目录的目录项发送到业务端去。这里说的本地缓存中储存的目录的目录项指的可以是步骤a11中本地缓存的目录的开始部分,也可以是后续步骤a13中本地缓存中循环储存的目录的目录项。

当元数据服务器发送到已经本地缓存的目录项的预设比例时,例如50%,就可以进行下一次的读取,将下一步要发送的目录项读取到刚刚发送过目录项的本地缓存上去,这样做是因为,这里的目录比较大,而本地缓存可能并不能够容纳下目录中所有的目录项。因此循环使用本地缓存是一个比较可行的方法,发送过目录项的本地缓存对于读取目录这个任务来说,已经失去了意义,可以将里边的内容废弃,然后重新利用来存储下一步中要发送的目录项,当然也可以利用另外的本地缓存空间来储存目录项。

由于步骤a11中在本地缓存中储存的目录项的数目是预设好的,所以根据这个数目,当到达一个比例时,可以是50%,也可以是别的比例,比如10%,每次发送预设数目的目录项的预设比例时,就再次本地缓存刚才所读取的预设比例的目录项到读取过的本地缓存中去。

a13:进入步骤a12,直到从所述本地缓存中向业务端发送完所述目标目录中的所有目录项。

为了将整个目录都发送到业务端,只要目标目录中还有尚未储存到本地缓存中的目录项,就可以将上述a12的步骤一直循环,直到目标目录中所有的目录项都存储到本地缓存中过。这样循环往复,整个目录都可以更新到本地缓存中去,而本地缓存中储存过的目录项也都发送了出去,就可以达到发送整个目录的目的。

进一步地,为了合理的利用本地缓存中储存的目录项,可以在整个目录发送出去后,把本地缓存中的目录项保存一段时间,例如半个小时,在这半个小时内,没有业务端来请求目录项所在目录,那么就可以释放目录项所在的本地缓存,以减少硬件资源的占用。

值得指出的是,当客户端获取到业务端针对目录发起的读取请求,先在本地缓存中查找是否有所请求的目录,如果有,则直接在本地缓存中读取,如果没有,则向元数据服务器中读取。

如图3所示,图3为本发明第三种具体实施方式所提供的一种分布式储存系统中读取目录的方法的多线程读取目录项的流程图。

在第三种具体实施方式中,重点说明在将目录项从元数据服务器读取到本地缓存的一种实施方式,下面进行说明:

a21:按照所述目标目录偏移,向n个预读线程分别分配相应的起始偏移和要读取的文件个数长度;其中n为大于1的整数。

在本发明的实施例中,需要将元数据服务器上的数据读取到本地缓存中,这时可以采用多线程的方式,也就是n个线程同时读取;其中,n为大于1的整数,首先,要根据线程的数量,还有本次要读取的数量,将要读取的数量分配给每个线程,也就是预读线程有了要自身要读取的文件个数长度;再分配给每个线程要读取的数据的起始地址,也就是预读的起始偏移。这样每个线程就知道了自己的读取数量和起始地址。

a22:所述预读线程按照所述起始偏移和所述文件个数长度生成报文,发送所述报文到所述元数据服务器,并接收所述元数据服务器返回对应的目录项信息。

分布式存储系统的客户端根据步骤a21中的分配好的所述起始偏移和所述文件个数长度生成报文,发送到元数据服务器上,服务器就会根据报文中的信息,返回对应的目录项信息。

a23:将所述目录项信息保存至对应的本地缓存。

分布式存储系统的客户端就可以将返回的目录项放入对应的本地缓存中去,从而成为一个整体,实现了多线程读取元数据服务器上的目录项到本地缓存中的目的。

进一步地,在直到所述读取请求被完全响应时,可以通过m个线程同时响应读取请求,即从所述本地缓存中向业务端通过m个线程同时发送所述目标目录中的所有目录项;其中m为大于1的整数。

如图4所示,图4为本发明具体实施方式所提供的一种客户端的组成示意图。

本发明还提供一种分布式存储系统的客户端,包括:

请求获取单元401,用于获取业务端针对目标目录发起的读取请求;

大小确定单元402,用于确定所述目标目录的目录大小;

循环发送单元403,用于判断所述目录大小是否超过预设阈值,如果是,则针对所述目标目录的部分目录项向所述分布式存储系统中的元数据服务器发起相应的预读操作,以从所述元数据服务器中读取出相应的目录项并保存至本地缓存;

利用所述本地缓存上的目录项对所述读取请求进行响应,若当前所述本地缓存中的目录读取进度满足预设条件,则针对所述目标目录中的剩余目录项再次向所述元数据服务器发起预读操作,直到所述读取请求被完全响应。

如图5所示,图5为本发明具体实施方式所提供的一种客户端的循环发送单元组成示意图。优选地,所述循环发送单元403,包括:

读取单元4031,用于读取所述元数据服务器上所述目标目录中预设数目的目录项到所述本地缓存上;

判定单元4032,用于向业务端发送所述本地缓存上的目录项,当发送完所述本地缓存上预设比例的当前目录项时,启动下一次读取,将所述目标目录中的下一步要发送的目录项读取到当前发送过目录项的所述本地缓存上;

循环单元4033,用于向所述本地缓存中读取目录项,直到从所述本地缓存中向业务端发送完所述目录中的所有目录项。如图5所示,图5为本发明具体实施方式所提供的一种客户端的循环发送单元的组成示意图。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本发明所提供的一种分布式存储系统的目录读取方法及客户端进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施方式的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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