大数据文件读取方法、装置、计算机设备及存储介质与流程

文档序号:16754213发布日期:2019-01-29 17:11阅读:171来源:国知局
大数据文件读取方法、装置、计算机设备及存储介质与流程

本发明涉及数据库技术领域,尤其涉及大数据文件读取方法、装置、计算机设备及存储介质。



背景技术:

随着大数据时代的到来,数据的存储、读取和迁移显得越来越重要。目前,数据库大多采用dbf格式文件来存储数据。dbf文件(后缀名为.dbf的数据库文件)是dbase、foxpro等数据库系统所使用的数据库格式文件。之所以大多选择使用dbf文件,这是因为大数据时代所需的数据量非常庞大,服务器往往需要从数据中心或者其它地方获取到所需的数据并存储到数据库中,以便客户端向服务器请求数据时可以快速响应。dbf文件因其具有良好的数据结构而被广泛使用。

当读取dbf文件时,现有方式是从磁盘上依照dbf字段格式的要求对每条数据进行依次读取,并在读取过程中解析dbf文件中的字段数据,得到相应字段的值。

然而,该现有方法在读取大数据量的dbf文件时,比如读取10g以上的dbf文件,往往需要耗费大量的读取时间,难以满足大数据时代对数据快速读取的需求。



技术实现要素:

本发明实施例提供一种大数据文件读取方法、装置、计算机设备及存储介质,以解决现有dbf文件的数据读取方式效率低下的问题。

一种大数据文件读取方法,包括:

读取目标dbf文件的头部信息,得到所述头部信息中的每行字段数据量,所述每行字段数据量是指所述目标dbf文件中每一行字段数据的大小;

将所述目标dbf文件的首块字段数据映射至指定内存中作为当前字段块,所述首块字段数据是指所述目标dbf文件中位于所述头部信息后且紧靠所述头部信息的预设数据量大小的字段数据;

按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据;

对获取到的字段数据进行解析,得到解析后的数据值;

直至获取到所述目标dbf文件的所有字段数据之前,将所述目标dbf文件的下一块字段数据映射至所述指定内存中作为新的当前字段块,返回执行按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据的步骤,所述下一块字段数据是指所述目标dbf文件中位于当前字段块后且紧靠当前字段块的所述预设数据量大小的字段数据。

一种大数据文件读取装置,包括:

头部信息读取模块,用于读取目标dbf文件的头部信息,得到所述头部信息中的每行字段数据量,所述每行字段数据量是指所述目标dbf文件中每一行字段数据的大小;

字段数据映射模块,用于将所述目标dbf文件的首块字段数据映射至指定内存中作为当前字段块,所述首块字段数据是指所述目标dbf文件中位于所述头部信息后且紧靠所述头部信息的预设数据量大小的字段数据;

逐行获取模块,用于按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据;

字段数据解析模块,用于对获取到的字段数据进行解析,得到解析后的数据值;

循环处理模块,用于直至获取到所述目标dbf文件的所有字段数据之前,将所述目标dbf文件的下一块字段数据映射至所述指定内存中作为新的当前字段块,返回依次触发所述逐行获取模块和所述字段数据解析模块,所述下一块字段数据是指所述目标dbf文件中位于当前字段块后且紧靠当前字段块的所述预设数据量大小的字段数据。

一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述大数据文件读取方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述大数据文件读取方法的步骤。

上述大数据文件读取方法、装置、计算机设备及存储介质,首先,读取目标dbf文件的头部信息,得到所述头部信息中的每行字段数据量,所述每行字段数据量是指所述目标dbf文件中每一行字段数据的大小;然后,将所述目标dbf文件的首块字段数据映射至指定内存中作为当前字段块,所述首块字段数据是指所述目标dbf文件中位于所述头部信息后且紧靠所述头部信息的预设数据量大小的字段数据;接着,按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据;对获取到的字段数据进行解析,得到解析后的数据值;直至获取到所述目标dbf文件的所有字段数据之前,将所述目标dbf文件的下一块字段数据映射至所述指定内存中作为新的当前字段块,返回执行按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据的步骤,所述下一块字段数据是指所述目标dbf文件中位于当前字段块后且紧靠当前字段块的所述预设数据量大小的字段数据。可见,本发明中,由于在内存中处理数据的速度要远快于在磁盘中处理数据的速度,再加上文件映射的方式也比磁盘上读取数据的效率要高,因此,在整体的处理效率上要高于现有方式,提高了dbf文件读取数据的效率,减少数据的读取时间,可以满足大数据时代对数据快速读取的需求。

附图说明

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

图1是本发明一实施例中大数据文件读取方法的一应用环境示意图;

图2是本发明一实施例中大数据文件读取方法的一流程图;

图3是本发明一实施例中大数据文件读取方法步骤102在一个应用场景下的流程示意图;

图4是本发明一实施例中大数据文件读取方法在一个应用场景下删除头部信息的流程示意图;

图5是本发明一实施例中大数据文件读取方法在一个应用场景下预先设置该预设数据量大小的流程示意图;

图6是本发明一实施例中大数据文件读取装置的结构示意图;

图7是本发明一实施例中计算机设备的一示意图。

具体实施方式

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

本申请提供的大数据文件读取方法,可应用在如图1的应用环境中,其中,客户端通过网络与服务器进行通信。其中,该客户端可以但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一实施例中,如图2所示,提供一种大数据文件读取方法,以该方法应用在图1中的服务器为例进行说明,包括如下步骤:

101、读取目标dbf文件的头部信息,得到所述头部信息中的每行字段数据量,所述每行字段数据量是指所述目标dbf文件中每一行字段数据的大小;

本实施例中,dbf文件为数据库格式文件的一种,其有固定的格式要求,比如dbf文件的头部为头部信息,头部信息中记录了该dbf文件中一行字段数据的大小,即所述每行字段数据量。因此,服务器可以通过读取目标dbf文件的头部信息来得到所述头部信息中的每行字段数据量。

102、将所述目标dbf文件的首块字段数据映射至指定内存中作为当前字段块,所述首块字段数据是指所述目标dbf文件中位于所述头部信息后且紧靠所述头部信息的预设数据量大小的字段数据;

可以理解的是,由于将数据映射到内存的速率要远快于读取数据的速率,因此,本方案采用文件映射的方式将目标dbf文件映射到指定内存中进行处理。由于目标dbf文件通常较大,而服务器的内存资源是有限的,通常难以做到将整个目标dbf文件一次性映射至内存中。因此,本实施例中,服务器可以先将所述目标dbf文件的首块字段数据映射至指定内存中作为当前字段块,其中,所述首块字段数据是指所述目标dbf文件中位于所述头部信息后且紧靠所述头部信息的预设数据量大小的字段数据。举例说明,假设该目标dbf文件中0-100字节为头部信息,101-10000字节为字段数据。当该预设数据量大小为100字节时,则该首块字段数据为101-200字节,服务器先将该目标dbf文件中101-200字节的字段数据映射至该指定内存中作为当前字段块。

在实际使用中,在将目标dbf文件映射至指定内存时,若想单独将该首块字段数据映射至指定内存,这是难以实现的。为此,如图3所示,进一步地,所述步骤102具体可以包括:

201、将所述目标dbf文件中从所述头部信息开始预设映射数据量大小的数据映射至指定内存,其中,所述预设映射数据量大小等于预设数据量大小与所述头部信息的数据量大小之和;

202、将映射至所述指定内存的数据中除所述头部信息以外的数据确定为当前字段块。

对于步骤201,可以理解的是,为了成功将首块字段数据映射至指定内存,可以将该首块字段数据连同头部信息一起映射至指定内存,也即从目标dbf文件的头部开始映射预设映射数据量大小的字段数据,其中,该预设映射数据量大小等于预设数据量大小与所述头部信息的数据量大小之和。例如,承接上述举例,即将给目标dbf文件中0-200字节的数据映射至指定内存中。

