掌桥专利:专业的专利平台
掌桥专利
首页

一种跳读预读方法、装置、设备及存储介质

文献发布时间:2023-06-19 09:23:00


一种跳读预读方法、装置、设备及存储介质

技术领域

本发明涉及分布式文件系统技术领域,更具体地说,涉及一种跳读预读方法、装置、设备及存储介质。

背景技术

对于分布式文件系统(对象存储),文件一般会按照一定大小的块进行切分,在不同块的固定位置存放索引信息;在访问这些文件的时候,一般是分布式文件系统的存储服务器在接收到读请求后,访问文件读取所需数据,再将所需数据返回给读请求的发送端;但是发明人发现,由于这种方式每次获取相应数据均需要访问文件,会导致获取相应数据的速率较慢,进而导致读性能较差。

发明内容

本发明的目的是提供一种跳读预读方法、装置、设备及存储介质,在以跳读模式实现读操作的场景中,能够通过数据预读的方式一定程序上提高数据读取速度,进而提升读性能。

为了实现上述目的,本发明提供如下技术方案:

一种跳读预读方法,包括:

接收读请求,如果本地已经存储有所述读请求对应数据,则由本地读取所述读请求对应数据,否则,由目标文件中读取所述读请求对应数据;

在读取所述读请求对应数据后,判断当前的读模式是否为跳读模式,如果是,则基于所述跳读模式预测当前时刻之后需读取数据的预读数据位置及预读数据长度,由所述目标文件中预读所述预读数据位置及所述预读数据长度对应的数据,并将预读的数据存储在本地,否则,确定无需进行预读操作;其中,预读操作为从所述目标文件中预读相应数据的操作。

优选的,判断当前的读模式是否为跳读模式,包括:

如果本次读操作及上次读操作所读取数据的数据长度及步长均相同,则确定当前的读模式为跳读模式;其中,任一次读操作的步长为该任一次读操作的读开始位置及该任一次读操作的上一次读操作的读结束位置之间的数据长度,而读操作为接收任意读请求后读取该任意读请求对应数据的操作。

优选的,基于所述跳读模式预测当前时刻之后需读取数据的预读数据位置及预读数据长度,包括:

如果当前需要进行的为第一次预读操作,则确定所述预读数据位置为最后一次读操作的读结束位置偏移所述步长后的位置,所述预读数据长度为最后一次读操作的数据长度;

如果当前需要进行的为多次连续的预读操作中的第n次预读操作,则确定所述预读数据位置分别为最后一次预读操作的读结束位置偏移1至n倍的所述步长后的位置,每个所述预读数据位置对应的预读数据长度均为多次连续的预读操作中的第1次预读操作的数据长度。

优选的,基于所述跳读模式预测当前时刻之后需读取数据的预读数据位置之后,还包括:

如果用于实现所述目标文件存储的对象大于所述跳读模式的周期,则以整对象读取的方式预读每个所述预读数据位置所在的对象,并将预读的数据存储在本地,否则,执行由所述目标文件中预读所述预读数据位置及所述预读数据长度对应的数据的步骤。

优选的,还包括:

在每次预读操作及读操作之后,更新跳读记录结构中记录的跳读记录信息,所述跳读记录信息包含步长、数据长度、读结束位置。

优选的,更新跳读记录结构中记录的跳读记录信息之前,还包括:

打开所述目标文件,创建句柄,并在所述句柄中创建所述跳读记录结构;

所述方法还包括:

关闭所述目标文件及所述句柄,并清除所述跳读记录结构。

优选的,由本地读取所述读请求对应数据之后,还包括:

将本地存储的所述读请求对应数据进行清除。

一种跳读预读装置,包括:

读取模块,用于:接收读请求,如果本地已经存储有所述读请求对应数据,则由本地读取所述读请求对应数据,否则,由目标文件中读取所述读请求对应数据;

第一预读模块,用于:在读取所述读请求对应数据后,判断当前的读模式是否为跳读模式,如果是,则基于所述跳读模式预测当前时刻之后需读取数据的预读数据位置及预读数据长度,由所述目标文件中预读所述预读数据位置及所述预读数据长度对应的数据,并将预读的数据存储在本地,否则,确定无需进行预读操作;其中,预读操作为从所述目标文件中预读相应数据的操作。

一种跳读预读设备,包括:

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

处理器,用于执行所述计算机程序时实现如上任一项所述跳读预读方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述跳读预读方法的步骤。

本发明提供了一种跳读预读方法、装置、设备及存储介质,该方法包括:接收读请求,如果本地已经存储有所述读请求对应数据,则由本地读取所述读请求对应数据,否则,由目标文件中读取所述读请求对应数据;在读取所述读请求对应数据后,判断当前的读模式是否为跳读模式,如果是,则基于所述跳读模式预测当前时刻之后需读取数据的预读数据位置及预读数据长度,由所述目标文件中预读所述预读数据位置及所述预读数据长度对应的数据,并将预读的数据存储在本地,否则,确定无需进行预读操作;其中,预读操作为从所述目标文件中预读相应数据的操作。本申请在每次读取读请求对应数据后,判断当前的读模式是否为跳读模式,进而在判断结果为是时,基于这种跳读模式由目标文件中读取相应的数据后存储在本地,由此在后续接收到这部分数据对应读请求时,则可以由本地读取相应数据,而从本地实现数据读取相对于访问文件实现数据读取能够大大提高数据读取速度,因此本申请在以跳读模式实现读操作的场景中,能够通过数据预读的方式一定程序上提高数据读取速度,进而提升读性能。

附图说明

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

图1为本发明实施例提供的一种跳读预读方法的流程图;

图2为本发明实施例提供的一种跳读预读方法中具体应用场景下的总流程示意图;

图3为本发明实施例提供的一种跳读预读方法中识别跳读模式示例图;

图4为本发明实施例提供的一种跳读预读方法中预读发起的示例图;

图5为本发明实施例提供的一种跳读预读方法的流程图。

具体实施方式

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

请参阅图1,其示出了本发明实施例提供的一种跳读预读方法的流程图,可以包括:

S11:接收读请求,如果本地已经存储有读请求对应数据,则由本地读取读请求对应数据,否则,由目标文件中读取读请求对应数据。

本发明实施例提供的跳读预读方法可以应用于分布式文件系统中,而目标文件则为分布式文件系统中任意的需要访问的视频、流媒体等文件;该跳读预读方法的执行主体可以为对应的跳读预读装置,而该跳读预读装置可以设置于分布式文件系统的存储服务器中,因此该跳读预读方法的执行主体可以为存储服务器,本申请实施例以该跳读预读方法的执行主体为存储服务器进行具体说明。

存储服务器接收读请求,如果本地已经存储有读请求对应的数据,则可以将由本地读取读请求对应数据,并将读请求对应数据返回给读请求的发送端,否则,由目标文件中读取读请求对应数据,并将读请求对应数据返回给读请求的发送端。其中,读请求中可以包括需要读取的数据的标识,从而基于该标识可以定位到相应的数据,进而实现数据读取;另外,对于存储服务器接收的任意一个读请求,均可以按照本申请公开的方案进行相应的处理。

S12:在读取读请求对应数据后,判断当前的读模式是否为跳读模式,如果是,则执行步骤S13,如果否,则执行步骤S14。

读模式即为读取数据的模式,在判断当前模式是否为跳读模式时可以基于跳读模式的读操作特性实现,也可以基于预先设置的标识实现,还可以根据实际需要设定的其他方式实现。具体来说,基于跳读模式的读操作特性实现时,由于跳读模式的读操作一般每次读取的数据长度相同,且每两次读取数据时的步长也相同,因此基于本次读操作及上次读操作即可判断出当前是否以跳读模式的方式实现相应数据的读取,其中,任一次读操作的步长为该任一次读操作所读取的数据在目标文件中的开始位置,与该任一次读操作的上一次读操作所读取的数据在目标文件中的结束位置之间的数据长度;基于预先设置的标识实现时可以预先指定当前是否需要以跳读模式的方式实现读操作,并设置相应的标记,从而基于该标记即可获知当前是否需要以跳读模式的方式实现读操作。

S13:基于跳读模式预测当前时刻之后需读取数据的预读数据位置及预读数据长度,由目标文件中预读预读数据位置及预读数据长度对应的数据,并将预读的数据存储在本地。

如果确定出当前是处于跳读模式,则由于跳读模式中每次读取数据的数据长度及步长相同,因此可以基于此确定出下一次甚至以后n次需要读取的数据的位置及长度,进而基于此预读相应的数据后存储在本地,从而接收到这些数据对应的读请求后,则可以直接在本地读取读请求对应数据并返回,相对于由目标文件中读取数据,能够大大提高数据读取的速度。

