分布式存储客户端读取数据的方法、装置和设备与流程

文档序号:13421236阅读:279来源:国知局
分布式存储客户端读取数据的方法、装置和设备与流程

本发明涉及分布式存储系统领域,特别是涉及一种分布式存储客户端读取数据的方法,还涉及一种分布式存储客户端读取数据的装置、设备及计算机可读存储介质。



背景技术:

分布式存储系统,是通过网络将数据分散存储在多台独立的设备上,以降低网络压力,具有较高的可靠性和安全性。分布式存储的客户端缓存则是客户端节点用于暂存读写数据,用以提高读写性能的逻辑单元。分布式存储将存储节点连接在一起,形成集群,每个存储节点都存在对应的缓存空间,当集群中任意一个节点从后端读取到数据之后,都会将读取到的数据暂存到对应的缓存中。

在现有技术中,存储缓存在节点之间是互相独立的,一个节点读取到数据后,将数据暂存于本地缓存,然后将数据返回前端。也就是说,各个节点向前端返回的数据只能来自本节点的缓存空间,在这种情况下,即使是提供同样对外服务的其他节点中也存在目标数据,该目标数据也是无法使用的。由于各个存储节点独立维护自身的缓存内容,加之机械磁盘天生的读取性能劣势,在这种情况下就会造成极大地读取数据冗余,内存使用率降低,同时也会浪费带宽。

因此,如何降低读取数据冗余,提高内存使用率,是本领域技术人员需要解决的技术问题。



技术实现要素:

本发明的目的是提供一种分布式存储客户端读取数据的方法,该方法能够降低读取数据冗余,提高内存使用率;本发明的另一目的是提供一种分布式存储客户端读取数据的装置、设备及计算机可读存储介质,均具有上述有益效果。

为解决上述技术问题,本发明提供一种分布式存储客户端读取数据的方法,包括:

接收读取目标节点的目标数据的读取请求;

根据所述读取请求,判断所述目标节点的缓存中是否存在所述目标数据对应的位图信息;

若存在,则根据所述位图信息查询所述目标数据对应的读取节点,从所述读取节点的缓存中读取所述目标数据;

若不存在,则将所述读取请求发送至存储端,从所述存储端中读取所述目标数据。

优选的,所述若不存在,则将所述读取请求发送至存储端,从所述存储端中读取所述目标数据之后还包括:

将所述目标数据保存至所述目标节点的缓存中;

对所述目标数据添加标识,根据所述标识记录所述目标数据的读取节点位置,获取所述目标节点的对应的位图信息;

将所述位图信息发送至所述读取节点的缓存中。

优选的,该方法还包括:

更新所述读取节点的缓存中的位图信息。

优选的,所述更新所述读取节点的缓存中的位图信息包括:

所述目标节点定时查询所述目标数据在预定时间内是否被读取;

若未被读取,则发送删除信息至所述读取节点;

所述读取节点根据所述删除信息删除本地缓存中所述目标数据对应的位图信息,并向所述目标节点发送回执;

所述目标节点根据所述回执删除所述目标数据。

为解决上述技术问题,本发明还提供一种分布式存储客户端读取数据的装置,包括:

接收单元,用于接收读取目标节点的目标数据的读取请求;

判断单元,用于根据所述读取请求,判断所述目标节点的缓存中是否存在所述目标数据对应的位图信息;

第一读取单元,用于当所述位图信息存在时,根据所述位图信息查询所述目标数据对应的读取节点,从所述读取节点的缓存中读取所述目标数据;

第二读取单元,用于当所述位图信息不存在时,则将所述读取请求发送至存储端,从所述存储端中读取所述目标数据。

优选的,所述第二读取单元之后还包括:

保存单元,用于将所述目标数据保存至所述目标节点的缓存中;

获取单元,用于对所述目标数据添加标识,根据所述标识记录所述目标数据的读取节点位置,获取所述目标节点的对应的位图信息;