对于步骤202,由于步骤201中映射的数据包含了头部信息,而这些头部信息中没有包含本方案所需的字段数据的值,因此,服务器可以直接将映射至所述指定内存的数据中除所述头部信息以外的数据确定为当前字段块。对于映射到指定内存中的头部信息,可以擦除或者不予理睬,本实施例对此不作限定。

针对上述提到的映射数据时难以实现单独映射首块字段数据的问题,本实施例中还有另一种方式进行处理。如图4所示,进一步地,在步骤102之前还包括:

301、将所述目标dbf文件的头部信息删除,得到新的目标dbf文件;

步骤102具体为:将所述目标dbf文件中位于头部的预设数据量大小的字段数据映射至指定内存中作为当前字段块。

这种方式的思路是,在对目标dbf文件进行映射之前,先将目标dbf文件中的头部信息删除,这样,在执行步骤102对目标dbf文件映射时,新的目标dbf文件中仅剩下字段数据,不存在头部信息带来的干扰,因此可以直接进行映射处理。

对于步骤301,服务器可以将所述目标dbf文件的头部信息删除,得到删除头部信息后的新的目标dbf文件。

在步骤301的基础上,可以理解的是,上述步骤102中,服务器可以将所述目标dbf文件中位于头部的预设数据量大小的字段数据映射至指定内存中作为当前字段块。这是因为,经过步骤301的处理,该目标dbf文件中已经没有头部信息,因此可以直接从头开始取预设数据量大小的字段数据映射到指定内存中,这些映射到指定内存中的字段数据即为当前字段块。

在dbf文件中,字段数据均以行的形式存储,每行的数据量为所述每行字段数据量。但是,考虑到在确定出映射得到的当前字段块时,当前字段块的数据量为预设数据量大小,若对该预设数据量大小和每行字段数据量不加以限定,这会使得当前字段块中最后一行的数据可能不足一行字段数据。比如,假设每行字段数据量为100,预设数据量大小为250,0-100字节为头部信息,则该目标dbf文件的首块字段数据为101-350,最后一行数据为301-350,可见最后一行数据不足一行字段数据,这会对后续解析字段数据带来困难。为此,本实施例可以通过限定预设数据量大小和每行字段数据量的关系来避免出现上述情况,使得每个当前字段块的最后一行数据均为足够的一行字段数据。

如图5所示,进一步地,所述预设数据量大小可以通过以下步骤预先设定:

401、获取所述指定内存的当前可用空间;

402、根据预设的内存使用比例和所述当前可用空间确定所述指定内存用于映射字段数据的映射空间;

403、将所述映射空间除以所述每行字段数据量,得到第一数值;

404、取整所述第一数值,并计算取整后的所述第一数值与所述每行字段数据量之积,得到第二数值作为预设数据量大小。

对于步骤401,该当前可用空间是指指定内存当前可以使用的剩余空间,比如,假设指定内存贡4g,已使用2g,则当前可用空间为2g。

对于步骤402,可以理解的是,服务器可以预先设定内存使用比例,该内存使用比例表示应当使用当前可用空间中的多少比例的内存来映射数据。该内存使用比例可以根据实际使用情况设定,比如可以设定为50%。服务器在获取到所述指定内存的当前可用空间之后,可以计算预设的内存使用比例和所述当前可用空间之积,得到所述指定内存用于映射字段数据的映射空间。

对于步骤403和404,本实施例中,为了使得预设数据量大小等于每行字段数据量的整数倍,同时该预设数据量大小尽可能接近该映射空间的大小。因此,可以先将所述映射空间除以所述每行字段数据量,得到第一数值,然后对第一数值取整,取整后的该第一数值可以认为是倍数,计算该取整后的所述第一数值与所述每行字段数据量之积得到的第二数值即为该每行字段数据量的整数倍,从而可以确定该第二数值为预设数据量大小。