S14:确定无需进行预读操作;其中,预读操作为从目标文件中预读相应数据的操作。

本申请实施例中读取与预读指不同的动作,读取为从本地或者目标文件中读取读请求对应的数据,而预读则为从目标文件中预读预测的当前时刻之后需读取的数据;对应的,读操作则为读取相应数据的操作,也即从本地或者目标文件中读取读请求对应数据的操作,而预读操作则为预读相应数据的操作,也即从目标文件中预读预测的当前时刻之后需读取的数据的操作。

本申请在每次读取读请求对应数据后,判断当前的读模式是否为跳读模式,进而在判断结果为是时,基于这种跳读模式由目标文件中读取相应的数据后存储在本地,由此在后续接收到这部分数据对应读请求时,则可以由本地读取相应数据,而从本地实现数据读取相对于访问文件实现数据读取能够大大提高数据读取速度,因此本申请在以跳读模式实现读操作的场景中,能够通过数据预读的方式一定程序上提高数据读取速度,进而提升读性能。

本发明实施例提供的一种跳读预读方法,判断当前的读模式是否为跳读模式,可以包括:

如果本次读操作及上次读操作所读取数据的数据长度及步长均相同,则确定当前的读模式为跳读模式;其中,任一次读操作的步长为该任一次读操作的读开始位置及该任一次读操作的上一次读操作的读结束位置之间的数据长度,而读操作为接收任意读请求后读取该任意读请求对应数据的操作。

在确定当前时刻及当前时刻之前的一段时间内所进行的读操作是否为跳读模式的读操作时,可以基于本次读操作及上次读操作的数据长度及步长是否均相同,来确定当前的读模式是否为跳读模式,从而通过两次读操作的特性实现是否为跳读模式的判断,简便且有效。其中,读开始位置则为读取的数据或者预读的数据在目标文件中的起始位置,而读结束位置则为读取的数据或者预读的数据在目标文件中的结束位置。

本发明实施例提供的一种跳读预读方法,基于跳读模式预测当前时刻之后需读取数据的预读数据位置及预读数据长度,包括:

如果当前需要进行的为第一次预读操作,则确定预读数据位置为最后一次读操作的读结束位置偏移步长后的位置,预读数据长度为最后一次读操作的数据长度;

如果当前需要进行的为多次连续的预读操作中的第n次预读操作,则确定预读数据位置分别为最后一次预读操作的读结束位置偏移1至n倍的步长后的位置,每个预读数据位置对应的预读数据长度均为多次连续的预读操作中的第1次预读操作的数据长度。

如果是第一次判断出当前处于跳读模式,则为了避免后期由于读操作的改变导致读取的数据无效(也即预读的数据不是读请求的发送端需要读取的数据),本申请中可以先预读一个跳读模式的周期内的数据;而如果是在连续多次判断出当前处于跳读模式时,则说明跳读模式的持续时间较久,那么后期读操作发生改变的可能性也比较小,因此本申请可以预读多个跳读模式的周期内的数据;从而通过上述方式在后期仍处于跳读模式可能性越大的情况下,预读越多的数据供读取,在实现预读时一定程度上保证了预读的数据的高命中率。

其中,跳读模式的一个周期为某次读操作读取的数据长度及步长的和值,预读数据位置为需要预读的数据在目标文件中的起始位置,预读数据长度则为需要预读的数据在目标文件中的长度;而n是不为1的正整数,从而在确定后期仍处于跳读模式时,读取未来可能读取的多个周期内的数据,也即预读数据位置分别为最后一次预读数据的读结束位置向后(向后即为按照从数据的起始位置向结束位置的方向)偏移一个步长后的位置、向后偏移两个步长后的位置、、、直至向后偏移n个步长后的位置,而在每个预读数据位置均读取相应预读数据长度的数据,从而实现数据的有效预读。

另外,第一次预读操作可以为当前时刻之前未进行过任何预读操作的第一次预读操作,也可以为并未连续进行预读操作时上一次进行预读操作与当前次进行预读操作之间存在读操作时,当前次预读操作则为第一次预读操作,当然还可以根据实际需要设定其他符合要求的第一预读操作的定义方式,均在本发明的保护范围之内。

本发明实施例提供的一种跳读预读方法,基于跳读模式预测当前时刻之后需读取数据的预读数据位置之后,还可以包括:

