一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据读取方法、装置、电子设备及存储介质与流程

2022-11-12 09:44:50 来源:中国专利 TAG:


1.本发明涉及数据处理技术领域,特别是涉及一种数据读取方法、装置、电子设备及存储介质。


背景技术:

2.客户端需要对本地文件或远程文件进行读取时,通常通过文件流的方式,每次读取有限大小数据量对应的文件数据进行处理。当所需读取的目标文件数据量较大时,读取目标文件数据所需访问目标文件的次数会增加,而每次读取目标文件数据都需要通过一次i/o(input/output,输入/输出)传输,每次i/o传输需耗费一定的时间,使得读取整个目标文件耗费的时间较长,导致数据读取效率不高。例如,目标文件大小为1m,每次读取1024个字节的数据,那么需要访问目标文件1024次,进而需要耗费1024次i/o传输的时间,才能够读取到完整的目标文件。
3.相关技术中,为提高数据读取的效率采用的技术方案为:设置一定大小存储空间的缓存区,当客户端需要对本地文件或远程文件进行读取时,先将与缓存区空间大小对应的目标文件数据读取至缓存区中,进而从缓存区中读取数据,以减少i/o传输次数,进而减少数据读取的时间,提高数据读取效率。具体的,例如,目标文件大小为1m,每次读取数据量为1个字节,缓存区空间大小为1024个字节,则一次读取1024个字节的目标文件数据至缓存区中,进而从缓存区中逐字节读取数据,这样,在没有缓存区的情况下,需要i/o传输的次数为1024
×
1024次,而增加缓存区之后,需要i/o传输的次数为1024次,大大减少了i/o传输所耗费的时间。
4.然而,上述相关技术中数据读取存在同步阻塞,当缓存区为空,或缓存区中的数据全部被读取时,需要等待缓存区读取(填充)新的数据,即需要等待缓存区读取1024个字节数据的时间,才能够进一步进行数据的读取,在目标文件数据量较大,例如1g时,同样需要等待1024次i/o传输所耗费的时间,才能够完成目标文件数据的读取,数据读取效率较低。


技术实现要素:

