文件更新方法、文件复制方法以及相应的系统与流程

文档序号:11230477阅读:684来源:国知局
文件更新方法、文件复制方法以及相应的系统与流程

本发明涉及计算机数据处理技术,具体地,涉及一种文件更新方法、文件复制方法以及相应的系统。



背景技术:

搜索引擎是信息领域非常核心的功能,通过搜索可以迅速定位到用户所需要的知识,搜索效率以及对搜索结果的智能处理成为搜索引擎的核心点。

目前搜索引擎索引一般通过网络文件系统(networkfilesystem,nfs)共享的方式实现不同服务器上面搜索器的索引文件读取,这样,在索引文件更新的情况,如果同时读写索引文件会造成如下两个问题:

1)出现大量的.nfs临时文件,会占用大量的磁盘空间;

2)内存中占用大量的文件句柄不能释放,造成系统因文件句柄过多而停止文件读写服务。



技术实现要素:

鉴于现有技术的上述缺陷,各种不同实施方式提供了一种文件更新方法、文件复制方法以及相应的系统。

根据一种实施方式提供的文件更新方法,其中,存放文件的文件夹包括存储正在进行写操作的文件的运行文件夹、保存上次更新后的文件的准备文件夹、以及存放备份文件的备份文件夹。其中,所述文件更新方法包括:

确定所述准备文件夹和运行文件夹是否符合更新要求;

所述准备文件夹和运行文件夹符合更新要求,则将所述准备文件夹中的文件复制到所述运行文件夹;

判断所述准备文件夹与所述运行文件夹是否一致;

若一致,在所述运行文件夹下建立写锁,进行文件更新操作。

根据另一种实施方式提供的文件更新方法,其包括:

判断待更新文件目录是否损坏;

若所述待更新文件目录已损坏,则清空所述待更新文件目录,将当前使用的文件目录复制到所述待更新文件目录;

将本次及上次的更新列表更新到所述待更新文件目录;

将所述待更新文件目录切换为当前使用的文件目录。

根据另一种实施方式提供的文件复制方法,其包括:

清空目标文件夹;

在源文件夹生成读锁,在所述目标文件生成写锁;

将所述源文件夹中除被锁定的文件之外的文件复制到所述目标文件夹;

删除所述源文件中的读锁和所述目标文件夹中的写锁。

根据一种实施方式提供的用于文件更新的系统,其包括:

存储器,用于存储一个或多个程序;

处理器,用于执行所述存储器存储的一个或多个程序以便上述任意一个实施方式所述的文件更新方法的操作。

根据另一种实施方式提供的用于文件复制的系统,其包括:

存储器,用于存储一个或多个程序;

处理器,用于执行所述存储器存储的一个或多个程序以便上述任意实施方式所述的文件复制方法的操作。

根据各种不同实施方式,节省了磁盘空间的占用,并且内存中不会积占大量的句柄,避免系统因文件句柄过多而停止文件读写服务。

附图说明

图1是示出根据实施方式的文件更新方法的流程图;

图2是示出根据实施方式的文件更新方法的流程图;

图3示出了根据实施方式的索引存放策略;

图4是示出了根据实施方式的文件复制方法的流程图;

图5是根据实施方式的索引更新流程图;

图6是根据实施方式的准备文件夹的检查流程图;

图7是根据实施方式的运行文件夹的检查流程图;

图8是根据实施方式的索引备份流程图;

图9是根据实施方式的搜索器更新流程图;

图10是根据实施方式的索引更新流程图;

图11是根据实施方式的待写入索引目录的检查流程图。

具体实施方式

为了便于理解本发明技术方案的各个方面、特征以及优点,下面结合附图对本发明进行具体描述。应当理解,下述的各种实施方式只用于举例说明,而非用于限制本发明的保护范围。

图1示出了根据一种实施方式的文件更新方法。例如,本实施方式主要针对文件更新频率低,更新数据量较大的情况,因为牵涉到文件拷贝操作,所以不适合文件更新频繁的场景。其优势在于只更新到一个文件里面,文件更新部分逻辑比较简单。在本实施方式中,存放文件的文件夹包括存储正在进行写操作的文件的运行文件夹、保存上次更新后的文件的准备文件夹、以及存放备份文件的备份文件夹。并且,如图1所示,根据本实施方式的文件更新方法可以包括:

s101.确定所述准备文件夹和运行文件夹是否符合更新要求;

s102.所述准备文件夹和运行文件夹符合更新要求,则将所述准备文件夹中的文件复制到所述运行文件夹;