103、按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据;

可以理解的是,由于dbf文件中字段数据是一行一行排列、存储的,而每一行的字段数据中又预先约定了各个字段的排列顺序以及各个字段各自所占的字节,因此,在获取该当前字段块中的字段数据时,需要按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据,然后在执行步骤104分别这些字段数据进行解析。

进一步地,由上述内容可知,当前字段块的最后一行数据可能不足一行字段数据,面对这种情况,在步骤103之后,本方法还可以包括:若获取到的所述当前字段块最后一行的字段数据的数据量少于每行字段数据量,则暂存所述最后一行的字段数据作为接续数据;然后,在步骤105将所述目标dbf文件的下一块字段数据映射至所述指定内存中作为新的当前字段块之后,返回执行按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据的步骤之前,将所述接续数据合并至所述当前字段块的头部。例如,承接上述举例,假设当前字段块最后一行数据为301-350,则服务器可以将该最后一行数据暂存在内存中,然后,在步骤105得到新的当前字段块之后,可知该新的当前字段块为351-600,服务器将该最后一行数据合并到当前字段块的头部,从而使得当前字段块为301-600。可见,通过这种方式的处理可以很好地处理当前字段块的最后一行数据。

104、对获取到的字段数据进行解析,得到解析后的数据值;

本实施例中,每当获取到当前字段块中每行的字段数据之后,服务器便可以对获取到的字段数据进行解析,得到解析后的数据值。可以理解的是,dbf文件中每一行的字段数据中的各个字段均按照预先约定的排列顺序排列,并且各个字段各自所占的字节也预先约定好,因此,在获取到这些字段数据后,直接按照约定的各个字段解析出这些字段数据中的数据值即可。

105、直至获取到所述目标dbf文件的所有字段数据之前,将所述目标dbf文件的下一块字段数据映射至所述指定内存中作为新的当前字段块,返回执行按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据的步骤,所述下一块字段数据是指所述目标dbf文件中位于当前字段块后且紧靠当前字段块的所述预设数据量大小的字段数据。

本实施例中,由于获取和解析整个目标dbf文件中的字段数据,因此,在执行步骤104之后,即获取和解析完当前字段块后,服务器可以将所述目标dbf文件的下一块字段数据映射至所述指定内存中作为新的当前字段块,然后返回执行步骤103和步骤104来处理首块字段数据的下一块字段数据,在步骤103和步骤104处理完成下一块字段数据后,再确定下下一块字段数据为新的当前字段块,然后接着获取和解析,直到所述目标dbf文件的所有字段数据均被获取和解析完成,可知,此时可以得到该目标dbf文件中所有字段数据的数据值,至此对该目标dbf文件的读取完成。

本发明实施例中,首先,读取目标dbf文件的头部信息,得到所述头部信息中的每行字段数据量,所述每行字段数据量是指所述目标dbf文件中每一行字段数据的大小;然后,将所述目标dbf文件的首块字段数据映射至指定内存中作为当前字段块,所述首块字段数据是指所述目标dbf文件中位于所述头部信息后且紧靠所述头部信息的预设数据量大小的字段数据;接着,按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据;对获取到的字段数据进行解析,得到解析后的数据值;直至获取到所述目标dbf文件的所有字段数据之前,将所述目标dbf文件的下一块字段数据映射至所述指定内存中作为新的当前字段块,返回执行按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据的步骤,所述下一块字段数据是指所述目标dbf文件中位于当前字段块后且紧靠当前字段块的所述预设数据量大小的字段数据。可见,本发明中,由于在内存中处理数据的速度要远快于在磁盘中处理数据的速度,再加上文件映射的方式也比磁盘上读取数据的效率要高,因此,在整体的处理效率上要高于现有方式,提高了dbf文件读取数据的效率,减少数据的读取时间,可以满足大数据时代对数据快速读取的需求。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