5.本发明实施例的目的在于提供一种数据读取方法、装置、电子设备及存储介质,用以提高数据读取的效率。具体技术方案如下:
6.第一方面,本发明实施例提供了一种数据读取方法,所述方法包括:
7.接收数据读取请求,所述数据读取请求中包含待读取数据文件的标识;
8.判断所述待读取数据文件的标识所对应的待读取数据文件是否已读取完成;
9.在待读取数据文件没有读取完成的情况下,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据,所述可读取目标数据为所述待读取数据文件的部分数据;
10.如果所述当前缓存区中不包含可读取目标数据,则确定目标缓存队列中包含的待读取数据对象的个数,其中,所述待读取数据对象为所述待读取数据文件的部分数据,所述目标缓存队列为所述当前缓存区对应的缓存队列;
11.在所述个数小于预设阈值的情况下,将所述待读取数据文件中的待读取数据对象异步加载至所述目标缓存队列中,并返回执行判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据的步骤;
12.在所述个数不为零的情况下,根据所述目标缓存队列中第一个待读取数据对象的状态信息,更新当前缓存区中的数据,并返回执行判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据的步骤。
13.可选地,所述在所述个数小于预设阈值的情况下,将所述待读取数据文件中的待读取数据对象异步加载至所述目标缓存队列中的步骤,包括:
14.在所述个数小于预设阈值的情况下,根据预设策略确定异步数据加载所对应的待执行任务数,所述预设策略是根据所述目标缓存队列的大小,以及所述目标缓存队列中包含待读取数据对象的个数确定的;
15.对所述待读取数据文件中所述待执行任务数个待读取数据对象进行加载,并将所加载的待读取数据对象顺序存储于所述目标缓存队列中。
16.可选地,所述预设策略为:
17.将所述目标缓存队列的大小与所述目标缓存队列中包含待读取数据对象的个数的差值,和所述目标缓存队列中包含待读取数据对象的个数加1的二倍中的最小值,确定为所述待执行任务数。
18.可选地,所述在所述个数不为零的情况下,根据所述目标缓存队列中第一个待读取数据对象的状态信息,更新当前缓存区中的数据的步骤,包括:
19.在所述个数不为零的情况下,确定所述目标缓存队列中第一个待读取数据对象的状态信息;
20.在所述状态信息不为加载失败信息的情况下,将所述第一个待读取数据对象更新至所述当前缓存区中,并删除所述目标缓存队列中第一个待读取数据对象。
21.可选地,所述方法还包括:
22.在所述状态信息为加载失败信息的情况下,返回数据读取失败的信息,并清空当前缓存区。
23.可选地,所述在所述状态信息不为加载失败信息的情况下,将所述第一个待读取数据对象更新至所述当前缓存区中,并删除所述目标缓存队列中第一个待读取数据对象的步骤,包括:
24.在所述状态信息为加载成功信息的情况下,将所述第一个待读取数据对象更新至所述当前缓存区中,并删除所述目标缓存队列中第一个待读取数据对象;
25.在所述状态信息为未加载数据信息的情况下,等待所述第一个待读取数据对象中的数据加载完成后,将所述第一个待读取数据对象更新至所述当前缓存区中,并删除所述目标缓存队列中第一个待读取数据对象。
26.可选地,在所述判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据之后,所述方法还包括:
27.如果所述当前缓存区中包含可读取目标数据,则从所述当前缓存区中读取所述可读取目标数据,并返回所读取的目标数据,以及返回执行判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据的步骤。
28.可选地,在所述判断所述待读取数据文件的标识所对应的待读取数据文件是否已读取完成之后,所述方法还包括:
29.在待读取数据文件读取完成的情况下,清空当前缓存区。
30.第二方面,本发明实施例提供了一种数据读取装置,所述装置包括:
31.接收模块,用于接收数据读取请求,所述数据读取请求中包含待读取数据文件的标识;
32.第一判断模块,用于判断所述待读取数据文件的标识所对应的待读取数据文件是否已读取完成;
33.第二判断模块,用于在所述第一判断模块判断出所述待读取数据文件没有读取完成的情况下,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据,所述可读取目标数据为所述待读取数据文件的部分数据;
34.确定模块,用于在所述第二判断模块判断出所述当前缓存区中不包含可读取目标数据时,确定目标缓存队列中包含的待读取数据对象的个数,其中,所述待读取数据对象为所述待读取数据文件的部分数据,所述目标缓存队列为所述当前缓存区对应的缓存队列;
35.数据加载模块,用于在所述个数小于预设阈值的情况下,将所述待读取数据文件中的待读取数据对象,异步加载至所述目标缓存队列中,以及触发所述第二判断模块,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据;
36.数据更新模块,用于在所述个数不为零的情况下,根据所述目标缓存队列中第一个待读取数据对象的状态信息,更新当前缓存区中的数据,并触发所述第二判断模块,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据。
37.可选地,数据加载模块,具体用于:
38.在所述个数小于预设阈值的情况下,根据预设策略确定异步数据加载所对应的待执行任务数,所述预设策略是根据所述目标缓存队列的大小,以及所述目标缓存队列中包含待读取数据对象的个数确定的;
39.对所述待读取数据文件中所述待执行任务数个待读取数据对象进行加载,并将所加载的待读取数据对象顺序存储于所述目标缓存队列中。
40.可选地,所述预设策略为:
41.将所述目标缓存队列的大小与所述目标缓存队列中包含待读取数据对象的个数的差值,和所述目标缓存队列中包含待读取数据对象的个数加1的二倍中的最小值,确定为所述待执行任务数。
42.可选地,所述数据更新模块,包括:
43.确定子模块,用于在所述个数不为零的情况下,确定所述目标缓存队列中第一个待读取数据对象的状态信息;
44.第一更新子模块,用于在所述状态信息不为加载失败信息的情况下,将所述第一个待读取数据对象更新至所述当前缓存区中,并删除所述目标缓存队列中第一个待读取数据对象。
45.可选地,所述数据更新模块,还包括:
46.第二更新子模块,用于在所述状态信息为加载失败信息的情况下,返回数据读取失败的信息,并清空当前缓存区。
47.可选地,所述第一更新子模块,具体用于:
48.在所述状态信息为加载成功信息的情况下,将所述第一个待读取数据对象更新至所述当前缓存区中,并删除所述目标缓存队列中第一个待读取数据对象;
49.在所述状态信息为未加载数据信息的情况下,等待所述第一个待读取数据对象中的数据加载完成后,将所述第一个待读取数据对象更新至所述当前缓存区中,并删除所述目标缓存队列中第一个待读取数据对象。
50.可选地,所述装置还包括:
51.数据读取模块,用于在所述第二判断模块判断出所述当前缓存区中包含可读取目标数据时,从所述当前缓存区中读取所述可读取目标数据,并返回所读取的目标数据,以及触发所述第二判断模块,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据。
52.可选地,所述装置还包括:
53.清除模块,用于在所述第一判断模块判断出所述待读取数据文件读取完成的情况下,清空当前缓存区。
54.第三方面,本发明实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
55.存储器,用于存放计算机程序;
56.处理器,用于执行存储器上所存放的程序时,实现上述第一方面所述的一种数据读取方法的步骤。
57.第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的一种数据读取方法的步骤。
58.本发明实施例有益效果:
59.本发明实施例提供的一种数据读取方法、装置、电子设备及存储介质,设置当前缓存区对应的目标缓存队列,在目标缓存队列中异步加载多个待读取数据对象,实现异步非阻塞数据读取,进而在当前缓存区中不包含可读取目标数据的情况下,直接从目标缓存队列中读取数据,相较于现有技术,只需要在第一次数据读取时等待一次i/o传输所耗费的时间,就能够完成对待读取数据文件的数据读取,降低了客户端数据读取等待时间,减少了整个数据文件的读取时间,提高了数据读取的效率。
60.当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
61.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
62.图1为本发明实施例提供的一种数据读取方法的流程示意图;
63.图2为本发明实施例提供的一种缓存区分布示意图;
64.图3为本发明实施例提供的一种数据读取过程示意图;
65.图4为本发明实施例提供的一种数据读取装置的结构示意图;
66.图5为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
67.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
68.为了解决现有数据读取过程中等待i/o传输所耗费的时间较长,数据读取效率较低的问题,本发明实施例提供了一种数据读取方法、装置、电子设备及存储介质。
69.本发明实施例提供的一种数据读取方法,可以包括:
70.接收数据读取请求,所述数据读取请求中包含待读取数据文件的标识;
71.判断所述待读取数据文件的标识所对应的待读取数据文件是否已读取完成;
72.在待读取数据文件没有读取完成的情况下,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据,所述可读取目标数据为所述待读取数据文件的部分数据;
73.如果所述当前缓存区中不包含可读取目标数据,则确定目标缓存队列中包含的待读取数据对象的个数,其中,所述待读取数据对象为所述待读取数据文件的部分数据,所述目标缓存队列为所述当前缓存区对应的缓存队列;
74.在所述个数小于预设阈值的情况下,将所述待读取数据文件中的待读取数据对象异步加载至所述目标缓存队列中,并返回执行判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据的步骤;
75.在所述个数不为零的情况下,根据所述目标缓存队列中第一个待读取数据对象的状态信息,更新当前缓存区中的数据,并返回执行判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据的步骤。
76.本发明实施例提供的一种数据读取方法,设置当前缓存区对应的目标缓存队列,在目标缓存队列中异步加载多个待读取数据对象,实现异步非阻塞数据读取,进而在当前缓存区中不包含可读取目标数据的情况下,直接从目标缓存队列中读取数据,相较于现有技术,只需要在第一次数据读取时等待一次i/o传输所耗费的时间,就能够完成对待读取数据文件的数据读取,降低了客户端数据读取等待时间,减少了整个数据文件的读取时间,提高了数据读取的效率。
77.下面对本发明实施例提供的一种数据读取方法进行详细介绍:
78.本发明实施例提供的一种数据读取方法,可以应用于客户端设备,或服务器设备等,也可以是通过客户端设备或服务器设备的流读取加速组件实现该数据读取方法等,其中流读取加速组件为通过本发明实施例提供的数据读取方法实现的数据读取组件。
79.如图1所示,本发明实施例提供了一种读取处理方法,该方法可以包括以下步骤:
80.s101,接收数据读取请求。
81.本发明实施例以应用于客户端设备为例进行说明,当客户端需要读取本地或远程文件(可以是服务器设备端的数据文件)时,接收用户发送的数据读取请求,该数据读取请
求中可以包含待读取数据文件的标识,待读取数据文件的大小以及每次读取数据量的大小等,该待读取数据文件即本地或远程文件。示例性的,每次读取数据量的大小可以是一个字节,或10个字节等等。
82.s102,判断待读取数据文件的标识所对应的待读取数据文件是否已读取完成。
83.在待读取数据文件的标识所对应的待读取数据文件没有读取完成的情况下,可以执行步骤s103判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据的操作。
84.在待读取数据文件的标识所对应的待读取数据文件读取完成的情况下,可以清空待读取数据文件对应的当前缓存区。
85.s103,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据。
86.本发明实施例中,可以为待读取数据文件设置对应的当前缓存区,当前缓存区可以对应相应的缓存队列,即目标缓存队列,该目标缓存队列可以是预先生成的一定长度的缓存区队列,均用于缓存待读取数据文件中的待读取数据,该当前缓存区可以是内存区域等。其中,可读取目标数据为待读取数据文件的部分数据。示例性的,如图2所示,待读取数据文件的大小为1kb,在当前缓存区中缓存有部分待读取数据文件的待读取数据。目标缓存队列的长度可以根据实际需求进行设置,例如,可以是5,或10,或20等等。
87.在接收到针对待读取数据文件的数据读取请求,且待读取数据文件没有读取完成的情况下,可以进一步判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据,该可读取目标数据为当前缓存区中缓存的待读取数据文件的可读待读取数据,即判断当前缓存区中是否缓存有待读取数据文件的可读数据。示例性的,可读取目标数据可以使用当前缓存区中所缓存的待读取数据文件中的全部待读取数据对应的长度,与当前读取到的待读取数据在全部待读取数据对应的长度中位置的差值来确定,差值为零,表示当前缓存区中不包含可读取目标数据,差值不为零,表示当前缓存区中包含可读取目标数据。
88.具体的,可以在当前缓存区还未缓存待读取数据文件的可读数据,或者当前缓存区中缓存的待读取数据文件数据已读取完,没有继续可读数据的情况下,则执行s104的步骤。
89.在当前缓存区中缓存的待读取数据文件数据还未读取完,即还包含可读取目标数据的情况下,从当前缓存区中读取可读取目标数据,并返回所读取的目标数据,以及返回执行判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据的步骤。
90.在当前缓存区中缓存的待读取数据文件数据还未读取完时,可以继续从当前缓存区中读取可读取目标数据。例如,当前缓存区中缓存有待读取数据文件中1024个字节的待读取数据,每次读取一个字节的数据,当前读取到第100个字节的待读取数据,那么当前缓存区中还包含第101至第1023个字节的可读取目标数据,此时,从当前缓存区中读取第101个字节对应的可读取目标数据,并返回所读取的目标数据,以及返回执行判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据的步骤,直至当前缓存区中包含的可读取目标数据读取完成,或者整个待读取数据文件中所有的待读取数据读取完成。
91.s104,如果当前缓存区中不包含可读取目标数据,则确定目标缓存队列中包含的待读取数据对象的个数。
92.当前缓存区中不包含可读取目标数据,表明当前缓存区中还未缓存待读取数据文件的待读取数据,或当前缓存区中缓存的待读取数据文件的待读取数据已读取完毕,此时
可以进一步确定目标缓存队列中包含的待读取数据对象的个数,其中,待读取数据对象为待读取数据文件的部分数据,目标缓存队列为当前缓存区对应的缓存队列。
93.其中,目标缓存队列可以是先进先出的负责待读取数据对象存储的队列,在目标缓存队列中可以存储待读取数据对象,以及该待读取数据对象对应的数据开始位置,数据结束位置和状态信息等。待读取数据对象对应的数据开始位置和数据结束位置,可以是该待读取数据对象在待读取数据文件中的开始位置和结束位置,待读取数据对象对应的状态信息,可以是该待读取数据对象的加载状态信息等。
94.s105,在个数小于预设阈值的情况下,将待读取数据文件中的待读取数据对象异步加载至目标缓存队列中,并返回执行判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据的步骤。
95.在当前缓存区中不包含可读取目标数据,目标缓存队列中包含的待读取数据对象的个数小于预设阈值的情况下,可以将待读取数据文件中剩余的待读取数据对象异步加载至目标缓存队列中,并返回执行步骤s103判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据。具体的,可以利用线程池技术或多线程并行技术实现待读取数据对象的异步加载。
96.s106,在个数不为零的情况下,根据目标缓存队列中第一个待读取数据对象的状态信息,更新当前缓存区中的数据,并返回执行判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据的步骤。
97.在当前缓存区中不包含可读取目标数据,目标缓存队列中包含的待读取数据对象的个数不为零的情况下,表明当前缓存区中没有可读取目标数据,但是目标缓存队列中还缓存有待读取数据对象,此时,可以先确定目标缓存队列中第一个待读取数据对象的状态信息,进而根据目标缓存队列中第一个待读取数据对象的状态信息,更新当前缓存区中的数据,并返回执行步骤s103判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据。
98.本发明实施例提供的一种数据读取方法,设置当前缓存区对应的目标缓存队列,在目标缓存队列中异步加载多个待读取数据对象,实现异步非阻塞数据读取,进而在当前缓存区中不包含可读取目标数据的情况下,直接从目标缓存队列中读取数据,相较于现有技术,只需要在第一次数据读取时等待一次i/o传输所耗费的时间,就能够完成对待读取数据文件的数据读取,降低了客户端数据读取等待时间,减少了整个数据文件的读取时间,提高了数据读取的效率。
99.作为本发明实施例一种可选的实施方式,上述步骤s105在个数小于预设阈值的情况下,将待读取数据文件中的待读取数据对象异步加载至目标缓存队列中,可以通过以下方式实现:
100.在个数小于预设阈值的情况下,根据预设策略确定异步数据加载所对应的待执行任务数,预设策略是根据目标缓存队列的大小,以及目标缓存队列中包含待读取数据对象的个数确定的;
101.对待读取数据文件中待执行任务数个待读取数据对象进行加载,并将所加载的待读取数据对象顺序存储于目标缓存队列中。
102.优选地,预设策略可以为:将目标缓存队列的大小与目标缓存队列中包含待读取
数据对象的个数的差值,和目标缓存队列中包含待读取数据对象的个数加1的二倍中的最小值,确定为待执行任务数。预设阈值可以和待执行任务数相同或不同。
103.实际应用中,在目标缓存队列中包含的待读取数据对象的个数小于预设阈值的情况下,可以利用线程池技术根据预设策略确定异步数据加载所对应的待执行任务数,进一步对待读取数据文件中待执行任务数个待读取数据对象进行加载,并将所加载的待读取数据对象顺序存储于目标缓存队列中。
104.具体的,可以在目标缓存队列中包含的待读取数据对象的个数小于预设阈值的情况下,向线程池发送异步数据加载任务。
105.本发明实施例中,可以预先创建一个线程池,该线程池中可以包含一定数量的线程,用于预加载待读取数据文件中的数据,并将所加载的待读取数据文件中的待读取数据对象存储于目标缓存队列中。其中,线程池中线程数可根据实际需求进行设定。
106.在初次读取当前缓存区中的数据时,当前缓存区为空,目标缓存队列也为空,此时启动异步数据加载,向线程池发送异步数据加载任务,此时需要等待一次i/o传输所耗费的时间,以获取待读取数据对象。在当前缓存区中的待读取数据读取完毕,即当前缓存区中不包含可读取目标数据,且目标缓存队列中包含的待读取数据对象的个数小于预设阈值的情况下,向线程池发送异步数据加载任务,预加载待读取数据对象,而此时目标缓存队列中还包含待读取数据对象,进而可以将目标缓存队列中的待读取数据对象更新至当前缓存区中,客户端不需要等待就能够直接读取待读取数据文件中的待读取数据。
107.进一步,线程池基于异步数据加载任务,根据预设策略确定异步数据加载所对应的待执行任务数,并启动线程,对待读取数据文件中待执行任务数个待读取数据对象进行加载,并将所加载的待读取数据对象顺序存储于目标缓存队列中。
108.示例性的,目标缓存队列的大小为10,线程池中线程数为5,在初次数据读取时,目标缓存队列中待读取数据对象个数为0,预设阈值为目标缓存队列的大小与目标缓存队列中包含待读取数据对象的个数的差值,和目标缓存队列中包含待读取数据对象的个数加1的二倍中的最小值,即为min(10-0,(0 1)*2)=2,0小于2,需要线程池启动异步数据加载任务,待执行任务数为目标缓存队列的大小与目标缓存队列中包含待读取数据对象的个数的差值,和目标缓存队列中包含待读取数据对象的个数加1的二倍中的最小值,也为min(10-0,(0 1)*2)=2,即可以使用线程池中任意2个线程对待读取数据文件中的2个待读取数据对象进行加载,并顺序存储于目标缓存队列中,此时目标缓存队列中有2个待读取数据对象。
109.当目标缓存队列中一个待读取数据对象更新至当前缓存区并被读取完毕(即消费掉一个待读取数据对象),此时目标缓存队列中待读取数据对象个数为1,预设阈值变为min(10-1,(1 1)*2)=4,1小于4,需要线程池启动异步数据加载任务,待执行任务数也变为min(10-1,(1 1)*2)=4,即可以使用线程池中任意4个线程对待读取数据文件中的4个待读取数据对象进行加载,并顺序存储于目标缓存队列中,此时目标缓存队列中有5个待读取数据对象。
110.进一步数据读取过程中,当目标缓存队列中一个待读取数据对象更新至当前缓存区并被读取完毕,此时目标缓存队列中待读取数据对象个数为4,预设阈值变为min(10-4,(4 1)*2)=6,4小于6,需要线程池启动异步数据加载任务,待执行任务数也变为min(10-4,
(4 1)*2)=6,即可以使用线程池中5个线程对待读取数据文件中的5个待读取数据对象进行加载,之后再使用线程池中1个线程对待读取数据文件中的1个待读取数据对象进行加载,并顺序存储于目标缓存队列中,此时目标缓存队列中有10个待读取数据对象。
111.示例性的,待读取数据文件的大小为1g,每个待读取数据对象大小为1024个字节,则可以利用线程池中的线程异步加载多个1024个字节的待读取数据对象,并按照待读取数据对象在待读取数据文件中的位置顺序存储于目标缓存队列中,那么目标缓存队列中就包含多个待读取数据对象,进而在当前缓存区中不包含可读目标数据时,可以从目标缓存队列中读取数据,减少数据等待时间。
112.异步数据加载可以使得多个线程,分别根据每一待读取数据对象对应的数据开始位置和数据结束位置,从待读取数据文件中加载(即拉取)数据,然后将所加载的待读取数据对象写入目标缓存队列中,并更新目标缓存队列中各待读取数据对象信息。其中,各待读取数据对象的数据开始位置和数据结束位置,可根据实际需求设定,例如,可以设置待读取数据对象大小为1024个字节,或2048个字节,如果是1024个字节,那么待读取数据文件中的一个待读取数据对象的数据开始位置和数据结束位置对应可以为0和1023,或1024和2047;如果是2048个字节,那么待读取数据文件中的一个待读取数据对象的数据开始位置和数据结束位置对应可以为0和2047,或2048和4095等。
113.本发明实施例中,利用线程池技术在目标缓存队列中异步加载多个待读取数据对象,实现异步非阻塞数据读取,进而在当前缓存区中不包含可读取目标数据的情况下,直接从目标缓存队列中读取数据,相较于现有技术,只需要在第一次数据读取时等待一次i/o传输所耗费的时间,就能够完成对待读取数据文件的数据读取,降低了客户端数据读取等待时间,减少了整个数据文件的读取时间,提高了数据读取的效率。
114.作为本发明实施例一种可选的实施方式,上述步骤s106在个数不为零的情况下,根据目标缓存队列中第一个待读取数据对象的状态信息,更新当前缓存区中的数据,可以通过以下方式实现:
115.在个数不为零的情况下,确定目标缓存队列中第一个待读取数据对象的状态信息;
116.在状态信息不为加载失败信息的情况下,将第一个待读取数据对象更新至当前缓存区中,并删除目标缓存队列中第一个待读取数据对象。
117.在当前缓存区中不包含可读取目标数据,目标缓存队列中包含的待读取数据对象的个数不为零的情况下,表明当前缓存区中没有可读取目标数据,但是目标缓存队列中还缓存有待读取数据对象,此时,可以先确定目标缓存队列中第一个待读取数据对象的状态信息。
118.第一个待读取数据对象的状态信息可以包括:未加载数据信息,加载成功信息以及加载失败信息。其中,未加载数据信息,表示该第一个待读取数据对象中的数据还未加载,即该第一个待读取数据对象为空,此时需要等待线程加载该第一个待读取数据对象中的数据;加载成功信息,表示该第一个待读取数据对象中的数据加载完成;加载失败信息,表示该第一个待读取数据对象中的数据加载失败,实际应用中,可以设置线程在加载失败的情况下进行重试,在重试设定次数之后还未加载成功,表明该第一个待读取数据对象的数据确实加载失败。
119.作为本发明实施例一种可选的实施方式,在状态信息不为加载失败信息的情况下,将第一个待读取数据对象更新至当前缓存区中,并删除目标缓存队列中第一个待读取数据对象的实施方式可以包括:
120.在状态信息为加载成功信息的情况下,将第一个待读取数据对象更新至当前缓存区中,并删除目标缓存队列中第一个待读取数据对象;
121.在状态信息为未加载数据信息的情况下,等待第一个待读取数据对象中的数据加载完成后,将第一个待读取数据对象更新至当前缓存区中,并删除目标缓存队列中第一个待读取数据对象。
122.作为本发明实施例一种可选的实施方式,在第一个待读取数据对象的状态信息为加载失败信息的情况下,返回数据读取失败的信息,并清空当前缓存区。
123.在第一个待读取数据对象的状态信息为加载失败信息的情况下,表明该第一个待读取数据对象的数据确实加载失败,此时,可以向客户端返回数据读取失败的信息,并清空当前缓存区。
124.本发明实施例中,在当前缓存区中不包含可读取目标数据,目标缓存队列中包含的待读取数据对象的个数不为零的情况下,可以将目标缓存队列中的待读取数据对象更新至当前缓存区中,以便于客户端可以直接从当前缓存区中读取待读取数据文件中的目标数据,无需等待,且,在目标缓存队列中包含的待读取数据对象的个数小于预设阈值的情况下,异步加载待读取数据对象,可以使得对待读取数据文件中的目标数据进行读取,和对待读取数据文件中待读取数据对象进行加载同步操作,进而提升数据读取效率。
125.作为本发明实施例一种可选的实施方式,在待读取数据文件读取完成的情况下,可以关闭线程池,并清空当前缓存区。
126.在知晓待读取数据文件大小的情况下,因待读取数据对象对应有数据开始位置和数据结束位置,而当前缓存区中的可读取目标数据为待读取数据对象更新至当前缓存区得到的,进而在当前缓存区中读取可读取目标数据时,即可知晓当前可读取目标数据的位置信息,以便于知晓是否对待读取数据文件读取完毕。在待读取数据文件读取完成的情况下,可以关闭线程池,并清空当前缓存区。
127.示例性的,如图3所示,本发明实施例的数据读取方法可以通过流读取加速组件实现,当客户端需要读取远程文件时,可以通过客户端数据读取接口,读取当前缓存区中待读取数据文件中的可读取目标数据,在当前缓存区中包含可读取目标数据时,从当前缓存区中读取可读取目标数据,并返回所读取的目标数据,在当前缓存区中不包含可读取目标数据时,确定目标缓存队列中包含的待读取数据对象(图3中的buf1-buf6)的个数,在目标缓存队列中包含的待读取数据对象的个数小于预设阈值的情况下,向线程池发送异步数据加载任务,线程池基于异步数据加载任务,根据预设策略确定异步数据加载所对应的待执行任务数,并启动线程,对待读取数据文件中待执行任务数个待读取数据对象进行加载,并将所加载的待读取数据对象顺序存储于目标缓存队列中。
128.以及在目标缓存队列中包含的待读取数据对象的个数不为零的情况下,确定目标缓存队列中第一个待读取数据对象的状态信息,在第一个待读取数据对象的状态信息不为加载失败信息的情况下,将第一个待读取数据对象更新至当前缓存区中,删除第一个待读取数据对象,在第一个待读取数据对象的状态信息为加载失败信息的情况下,返回数据读
取失败的信息,并清空当前缓存区,在待读取数据文件读取完成的情况下,关闭线程池,并清空当前缓存区。
129.相应于上述方法实施例,本发明实施例还提供了相应的装置实施例。
130.如图4所示,本发明实施例提供了一种数据读取装置,该装置可以包括:
131.接收模块201,用于接收数据读取请求,数据读取请求中包含待读取数据文件的标识。
132.第一判断模块202,用于判断待读取数据文件的标识所对应的待读取数据文件是否已读取完成。
133.第二判断模块203,用于在第一判断模块判断出待读取数据文件没有读取完成的情况下,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据,可读取目标数据为待读取数据文件的部分数据。
134.确定模块204,用于在第二判断模块判断出当前缓存区中不包含可读取目标数据时,确定目标缓存队列中包含的待读取数据对象的个数,其中,待读取数据对象为待读取数据文件的部分数据,目标缓存队列为当前缓存区对应的缓存队列。
135.数据加载模块205,用于在个数小于预设阈值的情况下,将待读取数据文件中的待读取数据对象,异步加载至目标缓存队列中,以及触发第二判断模块,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据。
136.数据更新模块206,用于在个数不为零的情况下,根据目标缓存队列中第一个待读取数据对象的状态信息,更新当前缓存区中的数据,并触发第二判断模块,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据。
137.本发明实施例提供的一种数据读取装置,设置当前缓存区对应的目标缓存队列,在目标缓存队列中异步加载多个待读取数据对象,实现异步非阻塞数据读取,进而在当前缓存区中不包含可读取目标数据的情况下,直接从目标缓存队列中读取数据,相较于现有技术,只需要在第一次数据读取时等待一次i/o传输所耗费的时间,就能够完成对待读取数据文件的数据读取,降低了客户端数据读取等待时间,减少了整个数据文件的读取时间,提高了数据读取的效率。
138.可选地,上述数据加载模块205,具体用于:
139.在个数小于预设阈值的情况下,根据预设策略确定异步数据加载所对应的待执行任务数,预设策略是根据目标缓存队列的大小,以及目标缓存队列中包含待读取数据对象的个数确定的。
140.对待读取数据文件中待执行任务数个待读取数据对象进行加载,并将所加载的待读取数据对象顺序存储于目标缓存队列中。
141.可选地,上述预设策略为:
142.将目标缓存队列的大小与目标缓存队列中包含待读取数据对象的个数的差值,和目标缓存队列中包含待读取数据对象的个数加1的二倍中的最小值,确定为待执行任务数。
143.可选地,上述数据更新模块206,包括:
144.确定子模块,用于在个数不为零的情况下,确定目标缓存队列中第一个待读取数据对象的状态信息。
145.第一更新子模块,用于在状态信息不为加载失败信息的情况下,将第一个待读取
数据对象更新至当前缓存区中,并删除目标缓存队列中第一个待读取数据对象。
146.可选地,上述数据更新模块206,还包括:
147.第二更新子模块,用于在状态信息为加载失败信息的情况下,返回数据读取失败的信息,并清空当前缓存区。
148.可选地,上述第一更新子模块,具体用于:
149.在状态信息为加载成功信息的情况下,将第一个待读取数据对象更新至当前缓存区中,并删除目标缓存队列中第一个待读取数据对象。
150.在状态信息为未加载数据信息的情况下,等待第一个待读取数据对象中的数据加载完成后,将第一个待读取数据对象更新至当前缓存区中,并删除目标缓存队列中第一个待读取数据对象。
151.可选地,上述装置还包括:
152.数据读取模块,用于在第二判断模块判断出当前缓存区中包含可读取目标数据时,从当前缓存区中读取可读取目标数据,并返回所读取的目标数据,以及触发第二判断模块,判断待读取数据文件对应的当前缓存区中是否包含可读取目标数据。
153.可选地,上述装置还包括:
154.清除模块,用于在第一判断模块判断出待读取数据文件读取完成的情况下,清空当前缓存区。
155.本发明实施例还提供了一种代理服务器设备,如图5所示,包括处理器301、通信接口302、存储器303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信,
156.存储器303,用于存放计算机程序;
157.处理器301,用于执行存储器303上所存放的程序时,实现上述数据读取方法的步骤,以达到相同的技术效果。
158.上述电子设备提到的通信总线可以是pci(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
159.通信接口用于上述电子设备与其他设备之间的通信。
160.存储器可以包括ram(random access memory,随机存取存储器),也可以包括nvm(non-volatile memory,非易失性存储器),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
161.上述的处理器可以是通用处理器,包括cpu(central processing unit,中央处理器)、np(network processor,网络处理器)等;还可以是dsp(digital signal processing,数字信号处理器)、asic(application specific integrated circuit,专用集成电路)、fpga(field-programmable gate array,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
162.在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一数据读取
方法的步骤,以达到相同的技术效果。
163.在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一数据读取方法的步骤,以达到相同的技术效果。
164.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、dsl(digital subscriber line,数字用户线))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd(digital versatile disc,数字多功能光盘))、或者半导体介质(例如ssd(solid state disk,固态硬盘))等。
165.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
166.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置/电子设备实施例而言,由于其基本相似于系统实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
167.以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献