一种文件更新方法、装置、电子设备和介质与流程

文档序号:19284401发布日期:2019-11-29 23:21阅读:137来源:国知局
一种文件更新方法、装置、电子设备和介质与流程

本申请实施例涉及计算机技术领域,尤其涉及数据库技术领域,具体涉及一种文件更新方法、装置、电子设备和介质。



背景技术:

在日常数据处理中,经常需要根据其他方提供的数据,通过更新数据库中的文件来实现全量更新数据库。目前,可以通过每次都清除数据库中的旧数据,并将新数据全量写入数据库的方式,来实现全量更新数据库;或者,在每次更新时,给所有数据加上一个状态,表示待更新;之后,逐条更新数据(存在更新,不存在则插入),并将更新完的数据状态更改为已更新,当数据更新完毕,删除所有状态为待更新的数据,来实现全量更新数据库。

然而,对于远超过内存的大文件而言,数量非常庞大,但是改动可能并不是很大,如果采用上述全量更新数据库的方式,会造成资源极大浪费,且大量无效的操作,也增加了数据库出错的风险。进而,为了有效实现数据库按需求更新,目前可以通过直接比较新旧文件获取变化数据的方式,来更新数据库,但是由于大文件不可能写入内存,进而这种方式不适用于远超过内存的大文件的更新。因此,需要使用一种可以方便找出两个大文件不同的方式,来更新数据库中的文件以实现数据库的更新。



技术实现要素:

本申请实施例公开一种文件更新方法、装置、电子设备和介质,能够快速找出两个大文件中的变化数据,进而根据变化数据更新数据库中的大文件以实现数据库的更新,减少了数据库更新数据量,提高了数据库的更新速率。

第一方面,本申请实施例公开了一种文件更新方法,该方法包括:

分别对磁盘中的原文件和新文件进行切分得到子原文件和子新文件;

对所述子原文件中的记录进行排序,且将排序结果保存在原排序文件中;

对所述子新文件中的记录进行排序,且将排序结果保存在新排序文件中;

比较所述原排序文件中的记录和所述新排序文件中的记录,得到待同步记录,并根据所述待同步记录更新所述原文件;

其中,所述原文件和所述新文件的大小大于内存容量;所述子原文件和所述子新文件的大小小于内容容量。

上述申请中的一个实施例具有如下优点或有益效果:通过分别对磁盘中存储的大于内存容量的原文件和新文件进行切分得到小于内存容量的子原文件和子新文件;之后可在内存中,对子原文件中的记录进行排序并将排序结果保存在原排序文件中,以及对子新文件中的记录进行排序,并将排序结果保存在新排序文件中;且通过在内存中比较原排序文件中的记录和新排序文件中的记录,可得到原排序文件和新排序文件两个文件中的变化数据即待同步记录,进而根据待同步记录更新原文件以实现数据库的更新,解决了目前无法在内存中比较两个大小超过内存容量的文件来获取变化数据的问题,实现了数据库的更新,同时减少了数据库更新数据量,提高了数据库的更新速率。

可选的,对所述子原文件中的记录进行排序,且将排序结果保存在原排序文件中,包括:

分别对每一子原文件中的记录进行排序得到中间子原文件,并将所述中间子原文件写入磁盘;

对所有中间子原文件中的记录进行排序,且将排序结果保存在原排序文件中;

对所述子新文件中的记录进行排序,且将排序结果保存在新排序文件中,包括:

分别对每一子新文件中的记录进行排序得到中间子新文件,并将所述中间子新文件写入磁盘;

对所有中间子新文件中的记录进行排序,且将排序结果保存在新排序文件中。

可选的,对所有中间子原文件中的记录进行排序,且将排序结果保存在原排序文件中,包括:

对本次待排序原记录进行比较,并根据比较结果选择本次目标原记录写入原排序文件;

从本次目标原记录所属的中间子原文件中读取新的待排序原记录,将本次其他待排序原记录以及新的排序原记录作为下次待排序原记录;

对所有中间子新文件中的记录进行排序,且将排序结果保存在新排序文件中,包括:

对本次待排序新记录进行比较,并根据比较结果选择本次目标新记录写入新排序文件;

从本次目标新记录所属的中间子新文件中读取新的待排序新记录,将本次其他待排序新记录以及新的排序新记录作为下次待排序新记录。

上述可选方式具有如下优点或有益效果:对于大小大于内存容量的原文件,通过分别对该原文件切分得到的每一小于内存容量的子原文件进行排序,并将排序得到的中间子原文件写入磁盘;之后采用循环方式对所有中间子原文件中的记录进行排序,进而可得到该原文件的原排序文件,同理可得到新文件的新排序文件,为大小大于内存容量的文件中记录排序提供了一种新思路。

可选的,比较所述原排序文件中的记录和所述新排序文件中的记录,得到待同步记录,包括:

若所述原排序文件中本次待处理原记录和所述新排序文件中本次待处理新记录的关键字段取值相同,则比较所述本次待处理原记录和所述本次待处理新记录中的其他字段取值是否相同,并根据比较结果确定本次待同步记录以及本次待同步类型,且从所述原排序文件和所述新排序文件中分别读取下次待处理原记录和下次待处理新记录。

可选的,比较所述原排序文件中的记录和所述新排序文件中的记录,得到待同步记录,包括:

若所述原排序文件中本次待处理原记录和所述新排序文件中本次待处理新记录的关键字段取值不同,则根据所述本次待处理原记录和所述本次待处理新记录的关键字段取值,确定本次待同步记录以及本次待同步类型;以及,从所述原排序文件或所述新排序文件中读取下次待处理原记录或下次待处理新记录。

上述可选方式具有如下优点或有益效果:对于原文件的原排序文件以及新文件的新排序文件,通过采用循环方式,在内存中将从原排序文件中读取的待处理原记录和新排序文件中读取的待处理新记录的关键字段取值进行比较,进而可依据比较结果确定原排序文件和新排序文件两个文件中的变化数据即待同步记录,为在内存中比较两个大小超过内存容量的文件来获取变化数据提供了一种新思路。

此外,上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。

第二方面,本申请实施例还公开了一种文件更新装置,该装置包括:

切分模块,用于分别对磁盘中的原文件和新文件进行切分得到子原文件和子新文件;

排序写入模块,用于对所述子原文件中的记录进行排序,且将排序结果保存在原排序文件中;

排序写入模块,还用于对所述子新文件中的记录进行排序,且将排序结果保存在新排序文件中;

记录比较模块,用于比较所述原排序文件中的记录和所述新排序文件中的记录,得到待同步记录,并根据所述待同步记录更新所述原文件;

其中,所述原文件和所述新文件的大小大于内存容量;所述子原文件和所述子新文件的大小小于内容容量。

第三方面,本申请实施例还公开了一种电子设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如本申请任一实施例所述的文件更新方法。

第四方面,本申请实施例还公开了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行如本申请任一实施例所述的文件更新方法。

附图说明

附图用于更好地理解本方案,不构成对本申请的限定。其中:

图1是根据本申请实施例提供的一种文件更新方法的流程图;

图2是根据本申请实施例提供的另一种文件更新方法的流程图;

图3是根据本申请实施例中提供的一种确定原排序文件过程的示意图;

图4是根据本申请实施例提供的另一种文件更新方法的流程图;

图5是根据本申请实施例提供的一种文件更新装置的结构示意图;

图6是用来实现本申请实施例的文件更新方法的电子设备的框图。

具体实施方式

以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

图1是根据本申请实施例提供的一种文件更新方法的流程图,本实施例可适用于如何更新数据中的文件以实现数据库的更新的情况,尤其适用于如何找出两个大小大于内存容量的文件之间的变化数据,进而根据变化数据更新文件以实现数据库的更新。该方法可以由文件更新装置来执行,该装置可以采用软件和/或硬件的方式实现,并可集成在任意的具有计算能力的设备上,例如服务器等。

如图1所示,本实施例提供的文件更新方法可以包括:

s110、分别对磁盘中的原文件和新文件进行切分得到子原文件和子新文件。

本实施例中,原文件是指数据库中的文件;新文件用于更新原文件,可以从其他方获取。进一步的,原文件和新文件的大小大于内存容量,可存储于磁盘中。

可选的,对磁盘中存储的原文件和新文件的切分在内存中进行。例如,在内存中,可依据可用内存容量以及原文件的大小,计算原文件可切分为几个子原文件;并依据原文件中一条记录的大小,确定每一子原文件可包含的记录数量以及起点记录位置和尾点记录位置等,进而实现对原文件进行切分得到子原文件。其中每一子原文件的大小可相等,也可不等。如,原文件的大小为10g,可用内存容量为1g,进而确定原文件可平均切分为10个子原文件;若原文件中一条记录的大小为10m,进而确定每一子原文件可包含的记录数据为100条;对于第一个子原文件,起点记录位置和尾点记录位置分别为第1条记录位置和第100条记录位置。

可选的,采用上述相同处理过程,即可实现对新文件进行切分得到子新文件。进一步的,本实施例中,子原文件和子新文件的大小小于内容容量。

此外,子原文件和子新文件也可存储在磁盘中。以子原文件为例进行说明,具体的,确定每一子原文件可包含的记录数量以及起点记录位置和尾点记录位置之后,可从磁盘中读取第0至100条的记录得到第一个子原文件,并将该第一个子原文件写入磁盘;之后从磁盘中读取第101条至200条的记录得到第二个子原文件,并将该第二个子原文件写入磁盘,依次类推,可将每一子原文件写入磁盘。

s120、对子原文件中的记录进行排序,且将排序结果保存在原排序文件中。

本实施例中,原排序文件是原文件的排序文件,且原排序文件可在磁盘中或其他较大容器的存储容器中,下述将以原排序文件在磁盘为例进行说明,但并不限于此。可选的,在内存中,可依据子原文件的记录的关键字段取值和设定排序规则,对子原文件中的记录进行排序,且将排序结果写入磁盘的原排序文件中。其中,关键字段是指文件中可以唯一确定所描述的事物的一个或一组字段;例如,学生数据库中,关键字段可以是身份证,关键字段取值即为身份证号;地图兴趣点数据库中,关键字段可以是兴趣点坐标,关键字段取值即为兴趣点坐标值。设定排序规则是预先设定的,按关键字段取值从小到大排序或者从大到小排序等。可选的,对子原文件中的记录进行排序,且将排序结果保存在原排序文件中的具体过程,将在下述实施例中详细说明。

s130、对子新文件中的记录进行排序,且将排序结果写入磁盘的新排序文件中。

本实施例中,新排序文件是新文件的排序文件,且新排序文件可在磁盘中或其他较大容器的存储容器中,下述将以新排序文件在磁盘为例进行说明,但并不限于此。可选的,在内存中,可依据子新文件的记录的关键字段取值和设定排序规则,对子新文件中的记录进行排序,且将排序结果写入磁盘的新排序文件中。需要说明的是,对子新文件中的记录进行排序的依据,与对子原文件中的记录进行排序的依据相同。此外,对子新文件中的记录进行排序,且将排序结果保存在新排序文件中的具体过程,也将在下述实施例中详细说明。

s140、比较原排序文件中的记录和新排序文件中的记录,得到待同步记录,并根据待同步记录更新原文件。

本实施例中,待同步记录即原排序文件和新排序文件中的变化数据,可以包括待更新记录、待删除记录以及待增加记录中的至少一种。进一步的,待同步记录可存储于磁盘中,也可存储在内存中,或其他存储容器中等。

可选的,可以比较原排序文件中的记录的关键字段取值和新排序文件中的记录的关键字段取值,得到待同步记录以及非同步记录,进而根据待同步记录更新原文件。其中,非同步记录即为原排序文件和新排序文件中的相同数据,也就是说,原文件中无需更新的记录。非同步记录可存储于磁盘中。

可选的,根据待同步记录更新原文件可以包括:根据待同步记录中的待增加记录,执行向原文件中插入记录的操作;根据待同步记录中的待删除记录,执行删除原文件中记录的操作;根据待同步记录中的待更新记录,执行更新原文件中记录的操作。具体的,若待同步记录存储于磁盘中,则可以先从磁盘中读取待同步记录,而后执行根据待同步记录更新原文件;若存储于内存中,则可以直接根据待同步记录更新原文件。

本申请实施例提供的技术方案,通过分别对磁盘中存储的大于内存容量的原文件和新文件进行切分得到小于内存容量的子原文件和子新文件;之后可在内存中,对子原文件中的记录进行排序并将排序结果保存在原排序文件中,以及对子新文件中的记录进行排序,并将排序结果保存在新排序文件中;且通过在内存中比较原排序文件中的记录和新排序文件中的记录,可得到原排序文件和新排序文件两个文件中的变化数据即待同步记录,进而根据待同步记录更新原文件以实现数据库的更新,解决了目前无法在内存中比较两个大小超过内存容量的文件来获取变化数据的问题,实现了数据库的更新,同时减少了数据库更新数据量,提高了数据库的更新速率。

图2是根据本申请实施例提供的另一种文件更新方法的流程图,本实施例在上述实施例的基础上,进一步对对子原文件中的记录进行排序,且将排序结果保存在原排序文件中;以及对子新文件中的记录进行排序,且将排序结果保存在新排序文件中进行解释说明。

如图2所示,本实施例提供的文件更新方法可以包括:

s210、分别对磁盘中的原文件和新文件进行切分得到子原文件和子新文件。

s220、分别对每一子原文件中的记录进行排序得到中间子原文件,并将中间子原文件写入磁盘。

本实施例中,中间子原文件即为子原文件的排序文件。具体的,在内存中,可依据记录顺序,依次对每一子原文件中的记录进行排序得到每一子原文件的中间子原文件,并将中间子原文件写入磁盘。进一步的,对于每一子原文件,可以从磁盘中读取该子原文件中的记录;而后可依据该子原文件的记录的关键字段取值和设定排序规则,对该子原文件中的记录进行排序得到该子原文件的中间子原文件,并将该子原文件的中间子原文件写入磁盘;之后可删除该子原文件的中间子原文件。

需要说明的是,本实施例及后续实施例中涉及排序的过程,其排序依据均相同,例如可以按照关键字段取值从小到大排序,也可按照关键字段取值从大到小排序等。下述均以按照关键字段取值从小到大排序为例进行说明,但并不限于此。

例如,如图3所示,原文件file_old的大小为10g,可用内存容量为1g,进而可将原文件切分为10个子原文件old_1、old_2…以及old_10。而后,可从磁盘中读取子原文件old_1的记录,并依据该子原文件old_1的记录的关键字段取值和从小到大排序规则,对该子原文件old_1中的记录进行排序得到该子原文件old_1的中间子原文件old_1_sort;将中间子原文件old_1_sort写入磁盘之后,可接着从磁盘中读取子原文件old_2的记录,并采用与上述相同的处理过程得到中间子原文件old_2_sort。依次类推,可得到中间子原文件old_3_sort、中间子原文件old_4_sort…以及中间子原文件old_10_sort。

s230、对所有中间子原文件中的记录进行排序,且将排序结果保存在原排序文件中。

具体的,可依据关键字段取值和设定排序规则,对所有中间子原文件中的记录进行排序,且将排序结果保存在原排序文件中。需要说明的是,对所有中间子原文件中的记录进行排序的依据,与对每一子原文件进行排序的依据相同。

示例性的,对所有中间子原文件中的记录进行排序,且将排序结果保存在原排序文件中可以包括:针对每一次排序过程,对本次待排序原记录进行比较,并根据比较结果选择本次目标原记录写入原排序文件;从本次目标原记录所属的中间子原文件中读取新的待排序原记录,将本次其他待排序原记录以及新的排序原记录作为下次待排序原记录。

本实施例中,待排序原记录是指从中间子原文件中读取的记录。进一步的,若本次为第一次排序,则本次待排序原记录可以包括从每个子原文件中读取的第一条记录,对应的,具体排序过程可以是,从每个子原文件中读取第一条记录,并比较所读取的第一条记录的关键字段取值,且依据比较结果和设定排序规则选择第一次目标原记录,如将所读取的第一条记录中关键字段取值最小的记录作为第一次目标原记录,写入原排序文件的第一行中;之后可从内存中删除第一次目标原记录。

若本次为第二次排序,则本次待排序原记录可以包括从第一次目标原记录所属的中间子原文件中读取的第二条记录,以及第一次排序之后内存中剩余的其他中间子原文件的第一条记录。对应的,具体排序过程可以是,从第一次目标原记录所属的中间子原文件中读取第二条记录,而后比较所读取的第二条记录和其他中间子原文件的第一条记录的关键字段取值,且依据比较结果和设定排序规则选择第二次目标原记录,写入原排序文件的第二行中;之后可从内存中删除第二次目标原记录。

若本次为第三次排序,则本次待排序原记录可以包括从第二次目标原记录所属的中间子原文件中读取的第二条记录或者第三条记录,以及第二次排序之后内存中剩余的其他中间子原文件的第一条记录和第二条记录,或者第一条记录。对应的,具体排序过程可以是,从第二次目标原记录所属的中间子原文件中读取第二条记录或者第三条记录,而后比较第三次待排序原记录的关键字段取值,且依据比较结果和设定排序规则选择第三次目标原记录,写入原排序文件的第三行中;之后可从内存中删除第三次目标原记录。

可选的,依次类推,直至排序完成,即可将所有中间子原文件中的记录都写入原排序文件中如图3所示。