s103.判断所述准备文件夹与所述运行文件夹是否一致;

s104.若一致,在所述运行文件夹下建立写锁,进行文件更新操作。

采用本实施方式,避免出现大量的.nfs临时文件,减少磁盘空间的占用,并且,不会在内存中占用大量的文件句柄不释放,由此避免系统因文件句柄过多而停止文件读写服务。

作为选择,在处理s101中,确定所述准备文件夹和运行文件夹是否符合更新要求可以包括:检查所述准备文件夹和运行文件夹是否正常;所述准备文件夹和运行文件夹均正常,则判断所述运行文件夹是否为空且所述准备文件夹是否为非空;所述运行文件夹为空且所述准备文件夹非空,则确定为所述准备文件夹和运行文件夹符合更新要求。

其中,检查所述准备文件夹是否正常可以包括:判断所述准备文件夹是否正在被写入或者是否处于清理状态;若所述准备文件夹没有正在被写入或处于清理状态,则所述准备文件夹被检查为正常。可选地,检查所述准备文件夹是否正常还可包括:若所述准备文件夹正在被写入或不是处于清理状态,则判断所述运行文件夹是否正在被写入或是否为空;若所述运行文件夹没有正在被写入或不为空,则清空所述准备文件夹;将所述运行文件夹中的文件复制到所述准备文件夹,以使所述准备文件夹被检查为正常。

其中,检查所述运行文件夹是否正常可以包括:判断所述运行文件夹是否正在被写入或是否处于清理状态;若所述运行文件夹正在被写入或处于清理状态,则清空所述运行文件夹,以使所述运行文件夹被检查为正常。可选地,检查所述运行文件夹是否正常还可包括:若所述运行文件夹没有正在被写入或不处于清理状态,则判断所述运行文件夹是否正在被读取;若所述运行文件夹正在被读取,则删除所述运行文件夹下的读锁,以使所述运行文件夹被检查为正常;若所述运行文件夹没有正在被读取,则所述运行文件夹被检查为正常。

可选地,根据上述实施方式的文件更新方法可以进一步包括将更新后的文件备份到所述备份文件夹。具体地,例如,判断所述准备文件夹是否正在被写入;若所述准备文件夹没有正在被写入,则判断所述备份文件夹中的备份文件的个数是否超过阈值;若所述备份文件的个数超过阈值,则清除备份时间超过规定时间(例如,最老的或最早的)的备份文件;若所述备份文件的个数没有超过阈值或者所述超过规定时间的备份文件已清除,则将所述准备文件夹中的文件复制到所述备份文件夹。

作为选择,根据上述实施方式的文件更新方法可以进一步包括:判断当前运行的文件是否最新;若当前运行的文件不是最新的,则将所述准备文件夹中的文件拷贝到所述备份文件夹;将所述备份文件夹中的文件切换为当前运行的文件。

此外,举例而言,根据实施方式的用于文件更新的系统可以包括:存储器,用于存储一个或多个程序(或计算机可读指令);处理器,用于执行所述存储器存储的一个或多个程序(或计算机可读指令)以便进行上述任一实施方式所述的操作。

图2示出了根据另一种实施方式的文件更新方法。例如,本实施方式主要针对文件更新频繁的场景,对于文件更新频繁,如果采用上述实施方式可能会造成频繁拷贝文件,影响效率。本实施方式采用两个文件目录都可以读写的方式,同时只有一个文件夹写一个文件夹读的方式。如图2所示,根据本实施方式的文件更新方法可以包括:

s201.判断待更新文件目录是否损坏;

s202.若所述待更新文件目录已损坏,则清空所述待更新文件目录,将当前使用的文件目录复制到所述待更新文件目录;

s203.将本次及上次的更新列表更新到所述待更新文件目录;

s204.将所述待更新文件目录切换为当前使用的文件目录。

如上所述,对于文件频繁更新的情况,通过采用本实施方式能够进一步提高系统效率。

此外,举例而言,根据实施方式的用于文件更新的系统可以包括:存储器,用于存储一个或多个程序(或计算机可读指令);处理器,用于执行所述存储器存储的一个或多个程序(或计算机可读指令)以便进行上述实施方式所述的操作。

此外,根据各种实施方式的文件复制方法可以包括:清空目标文件夹;在源文件夹生成读锁,在所述目标文件生成写锁;将所述源文件夹中除被锁定的文件之外的文件复制到所述目标文件夹;删除所述源文件中的读锁和所述目标文件夹中的写锁。其中,所述清空目标文件夹可以包括:在目标文件夹生成清空锁,以清空目标文件夹,清空目标文件后删除清空锁。