发送单元,用于将所述位图信息发送至所述读取节点的缓存中。

优选的,该装置还包括:

更新单元,用于更新所述读取节点的缓存中的位图信息。

优选的,所述更新单元包括:

查询子单元,用于所述目标节点定时查询所述目标数据在预定时间内是否被读取;

发送子单元,用于当所述目标数据在预定时间内未被读取时,发送删除信息至所述读取节点;

第一删除子单元,用于所述读取节点根据所述删除信息删除本地缓存中所述目标数据对应的位图信息,并向所述目标节点发送回执;

第二删除子单元,用于所述目标节点根据所述回执删除所述目标数据。

为解决上述技术问题,本发明还提供一种分布式存储客户端读取数据的装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述任一种分布式存储客户端读取数据的方法的步骤。

为解决上述技术问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种分布式存储客户端读取数据的方法的步骤。

本发明所提供的一种分布式存储客户端读取数据的方法,包括接收读取目标节点的目标数据的读取请求;根据所述读取请求,判断所述目标节点的缓存中是否存在所述目标数据对应的位图信息;若存在,则根据所述位图信息查询所述目标数据对应的读取节点,从所述读取节点的缓存中读取所述目标数据;若不存在,则将所述读取请求发送至存储端,从所述存储端中读取所述目标数据。

可见,本方法通过对目标数据设置对应的位图信息,实现了各个节点间的信息共享,当接收到前端的数据读取请求时,优先通过位图信息从本地缓存中查询,如果发现目标数据在各个读取节点上均不存在,则再向后端发送数据读取请求,从后端存储中提取数据。通过节点间的缓存共享将所有的缓存聚合在一起,形成缓存池,扩展了单节点的缓存空间,相比较所有数据均通过各节点拼接起来获取的方式,在缓存里命中并直接获取数据更高效,也不会造成较大的读取数据冗余,提高了内存的使用率。

本发明还提供了一种分布式存储客户端读取数据的装置、设备及计算机可读存储介质,均具有上述有益效果。

附图说明

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

图1为本发明提供的一种分布式存储客户端读取数据的方法的流程示意图;

图2为本发明提供的一种分布式存储客户端读取数据的装置的示意图;

图3为本发明提供的一种分布式存储客户端读取数据的设备的示意图。

具体实施方式

本发明的核心是提供一种分布式存储客户端读取数据的方法,该方法能够降低读取数据冗余,提高内存使用率;本发明的另一核心是提供一种分布式存储客户端读取数据的装置、设备及计算机可读存储介质,均具有上述有益效果。

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

请参考图1,图1为本发明提供的一种分布式存储客户端读取数据的方法的流程示意图,该方法可以包括:

s101:接收读取目标节点的目标数据的读取请求;

s102:根据所述读取请求,判断所述目标节点的缓存中是否存在所述目标数据对应的位图信息;

具体的,分布式存储系统通过网络将存储节点连接在一起,形成集群,在纠删模式下,一份数据会被打散到多个节点上。当需要读取数据时,前端将数据读取请求发送至节点,此时,进行读取数据的节点即为目标节点,前端要读取的数据即为目标数据。目标节点根据数据读取请求,判断本地缓存中是否存在目标数据对应的位图信息。

其中,所述位图信息中记录了目标数据所在的读取节点的位置。需要说明的是,所述位图信息可以为一个,即一个位图信息中记录有多个数据对应的读取节点的位置;也可以为多个,即一个位图信息记录一个数据对应的读取节点的位置。位图信息的数目在此不做限定,其数目的不同均不会影响本申请中读取数据的方法的实现。

s103:若存在,则根据所述位图信息查询所述目标数据对应的读取节点,从所述读取节点的缓存中读取所述目标数据;

s104:若不存在,则将所述读取请求发送至存储端,从所述存储端中读取所述目标数据。