s240、分别对每一子新文件中的记录进行排序得到中间子新文件,并将中间子新文件写入磁盘。

本实施例中,中间子新文件即为子新文件的排序文件。对每一子新文件的排序过程与对每一子原文件的排序过程相同。具体的,在内存中,可依据记录顺序,依次对每一子新文件中的记录进行排序得到每一子新文件的中间子新文件,并将中间子新文件写入磁盘。进一步的,对于每一子新文件,可以从磁盘中读取该子新文件中的记录;而后可依据该子新文件的记录的关键字段取值和设定排序规则,对该子新文件中的记录进行排序得到该子新文件的中间子新文件,并将该子新文件的中间子新文件写入磁盘;之后可删除该子新文件的中间子新文件。

s250、对所有中间子新文件中的记录进行排序,且将排序结果保存在新排序文件中。

本实施例中,对所有中间子新文件中的记录进行排序的过程,与对所有中间子原文件中的记录进行排序的过程相同。具体可以是:针对每一次排序过程,对本次待排序新记录进行比较,并根据比较结果选择本次目标新记录写入新排序文件;从本次目标新记录所属的中间子新文件中读取新的待排序新记录,将本次其他待排序新记录以及新的排序新记录作为下次待排序新记录。

需要说明的是,由于对数据进行排序需要将数据写入内存,在内存中进行,但对于大小超过内存容量的文件,则无法在内存中进行排序。本申请对于大小大于内存容量的文件如原文件,通过分别对该原文件切分得到的每一小于内存容量的子原文件进行排序,并将排序得到的中间子原文件写入磁盘;之后采用循环方式对所有中间子原文件中的记录进行排序,进而可得到该原文件的排序文件,同理可得到新文件的新排序文件,为大小大于内存容量的文件中记录排序提供了一种新思路。

s260、比较原排序文件中的记录和新排序文件中的记录,得到待同步记录,并根据待同步记录更新原文件。

本申请实施例提供的技术方案,对于大小大于内存容量的原文件和新文件,通过分别对原文件切分得到的每一小于内存容量的子原文件进行排序,并将排序得到的中间子原文件写入磁盘;之后采用循环方式对所有中间子原文件中的记录进行排序,进而可得到原文件的原排序文件,同理可得到新文件的新排序文件,为大小大于内存容量的文件中记录排序提供了一种新思路;之后通过在内存中比较原排序文件中的记录和新排序文件中的记录,可得到原排序文件和新排序文件两个文件中的变化数据即待同步记录,进而根据待同步记录更新原文件以实现数据库的更新,解决了目前无法在内存中比较两个大小超过内存容量的文件来获取变化数据的问题,实现了数据库的更新,同时减少了数据库更新数据量,提高了数据库的更新速率。

图4是根据本申请实施例提供的另一种文件更新方法的流程图,本实施例在上述实施例的基础上,进一步对比较原排序文件中的记录和新排序文件中的记录,得到待同步记录进行解释说明。

如图4所示,本实施例提供的文件更新方法可以包括:

s410、分别对磁盘中的原文件和新文件进行切分得到子原文件和子新文件。

s420、对子原文件中的记录进行排序,且将排序结果保存在原排序文件中。

s430、对子新文件中的记录进行排序,且将排序结果保存在新排序文件中。

s440、确定原排序文件中本次待处理原记录和新排序文件中本次待处理新记录的关键字段取值是否相同;若相同,则执行s450;若不同,则执行s470。

本实施例中,待处理原记录是指从原排序文件中读取的记录;待处理新记录是指从新排序文件中读取的记录。需要说明的是,每一次处理过程结束,均会对读取到内存中的原排序文件中的记录和/或新排序文件中的记录进行清除;本次可以是任一次处理过程,对应的,本次待处理原记录是指进行本次处理时,内存中存储的原排序文件中的记录;本次待处理新记录是指进行本次处理时,内存中存储的新排序文件中的记录。

为了便于理解,可以按照容器方式实现比较原排序文件中的记录和新排序文件中的记录。可选的,可在内存中定义两个容器a和b,其中容器a对应原排序文件,容器b对应新排序文件;也就是说从原排序文件中读取的待处理原记录存储在容器a中,从新排序文件中读取的待处理新记录存储在容器b中。进而,本次待处理原记录可以理解为,进行本次处理时,容器a中存储的待处理原记录;本次待处理新记录可以理解为,进行本次处理时,容器b中存储的待处理新记录。