如果用于实现目标文件存储的对象大于跳读模式的周期,则以整对象读取的方式预读每个预读数据位置所在的对象,并将预读的数据存储在本地,否则,执行由目标文件中预读预读数据位置及预读数据长度对应的数据的步骤。

分布式文件系统具体可以以对象存储的方式实现,而目标文件则以对象的方式实现存储,如果对象的大小大于跳读模式的周期,则说明需要对该对象进行多次访问,因此为了减少对象访问次数,本申请实施例中可以以整对象的方式读取需要预读的数据所在的对象,也即读取需要预读的数据所在的对象的整个对象;而在对象的大小不大于跳读模式的周期时,则可以按照上述实施例的方式实现数据的预读。从而通过这种方式对于跳读密集性请求(一个对象多次小块跳读),预读可以避免小块IO对网络磁盘压力,从而降低读场景网络、磁盘压力,进一步减少访问对象访问次数,提高读性能。

本发明实施例提供的一种跳读预读方法,还可以包括:

在每次预读操作及读操作之后,更新跳读记录结构中记录的跳读记录信息,跳读记录信息包含步长、数据长度、读结束位置。

需要说明的是,为了方便在判断是否为跳读模式的读操作、确定预读数据位置及预读数据长度等操作时能够快速获取到相应的信息,本申请可以预先设置有跳读记录结构,进而将每次预读操作或读操作的步长、读结束位置及数据长度等信息记录在该跳读记录结构中,进而方便相应步骤的快速实现。

本发明实施例提供的一种跳读预读方法,更新跳读记录结构中记录的跳读记录信息之前,还可以包括:

打开目标文件,创建句柄,并在句柄中创建跳读记录结构;

跳读预读方法还可以包括:

关闭目标文件及句柄,并清除跳读记录结构。

需要说明的是,创建跳读记录结构具体可以是在打开目标文件时,创建目标文件对应的句柄,进而在句柄中创建跳读记录结构,从而方便跳读记录结构的存储及查询等;在后期关闭目标文件且关闭句柄时,为了方便后续重新实现读操作的判断及预读等操作时不受已过期信息的影响,本申请实施例还会清除跳读记录结构。其中,句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。

本发明实施例提供的一种跳读预读方法,由本地读取读请求对应数据之后,还可以包括:

将本地存储的读请求对应数据进行清除。

需要说明的是,为了保证存储服务器本地能够具有充足的存储空间,实现未被访问的数据的存储,本申请实施例中在每次读取存储服务器本地的数据后,会将该已经被访问的数据进行清除,从而实现本地存储空间的循环有效的使用。

在一种具体应用场景中,本发明实施例提供的一种跳读预读方法的总步骤可以如图2所示,具体包括:

1.目标文件打开(open)后,创建句柄;

2.创建句柄的时候,创建跳读记录结构,记录当前的跳读情况;其中,跳读记录结构保存于句柄中;

3.在每次读操作时更新跳读记录结构中的跳读记录信息,基于该跳读记录信息识别跳读模式,并计算跳读的数据位置进而实现预读;

4.文件关闭时关闭句柄,同时清除跳读记录结构。

在实现跳读模式识别时示例图可以如图3所示(其中,跳读信息即为跳读记录信息,预读位置即为预读数据位置),具体可以包括:

1.跳读记录信息主要可以包括skip_len(步长)、last_read(上次读操作的读结束位置)、last_read_len(上次读操作或预读操作读取的数据的数据长度,可以简称为读长度)、skip_num(跳读次数)、readadhead_pos(上次预读操作的读结束位置,也即为上次预读操作的结束位置);

2.第一次读请求到来后,更新last_read_len记录当前的读长度;

3.第二次读请求到来后,记录skip_len与last_read_len;

4.第三次读请求到来后,如果发现skip_len及last_read_len与上次相同,则认为当前读模式是跳读模式,更新skip_num计数为1;

5.当skip_num计数大于1时,认为当前读模式为跳读模式,计算预读数据位置,并发起预读。

在实现数据的预读时示例图可以如图4所示,具体可以包括:

1.在确定跳读模式后,首先需要初步计算预读数据位置与预读数据长度,并记录新的预读信息(包括readadhead_pos),进而确定预读数据位置为上次预读操作的读结束位置(readahead_pos),如果是第一次预读操作,预读数据位置为上次读操作的读结束位置,预读长度为上次读操作的读长度(last_readahead_len);如果是连续预读操作,则预读数据长度每次翻倍readahead_len(上一次预读操作的预读数据长度),最大200M,最小长度为1个周期(skip_len+len,len为单次读操作时读取的数据长度)大小,且向周期对齐;初步计算完预读数据位置后,更新readahead_pos(本次发起预读操作的读结束位置)和readahead_len(本次的预读数据长度);

2.预读位置细化,根据跳读模式的周期与对象(obj)大小采用两种不同的预读IO:

1)周期

2)周期>obj大小,平均每个对象发起小于1个读请求,此时采用多块跳读预读,根据步骤1初步计算的预读数据位置根据步长和读长度,选择实际将要读的位置,这样预读位置被拆分为多个预读跳读片段。

3.根据计算的预读数据位置发起预读。

本申请记录识别读操作的特性(也即为IO特性)确定跳读模式,同时根据跳读周期与底层对象大小进行整对象预读或者跳读预读,从而提升预读、读性能,对于小步长跳读场景降低网络磁盘消耗。

本发明实施例还提供了一种跳读预读装置,如图5所示,可以包括:

读取模块11,用于:接收读请求,如果本地已经存储有读请求对应数据,则由本地读取读请求对应数据,否则,由目标文件中读取读请求对应数据;

第一预读模块12,用于:在读取读请求对应数据后,判断当前的读模式是否为跳读模式,如果是,则基于跳读模式预测当前时刻之后需读取数据的预读数据位置及预读数据长度,由目标文件中预读预读数据位置及预读数据长度对应的数据,并将预读的数据存储在本地,否则,确定无需进行预读操作;其中,预读操作为从目标文件中预读相应数据的操作。

本发明实施例提供的一种跳读预读装置,第一预读模块可以包括:

第一确定单元,用于:如果本次读操作及上次读操作所读取数据的数据长度及步长均相同,则确定当前的读模式为跳读模式;其中,任一次读操作的步长为该任一次读操作的读开始位置及该任一次读操作的上一次读操作的读结束位置之间的数据长度,而读操作为接收任意读请求后读取该任意读请求对应数据的操作。

本发明实施例提供的一种跳读预读装置,第一预读模块可以包括:

第二确定单元,用于:如果当前需要进行的为第一次预读操作,则确定预读数据位置为最后一次读操作的读结束位置偏移步长后的位置,预读数据长度为最后一次读操作的数据长度;如果当前需要进行的为多次连续的预读操作中的第n次预读操作,则确定预读数据位置分别为最后一次预读操作的读结束位置偏移1至n倍的步长后的位置,每个预读数据位置对应的预读数据长度均为多次连续的预读操作中的第1次预读操作的数据长度。

本发明实施例提供的一种跳读预读装置,还可以包括:

第二预读模块,用于:基于跳读模式预测当前时刻之后需读取数据的预读数据位置之后,如果用于实现目标文件存储的对象大于跳读模式的周期,则以整对象读取的方式预读每个预读数据位置所在的对象,并将预读的数据存储在本地,否则,执行由目标文件中预读预读数据位置及预读数据长度对应的数据的步骤。

本发明实施例提供的一种跳读预读装置,还可以包括:

更新模块,用于:在每次预读操作及读操作之后,更新跳读记录结构中记录的跳读记录信息,跳读记录信息包含步长、数据长度、读结束位置。

本发明实施例提供的一种跳读预读装置,还可以包括:

打开模块,用于:更新跳读记录结构中记录的跳读记录信息之前,打开目标文件,创建句柄,并在句柄中创建跳读记录结构;

关闭模块,用于:关闭目标文件及句柄,并清除跳读记录结构。

本发明实施例提供的一种跳读预读装置,还可以包括:

清除模块,用于:由本地读取读请求对应数据之后,将本地存储的读请求对应数据进行清除。

本发明实施例还提供了一种跳读预读设备,可以包括:

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

处理器,用于执行计算机程序时实现如上任一项跳读预读方法的步骤。

本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可以实现如上任一项跳读预读方法的步骤。

需要说明的是,本发明实施例提供的一种跳读预读装置、设备及存储介质中相关部分的说明请参见本发明实施例提供的一种跳读预读方法中对应部分的详细说明,在此不再赘述。另外本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

相关技术
  • 一种跳读预读方法、装置、设备及存储介质
  • 一种文件预读方法、装置、设备及存储介质
技术分类

06120112148763