具体的,由于位图信息中记录了目标数据所在的读取节点的位置,当本地缓存中存储有目标数据对应的位图信息时,就可以根据位图信息查询到目标数据所在的读取节点的位置,然后从读取节点的缓存中读取目标数据。例如,当查询到目标数据存储于本地缓存中时,则可以直接从本地缓存中读取所述目标数据;当查询到目标数据存储于其他的读取节点中时,则可以从目标数据所在的读取节点中读取目标数据。

如果本地缓存中不存在对应的位图信息,即说明在各个读取节点的缓存中均不存在目标数据,此时就需要将读取请求发送至后端,从后端存储中提取目标数据。

进一步,读取目标数据之后,还可以将目标数据返回至客户端。

本发明所提供的一种分布式存储客户端读取数据的方法,通过对目标数据设置对应的位图信息,实现了各个节点间的信息共享,相比较所有数据均通过各节点拼接起来获取的方式,在缓存里命中并直接获取数据更高效,降低了读取数据冗余,提高了内存使用率。

在上述实施例的基础上:

作为一种优选的实施例,将所述读取请求发送至存储端,从所述存储端中读取所述目标数据之后,还可以将读取到的目标数据保存至目标节点的本地缓存中,获取目标数据对应的位图信息,并将位图信息发送至各个读取节点的缓存中。

具体的,在将目标数据保存至本地缓存后,在本地缓存中,可以对目标数据添加标识,根据标识记录目标数据所在的读取节点的位置。具体的,可以先记录读取节点的ip地址信息,在ip地址信息与目标数据之间形成一一对应的映射关系,并将此映射关系保存至本地缓存中,即为目标数据对应的位图信息。同时,每增加一对映射关系,可以随之更新一次本地缓存中的位图信息。

此外,还可以将位图信息异步发送至其他的读取节点,这样其他的读取节点也可以随之更新对应缓存中的位图信息。例如,前端发送一个数据读取请求至读取节点a,由于读取节点a中不存在目标数据对应的位图信息,则向后端发起请求,在后端存储中读取目标数据,之后就可以将目标数据保存至本地缓存,并获取对应的位图信息发送至其他的读取节点。当读取节点b再次接收到同样的数据读取请求时,由于与读取节点a命中相同的目标数据,就可以优先根据本地缓存中的位图信息查询到目标数据存储于读取节点a的缓存中,这样就可以向读取节点a发送数据读取请求,直接从读取节点a的缓存中读取数据。进一步,还可以将读取到的目标数据返回至客户端。

同时,将读取到的数据保存在本地缓存中,经过一定的时间可能会出现数据损坏的情况,这样即便本地缓存中保存有对应的位图信息,也无法读取到目标数据;也有可能会出现由于本地缓存中位图信息太多,或位图信息中保存的映射关系太多,导致查询位图信息时间较长,读取数据效率降低的情况。因此,可以预先设置一个查询位图信息的预定时间,例如,若超过100毫秒仍未返回目标数据至客户端,则将数据读取请求发送至后端进行目标数据的读取。

本发明所提供的一种分布式存储客户端读取数据的方法,将从后端读取到的数据保存至本地缓存,并设置对应的位图信息的方式,提高了数据缓存命中率。当其他读取节点再次接收到相同的数据读取请求后,可直接命中缓存,不必再从后端读取目标数据,提高了读取数据的效率。

在上述实施例的基础上:

作为一种优选的实施例,还可以更新所述读取节点的缓存中的位图信息,包括:

目标节点定时查询目标数据在预定时间内是否被读取;若未被读取,则发送删除信息至读取节点;读取节点根据删除信息删除本地缓存中目标数据对应的位图信息,并向目标节点发送回执;目标节点根据所述回执删除目标数据。