s450、比较本次待处理原记录和本次待处理新记录中的其他字段取值是否相同,并根据比较结果确定本次待同步记录以及本次待同步类型。

本实施例中,待同步类型与待同步记录所属种类相对应;若待同步记录为待更新记录,则待同步类型为待更新;若待同步记录为待删除记录,则待同步类型为待删除;若待同步记录为待增加记录,则待同步类型为待增加。

具体的,针对每一次处理过程,若本次待处理原记录中的关键字段取值与本次待处理新记录中的关键字段取值相同,则确定本次待处理原记录中的其他字段取值是否与本次待处理新记录中的其他字段取值相同;若相同,则说明原排序文件中本次待处理原记录和新排序文件中本次待处理新记录完全相同,即原文件中的这条记录和新文件中的这条记录相比未发生变化,不必进行更新;若不相同,则说明原排序文件中本次待处理记录和新排序文件中本次待处理新记录不完全相同,即新文件中这条记录是原文件中这条记录的更新记录,进而可将本次待处理新记录作为本次待同步记录,并确定本次待同步类型为待更新。

下述以本次是第一次处理过程为例进行说明。若本次是第一次处理过程,则本次待处理原记录可以是从原排序文件中读取的第一条记录,本次待处理新记录可以是从新排序文件中读取的第一条记录。具体的,可以从原排序文件中读取第一条记录放入容器a中,从新排序文件中读取第一条记录放入容器b中;比较容器a中记录的关键字段取值与容器b中记录的关键字段取值是否相同;若不同,则执行s470;若相同,则比较容器a中记录的其他字段取值与容器b中记录的其他字段取值是否相同,若不相同,则确定容器b中记录是容器a中记录的更新记录,进而可将容器b中记录作为第一次待同步记录,以及确定第一次待同步类型为待更新。此外,若容器a中记录的其他字段取值与容器b中记录的其他字段取值相同,则确定容器b中记录与容器a中记录完全相同,此时,可将容器a或容器b中记录写入磁盘的非同步记录文件中。

之后,可删除容器a和容器b中记录,并执行s460确定是否从原排序文件和新排序文件中分别读取到第二次待处理原记录和第二次待处理新记录;若是,则将从原排序文件中读取到的第二条记录放入容器a中,以及将从新排序文件中读取到的第二条记录放入容器b中,而后返回执行s440;若否,则确定处理完成。

s460、确定是否从原排序文件和新排序文件中分别读取到下次待处理原记录和下次待处理新记录;若是,则返回执行s440;若否,则执行s490。

s470、根据本次待处理原记录和本次待处理新记录的关键字段取值,确定本次待同步记录以及本次待同步类型。

本实施例中,原排序文件和新排序文件中记录排序规则不同,本次待处理原记录的关键字段取值和本次待处理新记录的关键字段取值的大小不同,进而所确定的本次待同步记录和本次待同步类型不同。例如,原排序文件和新排序文件中记录按升序排序即从小到大排序,若本次待处理原记录的关键字段取值小于本次待处理新记录的关键字段取值,则说明本次待处理原记录在原文件中所对应的记录已被删除,此时可以将本次待处理原记录作为本次待同步记录,并确定本次待同步类型为待删除;若本次待处理原记录的关键字段取值大于本次待处理新记录的关键字段取值,则说明本次待处理新记录是新增数据,进而可以将本次待处理新记录作为本次待同步记录,并确定本次待同步类型为待增加。

此外,在原排序文件和新排序文件中记录按降序排序即从大到小排序的情况,与上述原排序文件和新排序文件中记录按升序排序即从小到大排序的情况相反。具体的,若本次待处理原记录的关键字段取值小于本次待处理新记录的关键字段取值,则说明本次待处理新记录是新增数据,进而可以将本次待处理新记录作为本次待同步记录,并确定本次待同步类型为待增加;若本次待处理原记录的关键字段取值大于本次待处理新记录的关键字段取值,则说明本次待处理原记录在原文件中所对应的记录已被删除,此时可以将本次待处理原记录作为本次待同步记录,并确定本次待同步类型为待删除。

下述以本次是第一次处理过程为例进行说明。若本次是第一次处理过程,容器a中记录的关键字段取值与容器b中记录的关键字段取值不同,以及原排序文件和新排序文件中记录按升序排序即从小到大排序,则若容器a中记录的关键字段取值小于容器b中记录的关键字段取值,则可以将容器a中记录作为第一次待同步记录,并确定第一次待同步类型为待删除;之后,可以删除容器a中记录,并执行s480确定是否从原排序文件中读取到第二次待处理原记录;若是,则将从原排序文件中读取到的第二条记录放入容器a中,而后返回执行s440;若否,确定处理完成。