相应地,例如,根据实施方式的用于文件复制的系统可以包括:存储器,用于存储一个或多个程序(或计算机可读指令);处理器,用于执行所述存储器存储的一个或多个程序(计算机可读指令)以便进行上述实施方式所述的文件复制方法的操作。

需要说明的,虽然上述实施方式结合附图对方法的各个操作或处理进行了描述,但是各个操作或处理不是必须按照附图所示的顺序进行执行,一些操作或处理可以与另一些操作或处理并行执行,一些操作或处理可以在另一些操作或处理之后或之前执行。并且,上述各种实施方式中一些实施方式的部分或全部处理可以与另一些实施方式的部分或全部处理以任意方式进行组合,并且组合得到的实施方式仍然属于本发明的实施方式。例如,针对图1和图2分别所示的实施方式,可以以下述方式组合:首先,确定文件更新是频繁更新还是不频繁更新;然后,对于不频繁更新的情况采用结合图1所述的各种实施方式进行处理,对于频繁更新的情况采用结合图2所述的各种实施方式进行处理。通过这两种文件更新方案可以做到读写完全分离,以解决现有技术存在的问题。

下面各种实施方式以索引文件为例,示意性地说明本发明的文件更新方案、文件复制方案。

搜索引擎是信息领域非常核心的功能,通过搜索可以迅速定位到用户所需要的知识。以下各种实施方式通过设计的两种搜索引擎索引控制模型以解决索引文件的读写分离问题。一种是更新不频繁模型,一种是更新频繁模型,根据不同的应用场景使用不同的索引控制模型。下面对这种模型分别进行具体说明。

【更新不频繁模型】

本模型主要针对索引更新频率低,更新数据量较大的情况,因为牵涉到文件拷贝操作,所以不适合索引更新频繁的场景,优势在于只更新到一个索引里面,索引更新部分逻辑比较简单。

索引的存放

如图3所示,索引文件夹可包括备份(backup)、准备(ready)及运行(running)三个子文件夹,其中:

1)running文件夹为索引正在进行写操作的文件夹,当一次索引更新操作成功结束时,把running文件夹中的索引复制到ready文件夹下;

2)ready文件夹保存上次更新后最新的索引文件,其作用为供所有的搜索器读取,并且在建索引破坏running中的索引时,恢复原索引;

3)backup文件夹下存放指定个数的索引备份,在一次操作更新成功结束时,先把ready文件夹中的索引进行备份,如果备份的个数超过指定的个数,删除最老的一份备份,例如,删除2016-01-25时的备份。

在正常的情况下,running文件夹和ready文件夹中只有一个处于写的状态,因此,任意过程的出错,ready文件夹和running文件夹中都有一个没有被破坏,亦即此系统是可自我恢复的。

当出现两者都在写的情况时(如人工外部修改),则此文件系统是不稳定的,更新程序退出。

在正常的情况下,如果running和ready文件夹中都是有内容的,且都不在写入的状态,则它们是一样的,因为ready文件夹是running文件夹的最后一次备份。如果它们之间的一致性遭到破坏,则无法判断其中哪个是正确的,此时更新程序退出。

索引更新

当需要索引更新时需要做,检查两个文件夹所处的状态,具体描述如下:

running文件夹没有任何的读取和写入操作。

ready文件夹可能正在被读取,但是没有写入操作。

判断规则:

对于ready文件夹:

1)只能有一个写,从running文件夹写,也就是从running文件夹拷贝索引到ready目录下;

2)可以多个读,其中包括:索引更新模块的读或者running错误恢复的读;

对于running文件夹:

1)只有一个读,从ready文件夹的读;

2)两种可能的写:一个是正常建索引的写,另一个是错误恢复的写,从ready文件夹的写。

下文将对索引的更新进行具体描述。在此之前,先介绍一下索引更新流程中拷贝索引用到的复制文件夹流程。

<复制文件夹流程>

拷贝索引用到复制文件夹流程,即复制源(source)文件夹中的所有内容到目标(target)文件夹。

如图4所示,复制文件夹流程至少包括:

s401~s403.在target文件夹生成清空(clear)锁,清理target文件夹,删除clear锁;

s404、s405.在source文件夹生成读(read)锁,target文件夹生成写(write)锁;

s406.复制source文件夹中除锁文件之外的所有文件到target文件夹;

s407、s408.删除source文件夹中的读锁及target中的write锁。

<索引更新流程>

如图5所示,索引更新流程如下:

s501.检查ready文件夹和running文件夹是否正常,不正常则更新失败,正常则转s502;

s502.running文件夹是为空且ready文件夹非空,如果否,则转s505,若是,则转s503;

s503.复制到ready文件夹到running文件夹,即恢复最新的索引;其中,复制流程如上所述,在此不再重复。

s504.复制成功则进入s505,否则更新失败;

s505、s506.判断ready和running的一致性,一致则转s507,否则更新失败;

s507、s508.在running文件夹下建立写锁,进行索引更新操作。

在所述索引更新流程中,检查ready文件夹是否正常,即判断ready文件夹规则为文件夹ready可能正在被读取,但是没有写入操作,流程如图6所示,如下:

s601.判断ready文件夹是写入或清理状态,若是,则将索引在从running文件夹到ready文件夹的复制过程中中断,转s602,否则返回检查成功;

s602.判断running是写入或为空状态,若是,则返回检查失败,否则转s603;

s603~s607.清空ready文件夹,将running文件夹的内容拷贝到ready文件夹,若整个过程成功,则返回检查成功,否则检查失败。

在索引更新流程中,检查running文件夹是否正常的检查规则:文件夹running没有任何的读取和写入操作,流程如图7所示,如下:

s700.判断running是否正在写入或清空,若是,则将建索引的过程中断,转s711,否则转s721;

s711、s712.清空running文件夹,清理成功则返回检查成功,失败则返回检查失败;

s721.判断running是否在读取,若否,则返回检查成功,若是,则转s722;

s722、s723.索引在从running文件夹到ready文件夹的复制过程中中断,删除读锁,删除成功则检查成功,否则返回检查失败。

索引备份

可选地,实施方式还包括索引备份过程,即当索引更新后将索引备份到backup文件夹。例如,如图8所示,索引备份过程可以包括:

s801.ready文件夹是否正在写入,若是,则不能备份,否则转s802;

s802.判断备份文件夹的个数是否超过阈值,超过则转s803,否则转s804;

s803.清理最老的备份,然后转s804;

s804.将ready文件夹复制到backup文件夹;其中,文件夹的复制流程如上结合图4所述,在此不再重复。

搜索器索引更新

搜索器索引更新流程是指定时将搜索器读取的索引从ready文件夹获取最新的进行置换的过程,假设一个搜索器有a和b两个索引文件互为备份使用,其更新过程如图9所示,总体而言,判断当前运行的索引是否是最新的,不是则将ready下的索引拷贝到backup文件夹并将备份索引切换为搜索器索引;当都未使用时则将两个索引文件都置换为最新的即可。

【更新频繁模型】

该模型主要针对索引更新频繁的场景,在索引更新频繁的情形下,如果采用前一种模型会造成频繁拷贝索引,影响效率。本模型采用两个索引目录都可以读写的方式,同时只有一个文件夹写一个文件夹读的方式。

假设a和b两个索引目录,当a为当前搜索器使用目录,则将上次及本次的更新列表(list)写入到目录b,然后将搜索目录切换到b去更新写入索引a,这样一个反复的过程,具体流程如图10所。其中,索引目录有效性检查流程如图11所示,如下:

s1101.判断待写入索引目录是否损坏,若否,则验证成功即转s1104,若是,则转s1102;

s1102、s1103.清空待写入索引目录,同时将正在使用索引目录复制到待更新索引目录;

s1104~s1106.更新索引目录,再次检查索引是否完整,完整则提示更新成功,否则判断是否超过更新次数,超过返回更新失败,否则转s1102。

综上所述,根据本实施方式,设计两种搜索引擎索引控制更新模型,解决不同场景下的文件更新控制问题,当然也可以扩展为文件夹更新的应用场景。

在文件共享场景下文件读写会造成临时文件的产生,积累久了会占用大量的磁盘空间,同时会占用大量的文件句柄不能释放,由此,本发明各实施方式旨在通过设计的索引更新方法能解决索引的读写分离问题,避免出现大量的.nfs临时文件,减少磁盘空间的占用,并且,不会在内存中占用大量的文件句柄不释放,由此避免系统因文件句柄过多而停止文件读写服务。本发明提供的方案不仅限于搜索引擎索引文件的控制场景,可以应用到任何文件更新需要读写分离的场景。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件结合硬件平台的方式来实现。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

本领技术人员应当理解,以上所公开的仅为本发明的实施方式而已,当然不能以此来限定本发明之权利范围,依本发明实施方式所作的等同变化,仍属本发明权利要求所涵盖的范围。

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