具体的,由于缓存的老化,可能会出现数据损坏的情况,在这种情况下,可以定时更新和维护缓存数据。在本申请中,借用了lru(leastrecentlyused,近期最少使用算法)的处理机制。例如,在读取节点a本地维护一份lru链表,可以以定时器的形式查询超过预定时间未被命中的数据,其中,所述预定时间可以根据实际情况进行设置,例如设置预定时间为3秒。当发现此类数据存在后,可以先向其他的读取节点发送该数据将要被移除的消息,在各个读取节点收到消息之后,若本地缓存中的位图信息为一个,则从位图信息中将该数据对应的映射关系删除,若为多个,则删除该数据对应的位图信息,并向读取节点a发送回执;读取节点a收到其他读取节点发送的回执之后,则从lru链上删除该条记录,同时从缓存中删除该数据。当然,也可以在接收到回执之后,超过一定时间后,再从lru链上删除该条记录,同时从缓存中删除该数据。

本发明所提供的一种分布式存储客户端读取数据的方法,定时更新和维护缓存数据,避免了缓存老化带来的数据损坏导致无法读取数据等问题,进一步提高了数据读取效率。

请参考图2,图2为本发明提供的一种分布式存储客户端读取数据的装置的示意图,该装置包括:

接收单元1,用于接收读取目标节点的目标数据的读取请求;

判断单元2,用于根据所述读取请求,判断所述目标节点的缓存中是否存在所述目标数据对应的位图信息;

第一读取单元3,用于当所述位图信息存在时,根据所述位图信息查询所述目标数据对应的读取节点,从所述读取节点的缓存中读取所述目标数据;

第二读取单元4,用于当所述位图信息不存在时,则将所述读取请求发送至存储端,从所述存储端中读取所述目标数据。

作为一种优选实施例,所述第二读取单元4之后还可以包括:

保存单元,用于将所述目标数据保存至所述目标节点的缓存中;

获取单元,用于对所述目标数据添加标识,根据所述标识记录所述目标数据的读取节点位置,获取所述目标节点的对应的位图信息;

发送单元,用于将所述位图信息发送至所述读取节点的缓存中。

作为一种优选实施例,该装置还包括:

更新单元,用于更新所述读取节点的缓存中的位图信息。

其中,所述更新单元包括:

查询子单元,用于所述目标节点定时查询所述目标数据在预定时间内是否被读取;

发送子单元,用于当所述目标数据在预定时间内未被读取时,发送删除信息至所述读取节点;

第一删除子单元,用于所述读取节点根据所述删除信息删除本地缓存中所述目标数据对应的位图信息,并向所述目标节点发送回执;

第二删除子单元,用于所述目标节点根据所述回执删除所述目标数据。

对于本发明提供的装置的介绍请参照上述方法实施例,本发明在此不做赘述。

请参考图3,图3为本发明提供的一种分布式存储客户端读取数据的设备的示意图,该设备包括:

存储器10,用于存储计算机程序;

处理器20,用于执行所述计算机程序时实现如下步骤:

接收读取目标节点的目标数据的读取请求;根据所述读取请求,判断所述目标节点的缓存中是否存在所述目标数据对应的位图信息;若存在,则根据所述位图信息查询所述目标数据对应的读取节点,从所述读取节点的缓存中读取所述目标数据;若不存在,则将所述读取请求发送至存储端,从所述存储端中读取所述目标数据。

对于本发明提供的设备的介绍请参照上述方法实施例,本发明在此不做赘述。

为解决上述技术问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如下步骤:

接收读取目标节点的目标数据的读取请求;根据所述读取请求,判断所述目标节点的缓存中是否存在所述目标数据对应的位图信息;若存在,则根据所述位图信息查询所述目标数据对应的读取节点,从所述读取节点的缓存中读取所述目标数据;若不存在,则将所述读取请求发送至存储端,从所述存储端中读取所述目标数据。

对于本发明提供的设备的介绍请参照上述方法实施例,本发明在此不做赘述。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的读取小文件的方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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