此外,若容器a中记录的关键字段取值大于容器b中记录的关键字段取值,则可以将容器b中记录作为第一次待同步记录,并确定第一次待同步类型为待增加;之后,可以删除容器b中记录,并执行s480确定是否从新排序文件中读取到第二次待处理新记录;若是,则将从新排序文件中读取到的第二条记录放入容器b中,而后返回执行s440;若否,确定处理完成。

s480、确定是否从原排序文件或新排序文件中读取到下次待处理原记录或下次待处理新记录;若是,则返回执行s440;若否,则执行s490。

s490、处理完成。

本申请实施例提供的技术方案,对于原文件的原排序文件以及新文件的新排序文件,通过采用循环方式,在内存中将从原排序文件中读取的待处理原记录和新排序文件中读取的待处理新记录的关键字段取值进行比较,进而可依据比较结果确定原排序文件和新排序文件两个文件中的变化数据即待同步记录,为在内存中比较两个大小超过内存容量的文件来获取变化数据提供了一种新思路;同时根据待同步记录更新原文件以实现数据库的更新,解决了目前无法在内存中比较两个大小超过内存容量的文件来获取变化数据的问题,实现了数据库的更新,同时减少了数据库更新数据量,提高了数据库的更新速率。

图5是根据本申请实施例提供的一种文件更新装置的结构示意图,该装置可执行本申请任意实施例所提供的文件更新方法,具备执行方法相应的功能模块和有益效果。可选的,该装置可以采用软件和/或硬件的方式实现,并可集成在任意的具有计算能力的设备上,例如服务器等。如图5所示,该装置可以包括:

切分模块510,用于分别对磁盘中的原文件和新文件进行切分得到子原文件和子新文件;

排序写入模块520,用于对子原文件中的记录进行排序,且将排序结果保存在原排序文件中;

排序写入模块520,还用于对子新文件中的记录进行排序,且将排序结果保存在新排序文件中;

记录比较模块530,用于比较原排序文件中的记录和新排序文件中的记录,得到待同步记录,并根据待同步记录更新所述原文件;

其中,原文件和新文件的大小大于内存容量;子原文件和子新文件的大小小于内容容量。

本申请实施例提供的技术方案,通过分别对磁盘中存储的大于内存容量的原文件和新文件进行切分得到小于内存容量的子原文件和子新文件;之后可在内存中,对子原文件中的记录进行排序并将排序结果保存在原排序文件中,以及对子新文件中的记录进行排序,并将排序结果保存在新排序文件中;且通过在内存中比较原排序文件中的记录和新排序文件中的记录,可得到原排序文件和新排序文件两个文件中的变化数据即待同步记录,进而根据待同步记录更新原文件以实现数据库的更新,解决了目前无法在内存中比较两个大小超过内存容量的文件来获取变化数据的问题,实现了数据库的更新,同时减少了数据库更新数据量,提高了数据库的更新速率。

示例性的,排序写入模块520可以包括:

第一排序写入单元,用于分别对每一子原文件中的记录进行排序得到中间子原文件,并将中间子原文件写入磁盘;

第二排序写入单元,用于对所有中间子原文件中的记录进行排序,且将排序结果保存在原排序文件中;

第一排序写入单元,还用于分别对每一子新文件中的记录进行排序得到中间子新文件,并将中间子新文件写入磁盘;

第二排序写入单元,还用于对所有中间子新文件中的记录进行排序,且将排序结果保存在新排序文件中。

示例性的,第二排序写入单元具体可以用于:

对本次待排序原记录进行比较,并根据比较结果选择本次目标原记录写入原排序文件;

从本次目标原记录所属的中间子原文件中读取新的待排序原记录,将本次其他待排序原记录以及新的排序原记录作为下次待排序原记录;

示例性的,第二排序写入单元具体还可以用于:

对本次待排序新记录进行比较,并根据比较结果选择本次目标新记录写入新排序文件;

从本次目标新记录所属的中间子新文件中读取新的待排序新记录,将本次其他待排序新记录以及新的排序新记录作为下次待排序新记录。

示例性的,记录比较模块530具体可以用于:

若原排序文件中本次待处理原记录和新排序文件中本次待处理新记录的关键字段取值相同,则比较本次待处理原记录和本次待处理新记录中的其他字段取值是否相同,并根据比较结果确定本次待同步记录以及本次待同步类型,且从原排序文件和新排序文件中分别读取下次待处理原记录和下次待处理新记录。

示例性的,记录比较模块530具体还可以用于:

若原排序文件中本次待处理原记录和新排序文件中本次待处理新记录的关键字段取值不同,则根据本次待处理原记录和本次待处理新记录的关键字段取值,确定本次待同步记录以及本次待同步类型;以及,从原排序文件或新排序文件中读取下次待处理原记录或下次待处理新记录。

示例性的,记录比较模块530在根据比较结果确定本次待同步记录以及本次待同步类型时,具体可以用于:

若比较结果为不相同,则将所述本次待处理新记录作为本次待同步记录,并确定本次待同步类型为待更新。

示例性的,若原排序文件和新排序文件中记录按升序排序,则记录比较模块530在根据本次待处理原记录和本次待处理新记录的关键字段取值,确定本次待同步记录以及本次待同步类型时,具体可以用于:

若本次待处理原记录的关键字段取值小于本次待处理新记录的关键字段取值,则将本次待处理原记录作为本次待同步记录,并确定本次待同步类型为待删除;

若本次待处理原记录的关键字段取值大于本次待处理新记录的关键字段取值,则将本次待处理新记录作为本次待同步记录,并确定本次待同步类型为待增加。

根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。

如图6所示,是根据本申请实施例的文件更新方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。

如图6所示,该电子设备包括:一个或多个处理器601、存储器602,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示图形用户界面(graphicaluserinterface,gui)的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作,例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统。图6中以一个处理器601为例。

存储器602即为本申请所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请所提供的文件更新方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请所提供的文件更新方法。

存储器602作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的文件更新方法对应的程序指令/模块,例如,附图5所示的切分模块510、排序写入模块520和记录比较模块530。处理器601通过运行存储在存储器602中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的文件更新方法。

存储器602可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据用来实现文件更新方法的电子设备的使用所创建的数据等。此外,存储器602可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器602可选包括相对于处理器601远程设置的存储器,这些远程存储器可以通过网络连接至用来实现文件更新方法的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

用来实现文件更新方法的电子设备还可以包括:输入装置603和输出装置604。处理器601、存储器602、输入装置603和输出装置604可以通过总线或者其他方式连接,图6中以通过总线连接为例。

输入装置603可接收输入的数字或字符信息,以及产生与用来实现文件更新方法的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置604可以包括显示设备、辅助照明装置和触觉反馈装置等,其中,辅助照明装置例如发光二极管(lightemittingdiode,led),触觉反馈装置例如振动电机等。该显示设备可以包括但不限于,液晶显示器(liquidcrystaldisplay,lcd)、led显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。

此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用专用集成电路(applicationspecificintegratedcircuit,asic)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。

这些计算程序也称作程序、软件、软件应用、或者代码,包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置,例如,磁盘、光盘、存储器、可编程逻辑装置(programmablelogicdevice,pld),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。

为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置,例如,阴极射线管(cathoderaytube,crt)或者lcd监视器;以及键盘和指向装置,例如,鼠标或者轨迹球,用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式,包括声输入、语音输入或者、触觉输入,来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统例如,作为数据服务器;或者实施在包括中间件部件的计算系统例如,应用服务器;或者实施在包括前端部件的计算系统例如具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互,或者实施在包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信,例如,通信网络,来将系统的部件相互连接。通信网络的示例包括:局域网(localareanetwork,lan)、广域网(wideareanetwork,wan)和互联网。

计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。

根据本申请实施例的技术方案,通过分别对磁盘中存储的大于内存容量的原文件和新文件进行切分得到小于内存容量的子原文件和子新文件;之后可在内存中,对子原文件中的记录进行排序并将排序结果写入磁盘的原排序文件中,以及对子新文件中的记录进行排序,并将排序结果写入磁盘的新排序文件中;且通过在内存中比较原排序文件中的记录和新排序文件中的记录,可得到原排序文件和新排序文件两个文件中的变化数据即待同步记录,进而根据待同步记录更新原文件以实现数据库的更新,解决了目前无法在内存中比较两个大小超过内存容量的文件来获取变化数据的问题,实现了数据库的更新,同时减少了数据库更新数据量,提高了数据库的更新速率。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。

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