在一实施例中,提供一种大数据文件读取装置,该大数据文件读取装置与上述实施例中大数据文件读取方法一一对应。如图6所示,该大数据文件读取装置包括头部信息读取模块501、字段数据映射模块502、逐行获取模块503、字段数据解析模块504和循环处理模块505。各功能模块详细说明如下:

头部信息读取模块501,用于读取目标dbf文件的头部信息,得到所述头部信息中的每行字段数据量,所述每行字段数据量是指所述目标dbf文件中每一行字段数据的大小;

字段数据映射模块502,用于将所述目标dbf文件的首块字段数据映射至指定内存中作为当前字段块,所述首块字段数据是指所述目标dbf文件中位于所述头部信息后且紧靠所述头部信息的预设数据量大小的字段数据;

逐行获取模块503,用于按照所述每行字段数据量依次逐行获取所述当前字段块中每行的字段数据;

字段数据解析模块504,用于对获取到的字段数据进行解析,得到解析后的数据值;

循环处理模块505,用于直至获取到所述目标dbf文件的所有字段数据之前,将所述目标dbf文件的下一块字段数据映射至所述指定内存中作为新的当前字段块,返回依次触发所述逐行获取模块和所述字段数据解析模块,所述下一块字段数据是指所述目标dbf文件中位于当前字段块后且紧靠当前字段块的所述预设数据量大小的字段数据。

进一步地,所述字段数据映射模块可以包括:

第一映射单元,用于将所述目标dbf文件中从所述头部信息开始预设映射数据量大小的数据映射至指定内存,其中,所述预设映射数据量大小等于预设数据量大小与所述头部信息的数据量大小之和;

字段块确定单元,用于将映射至所述指定内存的数据中除所述头部信息以外的数据确定为当前字段块。

进一步地,所述大数据文件读取装置还可以包括:

头部信息删除模块,用于将所述目标dbf文件的头部信息删除,得到新的目标dbf文件;

所述字段数据映射模块具体用于:将所述目标dbf文件中位于头部的预设数据量大小的字段数据映射至指定内存中作为当前字段块。

进一步地,所述预设数据量大小可以通过以下步骤预先设定:

可用空间获取模块,用于获取所述指定内存的当前可用空间;

映射空间确定模块,用于根据预设的内存使用比例和所述当前可用空间确定所述指定内存用于映射字段数据的映射空间;

第一数值计算模块,用于将所述映射空间除以所述每行字段数据量,得到第一数值;

取整模块,用于取整所述第一数值,并计算取整后的所述第一数值与所述每行字段数据量之积,得到第二数值作为预设数据量大小。

进一步地,所述大数据文件读取装置还可以包括:

暂存模块,用于若获取到的所述当前字段块最后一行的字段数据的数据量少于每行字段数据量,则暂存所述最后一行的字段数据作为接续数据;

合并模块,用于在将所述目标dbf文件的下一块字段数据映射至所述指定内存中作为新的当前字段块之后,返回依次触发所述逐行获取模块和所述字段数据解析模块之前,将所述接续数据合并至所述当前字段块的头部。

关于大数据文件读取装置的具体限定可以参见上文中对于大数据文件读取方法的限定,在此不再赘述。上述大数据文件读取装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储大数据文件读取方法中涉及到的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种大数据文件读取方法。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中大数据文件读取方法的步骤,例如图2所示的步骤101至步骤105。或者,处理器执行计算机程序时实现上述实施例中大数据文件读取装置的各模块/单元的功能,例如图6所示模块501至模块505的功能。为避免重复,这里不再赘述。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中大数据文件读取方法的步骤,例如图2所示的步骤101至步骤105。或者,计算机程序被处理器执行时实现上述实施例中大数据文件读取装置的各模块/单元的功能,例如图6所示模块501至模块505的功能。为避免重复,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

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