文件解析方法和装置
技术领域
本发明涉及信息技术,尤其涉及一种文件解析方法和装置。
背景技术
在接收到文件之后,需要首先对文件进行解析,以确保文件的准确性,同时确保文件在后续处理中的可识别性,从而便于后续对文件进行下一步处理。在解析过程中,可以具体针对文件中的内容或格式进行一系列的扫描、校验等操作。
例如:对于金融业务,在从外部公司获取记录有金融数据的文件时,为了保证下一步数据处理的准确性,在对这些金融数据进行数据处理之前,需要确保文件的格式和字段内容的准确性,因此,要对从外部公司所获取到的文件进行解析。在解析通过后,再继续执行相应的数据处理过程。
目前,大多采用单一进程对所获取到的文件进行解析,在文件的数据量较大的情况下,解析的速度较慢,从而不能保证在预设时间点之前完成对文件的解析,在金融业务这类时效性要求较高的场景下,会导致后续业务停滞进而带来较为严重的损失。
发明内容
本发明提供一种文件解析方法和装置,用于解决现有技术中,文件解析速度较慢的技术问题。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供了一种文件解析方法,包括:
将文件划分为至少两个文件片段;
并行对所述至少两个文件片段进行解析。
第二方面,提供了一种文件解析装置,包括:
划分模块,用于将文件划分为至少两个文件片段;
解析模块,用于并行对所述至少两个文件片段进行解析。
本发明实施例提供的文件解析方法和装置,通过将文件划分为至少两个文件片段,从而并行对所划分得到的至少两个文件片段进行解析。从而通过这种并行解析的方式,提高了文件的解析速度,解决了文件解析速度较慢的技术问题,尤其是在文件的数据量较大的情况下,能够确保在预设时间点之前完成文件的解析,在金融业务这类时效性较高的场景下,避免了由于文件解析未完成后续业务停滞所导致的经济损失。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本发明实施例一提供的一种文件解析方法的流程示意图;
图2为文件解析的场景示意图;
图3为文件解析的原理示意图;
图4为本发明实施例二提供的一种文件解析方法的流程示意图;
图5为本发明实施例三提供的一种文件解析装置的结构示意图;
图6为本发明实施例四提供的一种文件解析装置的结构示意图;
图7为本发明实施例五提供的一种文件解析***的结构示意图;
图8为文件解析***的原理示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
下面结合附图对本发明实施例提供的文件解析方法、装置和***进行详细描述。
实施例一
图1为本发明实施例一提供的一种文件解析方法的流程示意图,本实施例所提供的方法,可以由文件解析***执行,如图2所示的文件解析的场景示意图,该文件解析***可以从外部***获取或接收待解析的文件,从而对其进行解析,以便解析完成后由其他业务处理***执行业务处理流程。具体的,作为一种可能的应用场景,该文件解析***运行在分布式的集群中,或者,作为另一种可能的应用场景,该文件解析***运行在单机中,本实施例中对此不做限定。
如图1所示,文件解析方法包括:
步骤101、将文件划分为至少两个文件片段。
具体的,对文件进行划分时,可以根据预设的划分策略将文件划分为多个文件片段。由于这里的文件划分是对构成文件的字节所进行的划分,因此在进行划分之前,还需要根据文件的类型,确定该类型文件的最小划分单元,采用该最小划分单元对文件进行划分,避免将一个最小划分单元中各部分的字节划分在不同的文件片段中,导致无法进行文件解析。可见,这里确定最小划分单元时,需参考后续文件解析时所能够对每一类型文件进行解析的最小单元进行确定。
例如:对于文档类型的文件,最小划分单元可以为语句或者段落或者是页;而对于表格类型的文件,最小划分单元可以为单元格,或者为行,或者为列。
其中,对于划分策略来说,可以根据文件片段的预设数据量,或者是根据文件片段的预设数量对文件进行划分,从而得到多个文件片段。
例如:可以将文件划分为固定的100个文件片段,每个文件片段的数据量约占文件的数据量的1%。又例如:还可以在划分时,确保每一个文件片段的数据量约为固定的数据量,但文件片段的数量是不确定的,需要根据文件的数据量进行调整。
步骤102、并行对至少两个文件片段进行解析。
具体的,根据各文件片段在文件中的位置,生成各解析任务,将各解析任务调度到至少两个进程中的对应进程。由至少两个进程并行执行调度获得的解析任务。
作为一种可能的实现方式,在由至少两个进程并行执行调度获得的解析任务时,可以针对每一个进程,根据调度获得的解析任务中所记录的位置,从文件中读取得到对应的文件片段。其中,解析任务中所记录的位置可以为文件片段的第一个和最后一个字节在文件中的相对位置。当解析任务指示对文件片段执行校验操作时,由该进程根据预先配置的校验规则,对所读取到的文件片段进行校验操作,其中,校验规则具体用于校验预设行或列中的文字是否符合一定的格式,或者数字是否符合一定的取值范围,某个单元格中的取值是否为空等。
需要说明的是,对于解析这一过程具体可以包括校验、格式转换、扫描等一系列操作的一个或多个组合,本实施例中的校验操作仅作为一种示意性说明,不构成对本发明实施例的限制。
可见,如图3所示,通过将文件划分为至少两个文件片段,从而并行对所划分得到的至少两个文件片段进行解析。从而通过这种并行解析的方式,提高了文件的解析速度,解决了文件解析速度较慢的技术问题,尤其是在文件的数据量较大的情况下,能够确保在预设时间点之前完成文件的解析。
实施例二
图4为本发明实施例二提供的一种文件解析方法的流程示意图,本实施例所提供的方法可以由图2所提供的文件解析***执行,用于针对金融类常用的报表文件进行解析,也就是说,本实施例中的文件的类型均为表格。如图4所示,方法包括:
步骤201、当接收到文件通知时,获取文件。
具体的,当接收到文件通知时,从外部***获取已生成的文件,将文件存储在内存中。
步骤202、对所获取到的文件进行扫描。
具体的,对内存中的文件进行扫描,包括字节扫描和哈希扫描。其中,字节扫描用于确定文件的数据量,而哈希扫描用于确定文件的校验码,该校验码用于判读文件在传输过程中是否存在损坏,从而确定文件未损坏时,执行下一步骤,否则重新从外部***获取文件。在完成扫描后,能够得到文件的数据量等属性信息。
步骤203、将文件划分为预设数量的文件片段,得到各个文件片段在文件中的位置。
其中,位置具体为文件片段的第一个字节在文件中的相对位置和最后一个字节在文件中的相对位置。例如:可以为文件片段中的第一个和最后一个字节在文件中分别为第几个字节,还可以为文件片段中的第一个和最后一个字节在文件所存储区域中的存储位置。
具体的,本实施例中的文件为表格类型,从而可以以单元格为最小划分单元,将文件划分为预设数量的文件片段,各个文件片段之间具有大致相等的数据量。
例如:固定将文件划分为100个文件片段,每一个文件片段的数据量约占文件的总数据量的1%。每一个文件片段对应报表文件中固定的若干个单元格,且各个文件片段所对应的单元格能够构成完整的报表文件。
步骤204、针对每一个文件片段生成一个解析任务。
具体的,解析任务中包括:文件片段的第一个字节在文件中的相对位置和最后一个字节在文件中的相对位置,文件片段的数据量。还可以根据文件片段对解析任务进行标识,从而便于将解析任务调度至文件片段对应的进程。
步骤205、将解析任务调度到对应的进程。
具体的,可以预设各个文件片段与进程之间的对应关系,从而根据解析任务的标识所指示的文件片段,确定对应的进程,将该解析任务调度至对应的进程进行解析。
步骤206、由各进程并行执行解析任务。
具体的,预先为每一个进程配置了对应的校验规则,这个校验规则指示了对该文件片段中的各行各列所需校验的格式或数据。比如校验规则包括:文件片段中的第一列应为文字,文件片段中的第二列应为数值且不得为空等。
从而每一个进程均存在至少一个对应的校验规则,且各个进程之间,校验规则可能是不同的。
步骤207、生成解析结果,判断解析结果是否为成功,若成功则进行业务处理,否则指示导致解析失败的文件片段以提示人工处理。
若至少一个进程的校验结果为未通过,则确定文件解析失败。若全部进程的校验结果均为通过时,则确定文件解析成功。
在文件解析失败时,定位解析失败的文件片段在文件中的位置,甚至还可以定位校验失败的单元格在文件中的位置,从而在解析结果中包括指示校验失败的文件片段和/或单元格在文件中的位置。
这是由于,在实际应用中文件的数据量较大,若仅获知文件解析失败,而无法对存在问题导致解析失败的位置进行定位时,需要在人工处理时对整个文件进行修正,对文件进行修正的任务量较大,若能够根据校验失败的进程所解析的文件片段,查询该文件片段在文件中的位置,进而再根据该进程所记录的解析失败的单元格在文件片段中的位置,则能够确定出具体导致解析失败的单元格在文件中的位置,可以仅对该单元格进行修正,大大减少了对文件进行修正的任务量。
实施例三
图5为本发明实施例三提供的一种文件解析装置的结构示意图,如图5所示,包括:划分模块31和解析模块32。
划分模块31,用于将文件划分为至少两个文件片段。
具体的,划分模块31,具体用于根据所述文件的类型确定所述文件的最小划分单元;采用所述最小划分单元对所述文件进行划分。
解析模块32,用于并行对所述至少两个文件片段进行解析。
通过划分模块31将文件划分为至少两个文件片段,从而解析模块32并行对所划分得到的至少两个文件片段进行解析。从而通过这种并行解析的方式,提高了文件的解析速度,解决了文件解析速度较慢的技术问题,尤其是在文件的数据量较大的情况下,能够确保在预设时间点之前完成文件的解析,在金融业务这类时效性较高的场景下,避免了由于文件解析未完成后续业务停滞所导致的经济损失。
本实施例所提供的文件解析装置,具体用于执行实施例一所提供的文件解析方法,具体功能模块的实现参见前述实施例中的相关描述,本实施例中对此不再赘述。
实施例四
为了清楚说明本发明实施例三所提供的文件解析装置,图6为本发明实施例四提供的一种文件解析装置的结构示意图,在图5的基础上,作为一种可能的实现方式,如图6所示划分模块31包括:第一划分单元311和第二划分单元312。
第一划分单元311,用于根据预设数据量,对所述文件进行划分,以得到符合所述预设数据量的文件片段。
第二划分单元312,用于根据预设数量,对所述文件进行划分,以得到符合所述预设数量的文件片段。
需要说明的是,本实施例中的文件解析装置中,划分模块31可以包括第一划分单元311和/或第二划分单元312,图6仅作为一种可能的实现方式的示意,不构成对本发明实施例的限制。
进一步,解析模块32包括:生成单元321,调度单元322和执行单元323。
生成单元321,用于根据各文件片段在所述文件中的位置,生成各解析任务。
调度单元322,用于将各解析任务调度到至少两个进程中的对应进程。
执行单元323,用于由所述至少两个进程并行执行调度获得的解析任务。
其中,执行单元323包括:读取子单元3231和解析子单元3232。
读取子单元3231,用于针对每一个进程,根据调度获得的解析任务中所记录的位置,从所述文件中读取得到对应的文件片段。
解析子单元3232,用于对所读取到的文件片段进行解析。
作为一种可能的实现方式,解析任务用于对所述文件片段进行校验操作,基于此,解析子单元3232,具体用于根据对所述进程所预先配置的校验规则,对所读取到的文件片段进行校验。
进一步,文件解析装置还包括:扫描模块33,结果模块34和定位模块35。
扫描模块33,用于对所述文件进行扫描操作,以确定所述文件已成功接收。
结果模块34,用于当所述至少两个文件片段中的至少一个解析失败时,确定所述文件解析失败。
定位模块35,用于定位解析失败的文件片段在所述文件中的位置。
本实施例所提供的文件解析装置,具体用于执行实施例一和二所提供的文件解析方法,具体功能模块的实现参见前述实施例中的相关描述,本实施例中对此不再赘述。
实施例五
图7为本发明实施例五提供的一种文件解析***的结构示意图,该文件解析***运行在分布式的集群中,如图7所示,该文件解析***的架构包括前置分块层、调度层和任务解析层。
前置分块层上运行有至少一台前置分块服务器,调度层上运行有至少一台调度服务器和任务解析层上运行有多台任务解析服务器。
其中,前置分块服务器用于将文件划分为至少两个文件片段。
调度服务器的台数可以为一台或多台,不同的调度服务器可以运行于不同的集群内,每台调度服务器调度其所在集群中的任务解析服务器执行解析任务。
具体的,当调度层仅含一台调度服务器时,前置分块层将全部的待解析的文件片段发送给该调度服务器,由其根据这些文件片段生成解析任务并对解析任务进行调度;而当调度层包含两台或更多台调度服务器时,两台或更多台调度服务器之间需要首先执行一次调度,确定每台调度服务器所需处理的文件片段并发送至对应的调度服务器,然后再由每台调度服务器对各自所接收到的文件片段进行包括生成解析任务以及对解析任务进行调度在内的处理。可见,当调度层仅含一台调度服务器时对于文件片段为一次分发,当调度层包含至少两台调度服务器时为二次分发。
为了清楚说明文件解析***的运行,图8为文件解析***的原理示意图,如图8所示,包括:
步骤501、外部***生成文件之后,向文件解析***发送文件到达的通知消息。
步骤502、文件解析***的前置分块层获取当前的划分策略,根据当前的划分策略对文件进行划分,得到各文件片段。
具体的,对文件进行划分时,可以根据预设的划分策略将文件划分为多个文件片段。由于这里的文件划分是对构成文件的字节所进行的划分,因此在进行划分之前,还需要根据文件的类型,确定该类型文件的最小划分单元,采用该最小划分单元对文件进行划分,避免将一个最小划分单元中各部分的字节划分在不同的文件片段中,导致无法进行文件解析。可见,这里确定最小划分单元时,需参考后续文件解析时所能够对每一类型文件进行解析的最小单元进行确定。
例如:对于文档类型的文件,最小划分单元可以为语句或者段落或者是页;而对于表格类型的文件,最小划分单元可以为单元格,或者为行,或者为列。
其中,对于划分策略来说,可以根据文件片段的预设数据量,或者是根据文件片段的预设数量对文件进行划分,从而得到多个文件片段。
步骤503、前置分块层记录各文件片段的第一个和最后一个字节在文件中的相对位置,得到节点记录。
步骤504、对文件的内容和节点记录进行存储,将所存储的文件的内容和节点记录发送至分发调度层。
步骤505、分发调度层根据节点记录,对文件的各文件片段进行分块存储。
具体的,分发调度层读取节点记录中所记录的字节,根据所记录的字节确定文件的各文件片段的第一个字节和最后一个字节,从而确定出各文件片段的内容,对所确定出的各文件片段进行分块存储。
作为一种可能的实现方式,每一个文件片段可以存储在一个物理存储分块上,在这个物理存储分块上有且只存储有这一个文件片段。
作为另一种可能的实现方式,在存储空间不足时,可以将不同的文件片段存储在同一个物理存储分块上,进一步,可以采用能够用于区分的特殊字节,在两个文件片段之间进行分隔。
步骤506、分发调度层根据每一个文件片段的存储位置,生成解析任务。
其中,每一个解析任务与一个存储分块相对应,解析任务中可以记录有该文件片段的第一个字节和最后一个字节。
步骤507、分发调度层将各解析任务调度至任务解析层中对应的任务解析服务器,以使任务解析服务器执行该解析任务从而对文件片段进行解析。
具体的,分发调度层可以采用预设的调度策略进行调度,并将解析任务发送至对应的任务解析服务器。例如:调度策略可以为预设解析任务和任务解析服务器之间的对应关系,还可以为负载均衡等。
步骤508、分发调度层中各任务解析服务器根据所接收到的解析任务,从对应的存储分块中读取文件片段。
步骤509、分发调度层中各任务解析服务器对文件片段进行解析。
当解析任务指示对文件片段执行校验操作时,根据预先配置的校验规则,对所读取到的文件片段进行校验操作,其中,校验规则具体用于校验预设行或列中的文字是否符合一定的格式,或者数字是否符合一定的取值范围,某个单元格中的取值是否为空等。
步骤510、分发调度层中各任务解析服务器向分发调度层返回解析结果。
其中,解析结果中,包括针对问价片段解析成功或者失败的指示信息。
步骤511、分发调度层对所接收到的解析结果进行汇总。
若至少一个解析结果为未通过,则确定文件解析失败。若全部解析结果均为通过时,则确定文件解析成功。
在文件解析失败时,定位解析失败的文件片段在文件中的位置,具体可以通过根据发送解析失败的解析结果的任务解析服务器,查询其在调度时所调度到对应哪一个文件片段的解析任务,从而确定文件中的该文件片段解析失败。
步骤512、分发调度层向前置分块层返回汇总结果。
在上一步骤中,由于分发调度层针对每一个文件片段进行存储,从而可以获知该文件片段的存储位置和内容,从而在汇总结果为解析失败时,可以在汇总结果中携带导致解析失败的文件片段的内容,或者,例如在文件中的相对位置等标识。
从而使得前置分块层能够根据汇总结果,确定对该文件继续后续处理。例如:当汇总结果指示文件解析成功时,通知对该文件进行业务处理的业务处理***执行数据处理流程;当汇总结果指示文件解析失败时,请求人工处理。
本实施例中,通过将文件划分为至少两个文件片段,从而并行对所划分得到的至少两个文件片段进行解析。从而通过这种并行解析的方式,提高了文件的解析速度,解决了文件解析速度较慢的技术问题,尤其是在文件的数据量较大的情况下,能够确保在预设时间点之前完成文件的解析。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。