CN105931091B - 一种文件生成方法及装置 - Google Patents
一种文件生成方法及装置 Download PDFInfo
- Publication number
- CN105931091B CN105931091B CN201510670633.8A CN201510670633A CN105931091B CN 105931091 B CN105931091 B CN 105931091B CN 201510670633 A CN201510670633 A CN 201510670633A CN 105931091 B CN105931091 B CN 105931091B
- Authority
- CN
- China
- Prior art keywords
- information
- data set
- data sets
- record information
- transaction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据处理技术领域,尤其涉及一种文件生成方法及装置,用以解决现有技术存在的在海量交易信息的情况下,文件生成性能不高,因而亟需一种可以提升海量交易信息的文件生成性能的方法的技术问题。本发明实施例中,将第一数据集中的记录信息划分到多个第二数据集中,且每个第二数据集中包括一条交易信息的所有内容,然后对每个第二数据集,将其中标识相同的记录信息按设定规则组成一条交易信息,并生成该第二数据集的交易记录,因而无需将所有第一数据集中的内容进行组合,而只需分别对每个第二数据集进行交易信息的组装,从而减少了数据量,提高了海量信息组装成交易信息的性能,提升了文件生成的效率。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种文件生成方法及装置。
背景技术
为方便管理,在交易信息量比较大时,通常的做法是根据交易信息各字段,将交易信息分散到多个级联表中,例如每条交易信息的各字段分别为名称、时间、金额,则可用三张级联表分别存储每条交易相应字段的信息,比如第一张表存储每条交易信息的名称、第二张表存储每条交易信息的时间、第三张表存储每条交易信息的金额。这样,一条交易记录分为三条记录信息分别存储于三张表中,同时为同属于同一条交易信息的记录信息分配相同的主键标识,以便于将记录信息组装为交易信息。
基于上述交易信息的存储方法,当需要将多张级联表的记录信息组装成完整的交易信息时,现有技术主要通过基于数据库排序的方法来实现:以海量交易信息分别存储于两张级联表中为例进行说明,两张级联表分别为A表和B表,其中A表存放交易信息的基本信息,B表存放交易信息的附加信息,A表与B表中记录是一对多的关系,即一条交易信息包含一条基本信息,存放于A表中,以及包含多条附加信息,存放于B表中,并且同属于同一条交易信息的基本信息和多条附加信息具有相同的主键标识,则现有技术基于这两张表进行交易信息的组装方法如下:首先,对A表和B表均按照主键标识进行升序排序,然后按照主键标识读取A表中的一条基本信息,以及读取B表中的具有相同主键标识的所有附加信息,然后将读取的基本信息和多条附加信息组装成一条交易信息,接下来再读取A表的下一条基本信息,以及读取B表中与该条基本信息具有相同主键标识的所有附加信息,组装成第二条交易信息,直到读完A表和B表,将所有的基本信息和附加信息组装成相应的交易信息为止。
上述方法,首先基于数据库对所有的级联表进行排序,然后再基于排序后的级联表将其中的记录信息组装成交易信息,在目前交易信息数据量巨大的情况下,对海量的交易信息进行排序对数据库性能要求较高,因而数据库性能成为海量交易信息的文件生成的性能瓶颈;同时,对于交易信息的内容要求越来越详细,导致级联表数量的增加,进一步恶化了交易信息的文件生成的效率。
综上所述,现有技术存在在海量交易信息的情况下,文件生成性能不高,因而亟需一种可以提升海量交易信息的文件生成性能的方法的技术问题。
发明内容
本发明提供一种文件生成方法,用以解决现有技术存在的在海量交易信息的情况下,文件生成性能不高,因而亟需一种可以提升海量交易信息的文件生成性能的方法的技术问题。
一方面,本发明实施例提供的一种文件生成方法,包括:
根据记录信息的标识,将N个第一数据集中的记录信息划分到M个第二数据集中,所述N个第一数据集中具有相同标识的记录信息构成一条交易信息,任意两个第一数据集的记录信息所对应的交易信息的字段不完全相同,每个第二数据集的记录信息中包括一条交易信息的各字段;其中,N大于1,M大于1;
针对每个第二数据集,将该第二数据集中标识相同的记录信息按设定规则组成一条交易信息,生成该第二数据集的交易记录;
根据M个第二数据集的交易记录,得到所述N个第一数据集对应的交易记录。
可选的,所述根据记录信息的标识,将N个第一数据集中的记录信息划分到M个第二数据集中,包括:
所述第二数据集中包括N个子文件,所述N个子文件与所述N个第一数据集一一对应;
对于所述N个第一数据集中的每个记录信息,执行以下操作:
根据预先设定的记录信息的标识与第二数据集的标识的对应关系,确定该记录信息对应的第二数据集;
根据该记录信息所在的第一数据集以及该记录信息对应的第二数据集,确定该记录信息对应的第二数据集中的相应子文件;
将该记录信息写入该记录信息对应的第二数据集中的相应子文件。
可选的,所述将该第二数据集中标识相同的记录信息按设定规则组成一条交易信息,包括:
读取该第二数据集中的N个子文件;
将读取的每个子文件中标识相同的记录信息按设定的存储结构写入内存中,每个存储结构对应的记录信息构成一条交易信息。
可选的,根据以下方式确定第二数据集的个数M:
根据当前处理***的***环境和所述一条交易信息的数据量,获取第二数据集的个数与交易信息总量的对应关系;
根据所述N个第一数据集中的交易信息总量,确定所述N个第一数据集对应的第二数据集的个数M。
可选的,根据所述当前处理***的***环境和所述一条交易信息的数据量,确定进程的个数为P,P为正整数;
根据所述第二数据集的个数M及所述进程的个数P,确定每个进程需要处理的第二数据集,包括:
若M小于等于P,则将所述M个第二数据集随机分配给所述P个进程中的M个;
若M大于等于P,则将所述M个第二数据集依次分配给所述P个进程。
本发明实施例中,将第一数据集中的记录信息划分到多个第二数据集中,且每个第二数据集中包括一条交易信息的所有内容,然后对每个第二数据集,将其中标识相同的记录信息按设定规则组成一条交易信息,并生成该第二数据集的交易记录,因而无需将所有第一数据集中的内容进行组合,而只需分别对每个第二数据集进行交易信息的组装,从而减少了数据量,提高了海量信息组装成交易信息的性能,提升了文件生成的效率。
另一方面,本发明实施例提供的一种文件生成装置,包括:
划分单元,用于根据记录信息的标识,将N个第一数据集中的记录信息划分到M个第二数据集中,所述N个第一数据集中具有相同标识的记录信息构成一条交易信息,任意两个第一数据集的记录信息所对应的交易信息的字段不完全相同,每个第二数据集的记录信息中包括一条交易信息的各字段;其中,N为大于1的整数,M为大于1的整数;
第一生成单元,用于针对每个第二数据集,将该第二数据集中标识相同的记录信息按设定规则组成一条交易信息,生成该第二数据集的交易记录;
第二生成单元,用于根据M个第二数据集的交易记录,得到所述N个第一数据集对应的交易记录。
可选的,所述第二数据集中包括N个子文件,所述N个子文件与所述N个第一数据集一一对应;所述划分单元,具体用于:
对于所述N个第一数据集中的每个记录信息,执行以下操作:
根据预先设定的记录信息的标识与第二数据集的标识的对应关系,确定该记录信息对应的第二数据集;
根据该记录信息所在的第一数据集以及该记录信息对应的第二数据集,确定该记录信息对应的第二数据集中的相应子文件;
将该记录信息写入该记录信息对应的第二数据集中的相应子文件。
可选的,所述将第一生成单元,具体用于:
读取该第二数据集中的N个子文件;
将读取的每个子文件中标识相同的记录信息按设定的存储结构写入内存中,每个存储结构对应的记录信息构成一条交易信息。
可选的,所述划分单元,还用于:
根据当前处理***的***环境和所述一条交易信息的数据量,获取第二数据集的个数与交易信息总量的对应关系;
根据所述N个第一数据集中的交易信息总量,确定所述N个第一数据集对应的第二数据集的个数M。
可选的,所述划分单元,还用于:
根据所述当前处理***的***环境和所述一条交易信息的数据量,确定进程的个数为P,P为正整数;
若M小于等于P,则将所述M个第二数据集随机分配给所述P个进程中的M个;
若M大于等于P,则将所述M个第二数据集依次分配给所述P个进程。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的文件生成方法流程图;
图2为CPU数量为4个、内存20G、内存使用率为60%、单笔交易为4K条件下,交易信息数量与第二数据集取值之间的曲线拟合函数示意图;
图3为CPU数量为4个、内存20G、内存使用率为60%、单笔交易为4K条件下,交易信息数量与并发进程取值之间的曲线拟合函数示意图;
图4为本发明实施例提供的文件生成方法详细流程图;
图5为本发明实施例中将第一数据集的记录信息分配到第二数据集的方法流程图;
图6为本发明实施例提供的文件生成装置示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
下面结合说明书附图对本发明实施例作进一步详细描述。
如图1所示,为本发明实施例文件生成方法,包括:
步骤101、根据记录信息的标识,将N个第一数据集中的记录信息划分到M个第二数据集中,所述N个第一数据集中具有相同标识的记录信息构成一条交易信息,任意两个第一数据集的记录信息所对应的交易信息的字段不完全相同,每个第二数据集的记录信息中包括一条交易信息的各字段;其中,N大于1,M大于1;
步骤102、针对每个第二数据集,将该第二数据集中标识相同的记录信息按设定规则组成一条交易信息,生成该第二数据集的交易记录;
步骤103、根据M个第二数据集的交易记录,得到所述N个第一数据集对应的交易记录。
在上述实施例中,第一数据集与第二数据集存储的记录信息所对应的交易信息的字段不同。其中,每个第一数据集中存储的记录信息为交易信息的不同字段,如交易信息中有4个字段,分别为***信息、持卡人信息、交易时间和交易金额,则4个第一数据集分别存储一个字段信息;当然也可以将***信息和持卡人信息两个字段对应的信息作为一条记录信息存储第一个第一数据集中,交易时间这一个字段对应的信息作为一条记录信息存储第二个第一数据集中,交易金额这一个字段对应的信息作为一条记录信息存储第三个第一数据集中;也可以将***信息和持卡人信息两个字段对应的信息作为一条记录信息存储第一个第一数据集中,将持卡人信息和交易时间两个字段对应的信息作为一条记录信息存储第二个第一数据集中,将交易时间和交易金额两个字段对应的信息作为一条记录信息存储第三个第一数据集中,等等。本发明实施例对交易信息字段的划分不做具体限定,但要求N个第一数据集中具有相同标识的记录信息构成一条交易信息。每个第二数据集中存储的记录信息包括一条交易信息的各字段的内容。因而在步骤101中,可依次读取每个第一数据集中的每一条记录信息,根据记录信息的标识,将每一条记录信息划分到相应的第二数据集中,也可以是由多个进程并发地来读取多个第一数据集中的记录信息,从而可以更快的将所有第一数据集中的记录信息划分到相应的第二数据集中,例如,有K个进程并发执行,则可以将第一数据集的记录信息划分到第二数据集的速度提高K倍。由于同一条交易的各字段的记录信息具有相同的标识,因而每个第二数据集中包括交易信息的各字段的记录信息,即一条交易的所有字段的记录信息被划分到同一个第二数据集。
上述步骤102中,在将N个第一数据集中的每条记录信息分别存储于对应的第二数据集之后,接下来针对每个第二数据集,将该第二数据集中标识相同的记录信息按设定规则组成一条交易信息,生成该第二数据集的交易记录。例如,该设定的规则可以是对第二数据集中的所有记录信息按照主键标识进行排序,然后依次该第二数据集中的每条记录信息,然后将主键标识相同的记录信息组装成一条交易信息;该设定的规则还可以是不对第二数据集中的记录信息进行排序,而是依次读取每条记录信息,然后将记录信息写入预先设定的数组结构中,这样,读取完一个第二数据集之后,该第二数据集中的每条记录信息都写入了相应的数组中,则一个数组就表示了一个交易信息。
上述步骤103中,可以是将每个第二数据集中的所有交易信息生成一个交易记录的文件,然后根据M个第二数据集的交易记录,再生成一个最终的交易记录,该最终生成的交易记录文件中包含了所有交易信息。当然,也可以将M个第二数据集的交易记录输出作为N个第一数据集的交易记录文件,无需再汇总为一个交易记录文件。
本发明实施例中,将第一数据集中的记录信息划分到多个第二数据集中,且每个第二数据集中包括一条交易信息的所有内容,然后对每个第二数据集,将其中标识相同的记录信息按设定规则组成一条交易信息,并生成该第二数据集的交易记录,因而无需将所有第一数据集中的内容进行组合,而只需分别对每个第二数据集进行交易信息的组装,从而减少了数据量,提高了海量信息组装成交易信息的性能,提升了文件生成的效率。
具体的,在步骤101中,根据记录信息的标识,将N个第一数据集中的记录信息划分到M个第二数据集的方法,可以是每个第二数据集包含有一个文件,该文件用于存储记录信息,在确定了N个第一数据集中每条记录信息所对应第二数据集之后,可将该记录信息写入对应的第二数据集中的文件中,则对应于某个第二数据集的所有记录信息均被写入该第二数据集中的文件。
可选的,考虑到交易信息各字段的数据属性不同,可在第二数据集中设置N个子文件,N个子文件与N个第一数据集一一对应;
对于N个第一数据集中的每个记录信息,执行以下操作:
根据预先设定的记录信息的标识与第二数据集的标识的对应关系,确定该记录信息对应的第二数据集;
根据该记录信息所在的第一数据集以及确定的该记录信息对应的第二数据集,确定所述第二数据集中的相应子文件;
将该记录信息写入所述第二数据集中的相应子文件。
上述方法中,每个第二数据集包含N个子文件,N个子文件与所述N个第一数据集一一对应,由于N个第一数据集中的记录信息具有不同的存储结构,因此分别存储于第二数据集中的相应的子文件中,可方便记录信息的管理、维护和使用。
具体地,在步骤102中,针对每个第二数据集中有N个子文件,分别用于存储来自N个第一数据集的记录信息的情形,也可通过以下方式将第二数据集中的标识相同的记录信息按设定规则组成一条交易信息:
对于每个第二数据集,读取该第二数据集中的N个子文件;将读取的每个子文件中标识相同的记录信息按设定的存储结构写入内存中,每个存储结构对应的记录信息构成一条交易信息。
上述方法,可以是先根据交易信息的数量和第一数据集的数量,在内存中分配好相应数量和维度的数组,数组的数量对应第一数据集中交易信息的总量,数组的维度对应第一数据集的数量或交易信息的字段的数量,并且所有的数组的值初始化为空值,然后依次或者多进程并发地读取第二数据集中的N个子文件,根据记录信息的标识将标识相同的记录信息分配到一个数组中,将一条交易信息的各记录信息分配到相应数组的分量中,因此最终每个数组就表示一条交易信息,并且每个数组中记录有一条交易信息的所有记录信息。该方法,简单易实施,并且由于一条交易信息的所有记录信息均位于同一第二数据集中,因此可很快将一条交易信息组装完成,在组装完成输出到相应文件后,即可回收该部分内存,因此不会过多占用内存,提高了处理能力和处理速度,另外该方法也无需对第一数据集或者第二数据集进行排序,而是可以直接按照记录信息的存储顺序从前往后依次读取每条记录信息并做相应处理,因此该方法不依赖于数据库的性能,从而减少了限制,提高了应用能力。
具体的,对于步骤103,还可以根据具体应用时的需要,根据其他方法生成最终的交易记录文件。例如,在针对每个第二数据集组装交易信息时,每完成一条交易信息的组装,则将组装好的交易信息根据该交易信息的类型写入到相应的文件中,比如交易信息的类型分别有工行文件,农行文件,招行文件,中行文件和其它文件,若该交易信息的类型为工行文件,则将该交易信息写入到工行文件中,若该交易信息的类型为农行文件,则将该交易信息写入到农行文件中等等。因此每当完成一条交易信息的组装时,即可将该交易信息写入到相应的交易记录文件中,当所有的交易信息都完成组装时,即可完成所有交易信息写入到相应的交易记录文件中。
具体地,在步骤101之前,首先需要确定第二数据集的数量M。确定M取值的方法有很多,例如一种方式可以是:预先设定每个第二数据集可处理X个交易信息,则可根据N个第一数据集中的交易信息的总数量Y确定出M的取值,即M为Y除以X的取值,比如预先设定每个第二数据集可处理100个交易信息,交易信息的总数量为100000,则需要的第二数据集的数量M为100000除以100,即M为1000;也还可以是其它方式确定M的取值,例如交易信息总量在每个区间范围对应一个M的取值,比如交易信息总量在0~10000时,M取值100,交易信息总量在10001~20000时,M取值200,以此类推。
可选的,还可以根据以下方式确定第二数据集的个数M:
根据当前处理***的***环境和所述一条交易信息的数据量,获取第二数据集的个数与交易信息总量的对应关系;
根据所述N个第一数据集中的交易信息总量,确定所述N个第一数据集对应的第二数据集的个数M。
上述方法中,在确定第二数据集的个数M之前,可通过曲线拟合的方法,先建立***环境、单笔交易信息的大小与交易信息数量、第二数据集的数量之间的关系库。其中,***环境是指CPU(Central Processing Unit,中央处理器)数量、内存大小、内存使用率,然后可设定每个第二数据集的处理上限,例如为200M,则可拟合在不同的***环境及单笔交易信息大小的前提下,交易信息的数量与第二数据集取值之间的函数关系。如图2,为CPU数量为4个、内存20G、内存使用率为60%、单笔交易为4K条件下,交易信息数量与第二数据集M取值之间的曲线拟合函数示意图。因此在建立了***环境、单笔交易信息的大小与交易信息数量、第二数据集的数量之间的关系库之后,只要通过当前处理***的***环境和一条交易信息的大小,即可获取唯一的一个第二数据集的个数与第一数据集中的交易信息量的对应关系,例如,图2为在CPU数量为4个、内存20G、内存使用率为60%、单笔交易为4K的条件下,交易信息数量与第二数据集M取值之间的曲线拟合函数示意图,如果当前***环境为其条件,比如CPU数量为2个、内存5G、内存使用率为80%、单笔交易为4K,则可以从预先建立的***环境、单笔交易信息的大小与交易信息数量、第二数据集的数量M之间的关系库中找到一个与该***环境相对应的一个交易信息数量与第二数据集M取值之间的曲线拟合函数。根据当前处理***的***环境找到对应关系后,如图2所示,再根据当前交易信息的数量,即可确定第二数据集的个数M。该方法可基于实践中累积的经验,确定有效的关系库,后续使用时根据当前处理的实际情况,查询相应的关系库,从而确定第二数据集的个数M,该方法简单易实施,具有很好的实用性。
另外,对于M个第二数据集,可以是依次处理每一个第二数据集,也还可以通过并发处理的方式,即使用多进程并发的方式来处理M个第二数据集。
可选的,根据所述***环境和一条交易信息的大小,确定进程的个数为P,P为正整数;
根据所述第二数据集的个数M及所述进程的个数P,确定每个进程需要处理的第二数据集,包括:
若M小于等于P,则将所述M个第二数据集随机分配给所述P个进程中的M个;
若M大于等于P,则将所述M个第二数据集依次分配给所述P个进程。上述方法,首先确定并发进程的个数。其方法类似于确定第二数据集的数量M的方法,在确定并发进程的个数之前,可通过曲线拟合的方法,先建立***环境、单笔交易信息的大小与交易信息数量、并发进程数量之间的关系库。其中,***环境是指CPU数量、内存大小、内存使用率;然后可设定每个第二数据集的处理上限,例如为200M,并发进程数量的上限,例如为35个,然后即可拟合在不同的***环境及单笔交易信息大小的前提下,交易信息的数量与进程数量的取值之间的函数关系。如图3,为CPU数量为4个、内存20G、内存使用率为60%、单笔交易为4K条件下,交易信息数量与进程数量的取值之间的曲线拟合函数示意图。因此在建立了***环境、单笔交易信息的大小与交易信息数量、进程数量的取值之间的关系库之后,只要通过当前处理***的***环境和一条交易信息的大小,即可获取出唯一的第二数据集的个数与进程数量的对应关系,如图3所示,然后再根据当前交易信息的数量,即可确定进程数量P。
若第二数据集的个数M小于等于进程的个数P,则将M个第二数据集随机分配给P个进程中的M个进行并发处理;若第二数据集的个数M大于等于进程的个数P,则将所述M个第二数据集依次分配给所述P个进程处理,即进程1处理的第二数据集依次为第1个、第P+1个、第2P+1个,以此类推;进程2处理第二数据集依次为第2个、第P+2个、第2P+2个,以此类推;进程P处理的第二数据集依次为第P个、第2P个、第3P个,以此类推。例如,一共有3个进程,有9个第二数据集,则进程1处理1、4、7第二数据集,进程2处理2、5、8第二数据集,进程3处理3、6、9第二数据集。该方法由于使用多个进程并发处理M个第二数据集,因而可最大程度的提高处理速度,可使海量数据更快的组装成交易信息,节约了***资源,提高了***效率。
下面对本发明实施例文件生成方法做详细描述,参见图4,为本发明实施例提供的文件生成方法详细流程图。
步骤401、根据当前处理***的***环境、交易信息的数量、每笔交易信息的大小,确定第二数据集的数量M和并发进程的数量P;
步骤402、根据记录信息的标识,将N个第一数据集中的记录信息划分到M个第二数据集的相应子文件中;
步骤403、将M个第二数据集分配给P个进程并发处理,针对每个第二数据集,依次读取每个子文件,根据记录信息的标识,将子文件中的每条记录信息读取到内存中相应的数据结构中;
步骤404、在每条交易信息组装完成后,根据该组装完成的记录信息的属性信息,将该组装完成的记录信息写入相应的文件中。
在步骤401中,通过当前处理***的***环境、交易信息的数量、每笔交易信息的大小,到预先建立的***环境、单笔交易信息的大小与交易信息数量、第二数据集的数量之间的关系库中,查找到与当前处理***的***环境对应的一个交易信息数量与第二数据集取值之间的曲线拟合函数,然后根据当前交易信息的数量,即可确定第二数据集的个数M;同样的,通过当前处理***的***环境、交易信息的数量、每笔交易信息的大小,到预先建立的***环境、单笔交易信息的大小与交易信息数量、并发进程数量之间的关系库中查找到与当前处理***的***环境对应的一个交易信息数量与进程数量之间的曲线拟合函数,然后根据当前交易信息的数量,即可确定进程数量的个数P。
在步骤402中,针对N个第一数据集中的每条记录信息,首先确定记录信息对应的第二数据集,然后再确定对应的第二数据集中的子文件。下面举例说明,假设第一数据集数量N为2,分别为A表,A’表,分别存储交易信息的基本信息和附加信息,参考图5,为将第一数据集的记录信息分配到第二数据集的方法流程图。其中,block_i表示第i个第二数据集,block_i_A表示第i个第二数据集中存储来自A表的记录信息的文件,block_i_A’表示第i个第二数据集中存储来自A’表的记录信息的文件;block_j表示第j个第二数据集,block_j_A表示第j个第二数据集中存储来自A表的记录信息的文件,block_j_A’表示第j个第二数据集中存储来自A’表的记录信息的文件,参考图5,首先读取A表,将表中的每条记录信息,根据该条记录信息的主键标识和第二数据集的个数M,通过哈希(HASH)函数,确定相应的第二数据集,然后根据确定出的第二数据集以及A表,可确定该记录信息要写入的文件,由于该记录信息来自于A表,因此该记录信息写入确定的第二数据集中与A表对应的文件。例如,读取A表中的一条记录信息,其主键标识为111,且第二数据集的数量M为100,通过哈希函数,HASH(111,100),若确定该记录信息对应的第二数据集为48,则将该记录信息写入到第48个第二数据集中与A表对应的文件中,即写入文件block_48_A中。依照同样的方法,将A表中所有的记录信息均写入与每条记录信息对应的第二数据集中的相应文件,读完A表之后,依照同样的方法,再读取A’表中的每条记录,将A’表中所有的记录信息均写入与每条记录信息对应的第二数据集中的相应文件,由于A表和A’表中使用同一个哈希函数,因此具有相同主键标识的记录信息会被分配到同一个第二数据集中。例如,读取A’表中的一条记录信息,其主键标识为111,通过哈希函数,HASH(111,100),确定该记录信息对应的第二数据集为48,则将该记录信息写入到第48个第二数据集中与A’表对应的文件中,即写入文件block_48_A’中。当然,在该方法中,是依次读取A表和A’表的,当然也可以使用两个进程并发地读取A表和A’表,因而可以提高海量数据生成文件的速度,提升***处理效率。
在步骤403中,可以使用P个进程并发地处理M个第二数据集,其中,每个第二数据集包含N个子文件,分别与N个第一数据集对应,N个子文件分别存储来自N个第一数据集的记录信息,依次读取每个子文件中的记录信息,然后写入预先分配的数据结构,并读入内存中,然后在内存中进行组装。例如,第一数据集中的交易信息总量为100000,每条交易信息的字段相同,且包含100个字段,则可以预先分配100000个数组,每个数组可以存放100个记录信息。因此,在读取第二数据集中的一条记录信息时,可根据主键标识,将该条记录信息写入相应的数组的相应位置,并且具有相同主键标识的记录信息写入同一个数组中,因此,当读完一个第二数据集之后,具有相同的主键标识的记录信息被写入了同一个数组中,并且由于一条交易信息的所有记录信息存在于同一个第二数据集中,因此,一个数组中包含的就是一条完整的交易信息,该数组存在与内存中,因此,在将一个第二数据集全部读入内存的相应数组结构中之后,就可以使用内存进行交易信息的组装。
在步骤404中,可以将一个第二数据集的所有记录信息组装成交易信息后,生成一个与该第二数据集对应的交易记录文件,然后将M个第二数据集对应的M个文件生成一个总的交易记录文件,当然还可以是根据需要以其他方式生成文件,例如,针对每个第二数据集组装的一条交易信息,可以根据该交易信息的类型,将该交易信息写入相应的文件中,例如交易信息的类型有工行文件,农行文件,中行文件,招行文件以及其它文件,若该交易信息的类型为工行文件,则将该交易信息写入到工行文件中,若该交易信息的类型为农行文件,则将该交易信息写入到农行文件中等等。因此每当完成一条交易信息的组装时,即可将该交易信息写入到相应的交易记录文件中,当所有的交易信息都完成组装时,即可完成所有交易信息写入到相应的交易记录文件中。
基于相同的技术构思,本发明实施例还提供一种文件生成设备,该文件生成设备可执行上述方法实施例。本发明实施例提供的文件生成设备如图6所示。
划分单元601,用于根据记录信息的标识,将N个第一数据集中的记录信息划分到M个第二数据集中,所述N个第一数据集中具有相同标识的记录信息构成一条交易信息,任意两个第一数据集的记录信息所对应的交易信息的字段不完全相同,每个第二数据集的记录信息中包括一条交易信息的各字段;其中,N为大于1的整数,M为大于1的整数;
第一生成单元602,用于针对每个第二数据集,将该第二数据集中标识相同的记录信息按设定规则组成一条交易信息,生成该第二数据集的交易记录;
第二生成单元603,用于根据M个第二数据集的交易记录,得到所述N个第一数据集对应的交易记录。
可选的,所述第二数据集中包括N个子文件,所述N个子文件与所述N个第一数据集一一对应;所述划分单元601,具体用于:
对于所述N个第一数据集中的每个记录信息,执行以下操作:
根据预先设定的记录信息的标识与第二数据集的标识的对应关系,确定该记录信息对应的第二数据集;
根据该记录信息所在的第一数据集以及该记录信息对应的第二数据集,确定该记录信息对应的第二数据集中的相应子文件;
将该记录信息写入该记录信息对应的第二数据集中的相应子文件。
可选的,所述将第一生成单元602,具体用于:
读取该第二数据集中的N个子文件;
将读取的每个子文件中标识相同的记录信息按设定的存储结构写入内存中,每个存储结构对应的记录信息构成一条交易信息。
可选的,所述划分单元601,还用于:
根据当前处理***的***环境和所述一条交易信息的数据量,获取第二数据集的个数与交易信息总量的对应关系;
根据所述N个第一数据集中的交易信息总量,确定所述N个第一数据集对应的第二数据集的个数M。
可选的,所述划分单元601,还用于:
根据所述当前处理***的***环境和所述一条交易信息的数据量,确定进程的个数为P,P为正整数;
若M小于等于P,则将所述M个第二数据集随机分配给所述P个进程中的M个;
若M大于等于P,则将所述M个第二数据集依次分配给所述P个进程。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (8)
1.一种文件生成方法,其特征在于,包括:
根据记录信息的标识,将N个第一数据集中的记录信息划分到M个第二数据集中,所述N个第一数据集中具有相同标识的记录信息构成一条交易信息,任意两个第一数据集的记录信息所对应的交易信息的字段不完全相同,每个第二数据集的记录信息中包括一条交易信息的各字段;所述第一数据集与所述第二数据集存储的记录信息所对应的交易信息的字段不同;其中,N为大于1的整数,M为大于1的整数;
所述每个第二数据集包括N个子文件,所述N个子文件与所述N个第一数据集一一对应;针对所述每个第二数据集,读取其中的所述N个子文件;将读取的每个子文件中标识相同的记录信息按设定的存储结构写入内存中,每个存储结构对应的记录信息构成一条交易信息,生成该第二数据集的交易记录;
根据M个第二数据集的交易记录,得到所述N个第一数据集对应的交易记录。
2.如权利要求1所述的方法,其特征在于,所述根据记录信息的标识,将N个第一数据集中的记录信息划分到M个第二数据集中,包括:
对于所述N个第一数据集中的每个记录信息,执行以下操作:
根据预先设定的记录信息的标识与第二数据集的标识的对应关系,确定该记录信息对应的第二数据集;
根据该记录信息所在的第一数据集以及该记录信息对应的第二数据集,确定该记录信息对应的第二数据集中的相应子文件;
将该记录信息写入该记录信息对应的第二数据集中的相应子文件。
3.如权利要求1或2所述的方法,其特征在于,根据以下方式确定第二数据集的个数M:
根据当前处理***的***环境和所述一条交易信息的数据量,获取第二数据集的个数与交易信息总量的对应关系;
根据所述N个第一数据集中的交易信息总量,确定所述N个第一数据集对应的第二数据集的个数M。
4.如权利要求3所述的方法,其特征在于,根据所述当前处理***的***环境和所述一条交易信息的数据量,确定进程的个数为P,P为正整数;
根据所述第二数据集的个数M及所述进程的个数P,确定每个进程需要处理的第二数据集,包括:
若M小于等于P,则将所述M个第二数据集随机分配给所述P个进程中的M个;
若M大于等于P,则将所述M个第二数据集依次分配给所述P个进程。
5.一种文件生成装置,其特征在于,包括:
划分单元,用于根据记录信息的标识,将N个第一数据集中的记录信息划分到M个第二数据集中,所述N个第一数据集中具有相同标识的记录信息构成一条交易信息,任意两个第一数据集的记录信息所对应的交易信息的字段不完全相同,每个第二数据集的记录信息中包括一条交易信息的各字段;所述第一数据集与所述第二数据集存储的记录信息所对应的交易信息的字段不同;其中,N为大于1的整数,M为大于1的整数;所述每个第二数据集包括N个子文件,所述N个子文件与所述N个第一数据集一一对应;
第一生成单元,用于针对所述每个第二数据集,读取其中的所述N个子文件;将读取的每个子文件中标识相同的记录信息按设定的存储结构写入内存中,每个存储结构对应的记录信息构成一条交易信息,生成该第二数据集的交易记录;
第二生成单元,用于根据M个第二数据集的交易记录,得到所述N个第一数据集对应的交易记录。
6.如权利要求5所述的装置,其特征在于,所述划分单元,具体用于:
对于所述N个第一数据集中的每个记录信息,执行以下操作:
根据预先设定的记录信息的标识与第二数据集的标识的对应关系,确定该记录信息对应的第二数据集;
根据该记录信息所在的第一数据集以及该记录信息对应的第二数据集,确定该记录信息对应的第二数据集中的相应子文件;
将该记录信息写入该记录信息对应的第二数据集中的相应子文件。
7.如权利要求5或6所述的装置,其特征在于,所述划分单元,还用于:
根据当前处理***的***环境和所述一条交易信息的数据量,获取第二数据集的个数与交易信息总量的对应关系;
根据所述N个第一数据集中的交易信息总量,确定所述N个第一数据集对应的第二数据集的个数M。
8.如权利要求7所述的装置,其特征在于,所述划分单元,还用于:
根据所述当前处理***的***环境和所述一条交易信息的数据量,确定进程的个数为P,P为正整数;
若M小于等于P,则将所述M个第二数据集随机分配给所述P个进程中的M个;
若M大于等于P,则将所述M个第二数据集依次分配给所述P个进程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510670633.8A CN105931091B (zh) | 2015-10-13 | 2015-10-13 | 一种文件生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510670633.8A CN105931091B (zh) | 2015-10-13 | 2015-10-13 | 一种文件生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105931091A CN105931091A (zh) | 2016-09-07 |
CN105931091B true CN105931091B (zh) | 2020-02-11 |
Family
ID=56839896
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510670633.8A Active CN105931091B (zh) | 2015-10-13 | 2015-10-13 | 一种文件生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105931091B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101425167A (zh) * | 2007-10-30 | 2009-05-06 | ***股份有限公司 | 生成交易信息的方法及解析交易信息的方法 |
CN102262626A (zh) * | 2010-05-24 | 2011-11-30 | 阿里巴巴集团控股有限公司 | 一种数据库存储数据的方法及装置 |
CN103544593A (zh) * | 2012-07-09 | 2014-01-29 | ***股份有限公司 | 处理与终端交易相关的记录的方法及*** |
CN104765754A (zh) * | 2014-01-08 | 2015-07-08 | 北大方正集团有限公司 | 数据存储方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4809989B2 (ja) * | 2001-03-29 | 2011-11-09 | 株式会社日本総合研究所 | データ格納方法、データ格納システム及びデータ格納プログラム |
JP2012022386A (ja) * | 2010-07-12 | 2012-02-02 | Hitachi Information Systems Ltd | データ連携システム及びデータ取り込み方法 |
-
2015
- 2015-10-13 CN CN201510670633.8A patent/CN105931091B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101425167A (zh) * | 2007-10-30 | 2009-05-06 | ***股份有限公司 | 生成交易信息的方法及解析交易信息的方法 |
CN102262626A (zh) * | 2010-05-24 | 2011-11-30 | 阿里巴巴集团控股有限公司 | 一种数据库存储数据的方法及装置 |
CN103544593A (zh) * | 2012-07-09 | 2014-01-29 | ***股份有限公司 | 处理与终端交易相关的记录的方法及*** |
CN104765754A (zh) * | 2014-01-08 | 2015-07-08 | 北大方正集团有限公司 | 数据存储方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105931091A (zh) | 2016-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10558672B1 (en) | System and method for executing queries on multi-graphics processing unit systems | |
CN106980649B (zh) | 写入区块链业务数据的方法和装置及业务子集合确定方法 | |
CN102725753B (zh) | 优化数据访问的方法及装置、优化数据存储的方法及装置 | |
CN105630955B (zh) | 一种高效动态的数据集合成员管理方法 | |
CN102968498A (zh) | 数据处理方法及装置 | |
CN106528787B (zh) | 一种基于海量数据多维分析的查询方法及装置 | |
CN106227894B (zh) | 一种数据分页查询方法和装置 | |
CN106407207B (zh) | 一种实时新增数据更新方法和装置 | |
CN110737664A (zh) | 一种区块链节点同步的方法及装置 | |
CN111813805A (zh) | 一种数据处理方法及装置 | |
CN104112008A (zh) | 一种多表数据关联查询优化方法和装置 | |
CN103246549B (zh) | 一种数据转存的方法及*** | |
CN103440246A (zh) | 用于MapReduce的中间结果数据排序方法及*** | |
US20140059000A1 (en) | Computer system and parallel distributed processing method | |
WO2021057482A1 (zh) | 一种区块链中布隆过滤器的生成方法及装置 | |
CN104111936A (zh) | 数据查询方法和*** | |
CN106897409A (zh) | 数据分库存储方法及装置 | |
CN107070645A (zh) | 比较数据表的数据的方法和*** | |
CN103500185A (zh) | 一种基于多平台数据生成数据表的方法和*** | |
CN105468699A (zh) | 去重数据统计方法及设备 | |
CN109285015B (zh) | 一种虚拟资源的分配方法及*** | |
WO2021004266A1 (zh) | 数据***方法、装置、设备和储存介质 | |
CN104714983B (zh) | 分布式索引的生成方法及装置 | |
US8918410B2 (en) | System and method for fast identification of variable roles during initial data exploration | |
CN105931091B (zh) | 一种文件生成方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |