一种基于日志合并的分布式文件系统索引方法和装置与流程

文档序号:16248415发布日期:2018-12-11 23:47阅读:196来源:国知局
一种基于日志合并的分布式文件系统索引方法和装置与流程

本发明属于文件存储与处理技术领域,尤其涉及一种基于日志合并的分布式文件系统索引方法和装置。

背景技术

随着互联网、云计算、大数据、人工智能的快速发展,据互联网数据中心(idc)市场调研机构预计,全球数据总量将会以每年50%左右的速度增长,到2020年,全球数据总量将达到40zb(1zb=10亿tb)。在这些数据中,只有约15%的数据会被经常访问,绝大部分数据都会在产生之后逐渐变冷。虽然这些“冷数据”的访问率很低,但还是需要保留这些数据,且对于企业而言,还有大量数据需要存储及检索。

日志文件系统(journalingfilesystem)是一个具有故障恢复能力的文件系统,其利用日志来记录尚未提交到文件系统的修改,以防止元数据被破坏。相对于非日志文件系统,大大提高了文件系统的稳定性,在系统崩溃或断电时增加了可靠性,缩短了恢复时间,保证了文件操作的原子性。

目前,对文件建立检索的方式主要分为在客户端和服务端建立索引,在客户端建立索引需要考虑各种客户端的类型,兼容性较差。在服务端建立索引主要有以下几种方法:

通过监听文件系统挂载文件夹的操作,来建立对应索引;

通过遍历指定挂载文件夹下的文件,来建立文件索引;

上述技术方法存在的问题是,在第一种方法中,有些操作无法监听到,如移动操作(mv),所以此种方法会遗漏一些文件的索引。第二种方法需要遍历文件夹下的所有子文件夹和文件,无法进行增量构建,且当文件数量很大时,遍历过程耗时很长,效率较低。

此外,日志文件系统的日志中记录了与文件相关的每一个操作,如果基于没有日志合并功能的文件系统去构建索引,则需要解析每一个操作,也会导致索引建立效率较低。



技术实现要素:

本发明的目的在于提供一种基于日志合并的分布式文件系统索引方法和装置,以解决索引遗漏,客户端兼容性差、无法增量构建文件索引以及构建耗时长,效率较低的问题。

为实现上述目的,本发明所采用的技术方案为:

一种基于日志合并的分布式文件系统索引方法,所述基于日志合并的分布式文件系统索引方法,包括:

步骤一、在文件操作发生时,记录文件操作信息,并写入日志,所述文件操作信息包括文件操作的类型和文件操作的发生时间,并且在文件操作的类型为移动操作时,在记录完文件操作信息并写入日志后,立即构建文件操作元数据信息;

步骤二、在满足触发条件下,执行日志合并操作;

步骤三、针对日志合并操作中被修改过的文件,当发生的文件操作的类型为创建/删除操作时,构建文件操作元数据信息,并写入信息存储单元;当发生的文件操作的类型为移动操作时,将已经构建的文件操作元数据信息写入信息存储单元;

步骤四、读取信息存储单元中的文件操作元数据信息;

步骤五、对读取到的文件操作元数据信息进行解析,根据解析后所得的文件操作的类型,执行相应的文件索引操作;

步骤六、待所有文件索引操作执行完成后,删除信息存储单元中的已处理对象。

进一步地,所述记录文件操作信息,包括:

通过在被操作的文件的目录项结构中增加字段分别记录文件操作的类型、文件操作的发生时间以及删除操作时被删除文件的索引节点;

通过在被操作的文件的目录结构中增加字段记录被删除文件的名称。

进一步地,所述在满足触发条件下,执行日志合并操作,包括:

当日志的数量超过设定阈值或收到日志合并命令时,以文件的目录为单位进行日志合并操作。

进一步地,所述构建文件操作元数据信息,包括:

当文件操作的类型为创建操作时,获取所述文件操作的类型、文件操作的发生时间、文件名、文件大小、文件路径、文件修改时间、是否需要删除同路径文件索引以及是否为文件,并构建操作消息字符串;

当文件操作的类型为删除操作时,获取所述文件操作的类型、文件操作的发生时间、文件路径以及是否为文件,并构建操作消息字符串;

当文件操作的类型为移动操作时,获取所述文件操作的源路径、目的路径、文件大小、文件名、文件修改时间以及是否为文件,并构建操作消息字符串。

进一步地,所述对读取到的文件操作元数据信息进行解析,根据解析后所得的文件操作的类型,执行相应的文件索引操作,包括:

当文件操作的类型为创建操作时,先判断是否需要删除同路径文件索引,如果需要删除,则先删除索引集中路径相同的文件索引,反之则无操作;然后再判断是否为文件,如果是文件,则构建并执行文件索引创建操作,如果不是文件,则结束;

当文件操作的类型为删除操作时,先判断删除对象是否为文件,如果是文件,则构建并执行删除文件索引操作;如果是文件夹,则构建并执行该文件夹下的文件索引删除操作;

当文件操作的类型为移动操作时,先判断移动对象是否为文件,如果是文件,则先构建并执行源路径下文件索引删除操作,然后构建并执行目的路径下文件索引创建操作;如果是文件夹,则先检索出此文件夹路径下的文件索引,取出源文件索引中文件路径、修改时间、文件大小、文件名的值,然后将文件路径由源路径更新为目的路径,文件名、修改时间和文件大小不变,构建并执行目的路径下文件索引创建操作,然后构建并执行源路径下文件索引删除操作。

本发明还提供一种基于日志合并的分布式文件系统索引装置,所述基于日志合并的分布式文件系统索引装置,包括更新构建写入单元模块、信息存储单元模块以及解析构建执行单元模块,其中:

所述更新构建写入单元模块,用于在文件操作发生时,记录文件操作信息,并写入日志,所述文件操作信息包括文件操作的类型和文件操作的发生时间,并且在文件操作的类型为移动操作时,在记录完文件操作信息并写入日志后,立即构建文件操作元数据信息;并且在满足触发条件下,执行日志合并操作;针对日志合并操作中被修改过的文件,当发生的文件操作的类型为创建/删除操作时,构建文件操作元数据信息,并写入信息存储单元模块;当发生的文件操作的类型为移动操作时,将已经构建的文件操作元数据信息写入信息存储单元模块;

所述信息存储单元模块,用于存储更新构建写入单元模块中所构建的文件操作元数据信息;

所述解析构建执行单元模块,用于读取信息存储单元模块中的文件操作元数据信息;对读取到的文件操作元数据信息进行解析,根据解析后所得的文件操作的类型,执行相应的文件索引操作;待所有文件索引操作执行完成后,删除信息存储单元模块中的已处理对象。

进一步地,所述在文件操作发生时,记录文件操作信息,执行如下操作:

更新构建写入单元模块通过在被操作的文件的目录项结构中增加字段记录文件操作的类型、文件操作的发生时间以及删除操作时被删除文件的索引节点;通过在被操作的文件的目录结构中增加字段记录被操作文件的名称。

进一步地,所述在满足触发条件下,执行日志合并操作,执行的具体操作如下:

当日志的数量超过设定阈值/收到日志合并命令时,更新构建写入单元模块以文件的目录为单位进行日志合并操作。

进一步地,所述构建文件操作元数据信息,执行如下操作:

当文件操作的类型为创建操作时,更新构建写入单元模块获取所述文件操作的类型、文件操作的发生时间、文件名、文件大小、文件路径、文件修改时间、是否需要删除同路径文件索引以及是否为文件,并构建操作消息字符串;

当文件操作的类型为删除操作时,更新构建写入单元模块获取所述文件操作的类型、文件操作的发生时间、文件路径以及是否为文件,并构建操作消息字符串;

当文件操作的类型为移动操作时,更新构建写入单元模块获取所述文件操作的源路径、目的路径、文件大小、文件名、文件修改时间以及是否为文件,并构建操作消息字符串。

进一步地,所述对读取到的文件操作元数据信息进行解析,根据解析后所得的文件操作的类型,执行相应的文件索引操作,执行如下操作:

当文件操作的类型为创建操作时,解析构建执行单元模块先判断是否需要删除同路径文件索引,如果需要删除,则先删除索引集中路径相同的文件索引,反之则无操作;然后再判断是否为文件,如果是文件,则构建并执行文件索引创建操作,如果不是文件,则返回;

当文件操作的类型为删除操作时,解析构建执行单元模块先判断删除对象是否为文件,如果是文件,则构建并执行删除文件索引操作;如果是文件夹,则构建并执行该文件夹下的文件索引操删除作。

当文件操作的类型为移动操作时,解析构建执行单元模块先判断移动对象是否为文件,如果是文件,则先构建并执行源路径下文件索引删除操作,然后构建并执行目的路径下文件索引创建操作;如果是文件夹,则先检索出此文件夹路径下的文件索引,取出源文件索引中文件路径、修改时间、文件大小、文件名的值,然后将文件路径由源路径更新为目的路径,文件名、修改时间和文件大小不变,构建并执行目的路径下文件索引创建操作,然后构建并执行源路径下文件索引删除操作。

本发明提供的一种基于日志合并的分布式文件系统索引建立方法和装置,通过分布式文件系统的元数据服务器,在日志合并时,构建文件操作元数据信息并写入存储单元,然后读取并解析存储单元中的操作元数据信息,最后执行文件索引操作,建立对应索引,删除已处理对象。本发明通过在元数据服务器获取操作信息,可以避免文件操作的丢失,同时无需考虑客户端的类型,解决了索引遗漏,客户端兼容性差的问题。另外,通过日志合并,增量获取一段时间内的文件操作信息,减少了索引构建次数,解决了无法增量构建文件索引,构建耗时长,效率低的问题。本发明可以解决索引遗漏,客户端兼容性差、无法增量构建文件索引以及构建耗时长,效率较低的问题。

附图说明

图1为本发明基于日志合并的分布式文件系统索引方法的一种实施例流程框图;

图2为本发明基于日志合并的分布式文件系统索引方法的一种实施例的创建操作时文件操作信息记录流程框图;

图3为本发明基于日志合并的分布式文件系统索引方法的一种实施例的删除操作时文件操作信息记录流程框图;

图4为本发明基于日志合并的分布式文件系统索引方法的一种实施例的移动操作时文件操作信息记录流程框图;

图5为本发明基于日志合并的分布式文件系统索引方法的一种实施例的创建操作时文件操作元数据信息构建流程框图;

图6为本发明基于日志合并的分布式文件系统索引方法的一种实施例的删除操作时文件操作元数据信息构建流程框图;

图7为本发明基于日志合并的分布式文件系统索引方法的一种实施例的移动操作时文件操作元数据信息构建流程框图;

图8为本发明基于日志合并的分布式文件系统索引方法的一种实施例的创建操作时执行的文件索引操作流程框图;

图9为本发明基于日志合并的分布式文件系统索引方法的一种实施例的删除操作时执行的文件索引操作流程框图;

图10为本发明基于日志合并的分布式文件系统索引方法的一种实施例的移动操作时执行的文件索引操作流程框图;

图11为本发明基于日志合并的分布式文件系统索引装置的一种实施例结构示意图;

图12为本发明基于日志合并的分布式文件系统索引装置的更新构建写入单元模块的一种实施例功能示意图。

具体实施方式

下面结合附图和实施例对本发明技术方案做进一步详细说明,以下实施例不构成对本发明的限定。

本实施例提供一种基于日志合并的分布式文件系统索引方法,如图1所示,该基于日志合并的分布式文件系统索引方法,包括:

s101、在文件操作发生时,记录文件操作信息,并写入日志,所述文件操作信息包括文件操作的类型和文件操作的发生时间,并且在文件操作的类型为移动操作时,在记录完文件操作信息并写入日志后,立即创建文件操作元数据信息。

本实施例中的所有操作对象如无特殊说明,均可为文件或文件夹,如:“文件操作”并非特指针对文件的操作,亦可是文件夹的操作。且文件操作的类型包括:创建操作、删除操作以及移动操作,其中,创建操作中包含创建和修改操作,移动操作中包含移动和重命名操作。

所述记录文件操作信息,主要通过在被操作的文件的目录项(dentry)结构中增加operation、etime和preinode字段分别记录文件操作的类型、文件操作的发生时间以及删除操作时被删除文件的索引节点;通过在被操作的文件的目录(dir)结构中增加deleted_files字段来记录被删除文件的名称。

具体地,如图2所示,当发生的文件操作的类型为创建操作时,记录文件操作信息,包括:在创建对象的目录项结构中增加operation和etime字段,并将operation字段更新为create(创建),将etime字段更新为当前时间,结束。

如图3所示,当发生的文件操作的类型为删除操作时,记录文件操作信息的操作,包括:在删除对象的目录项结构中增加operation、etime和preinode字段,并将operation字段更新为unlink(删除),将etime字段更新为当前时间;后判断删除对象是否为文件,若为文件,则将目录项结构中的preinode字段更新为0;若为文件夹,则将目录项结构中的preinode字段更新为被删除文件的索引节点(inode),并在删除对象的目录结构中增加deleted_files字段记录删除对象的名称,结束。

如图4所示,当发生的文件操作的类型为移动操作时,需要分别在源目录项(srcdentry)和目的目录项(destdentry)中记录文件操作信息,记录文件操作信息,包括:先在移动对象的源目录项结构中增加operation、etime和preinode字段,并将operation字段更新为move(移动),将etime字段更新为当前时间,将preinode字段更新为源索引节点;后在移动对象的目的目录项结构中增加operation和etime字段,并将operation字段更新为move(移动),将etime字段更新为当前时间,结束。

移动操作在记录完文件操作信息后,立即创建文件操作元数据信息,其构建内容包括以下信息:文件操作的源路径、目的路径、文件大小、文件名、文件修改时间以及是否为文件。

具体地,如图7所示,移动操作时,构建文件操作元数据信息,包括:先获取移动对象的源路径,后根据源路径获取目的对象索引节点,通过目的对象索引节点获取目的路径,根据目的路径中的对象的目录项获取文件大小、文件名、文件修改时间以及是否为文件,根据获取的信息构建移动操作消息字符串,并通过在文件系统缓存中增加index_move结构,将构建的移动操作消息字符串记录到index_move结构中待用,结束。

由于文件操作信息是通过在目录和目录项结构中增加字段来记录的,本实施例记录文件操作信息是记录到缓存中,而分布式文件系统本身会记录系统日志,所以这些信息也会跟随文件操作事件一起写入日志。分布式文件系统的元数据服务器在重启之后会通过回放日志内容来建立缓存,在回放日志时,记录在文件目录项中的操作元数据信息也会加载到缓存中,不会遗漏或丢失文件操作信息,保证了文件索引的完整性。

s102、在满足触发条件下,执行日志合并操作。

日志合并,主要是通过元数据服务器(metadataserver,mds)将某一时段内的所有操作进行合并,并且将文件信息持久化存储,同时删除记录操作事件的日志。当日志合并操作开始时,mds首先会读取缓存中的脏(dirty)数据,并且将相关的目录加入列表。接着,遍历此列表,将脏的文件(或文件夹)以目录为单位进行持久化存储。最后删除与此段时间相对应的日志。

通过日志合并,可以增量获取一段时间内的文件操作信息,减少了索引构建次数,有效解决了无法增量构建文件索引,构建耗时长,效率低的问题。日志合并操作是指将从上次日志合并到本次日志合并,这段时间内的日志进行合并。日志合并操作的触发条件可分为自动触发和手动触发,自动触发即为当日志的数量超过设定阈值时,元数据服务器(metadataserver,mds)会自动执行日志合并操作;手动触发即为收到文件操作日志合并命令时,元数据服务器执行日志合并操作。本实施例中的日志合并操作是以文件的目录为单位进行日志合并操作的。

在进行日志合并操作时,先遍历缓存中脏的目录分片(dirfrag)、目录项、索引节点等结构,并分别记录与其相关的目录(dir);然后,遍历记录的目录,得到目录中记录的最近被修改过的文件的名称,后续将会对这些被修改过的文件构建文件操作元数据信息。

元数据服务器通过判断与文件目录项相链接的索引节点状态,来确定此文件是删除还是创建,例如,若与目录项相链接的索引节点为空,则为删除操作,否则为创建操作。

s103、针对日志合并操作中被修改过的文件,当发生的文件操作的类型为创建/删除操作时,构建文件操作元数据信息,并写入信息存储单元;当发生的文件操作的类型为移动操作时,将已经构建的文件操作元数据信息写入信息存储单元。

上述被修改过的文件指的是被创建/删除/移动操作过的文件,在日志合并操作时,由于日志中记录了这些被修改过的文件,故可以获取日志合并操作中被修改过的文件的目录,构建文件操作元数据信息。

本实施例中每个文件操作元数据信息在构建完成之后,先存入缓存中,等所有文件操作元数据信息都完成构建之后,再统一写入信息存储单元。

当文件操作的类型为创建操作时,获取所述文件操作的类型、文件操作的发生时间、文件名、文件大小、文件路径、文件修改时间、是否需要删除同路径文件索引以及是否为文件,并构建操作消息字符串。

具体地,如图5所示,在创建操作时,构建文件操作元数据信息,包括:先获取创建文件或文件夹的目录项,通过目录项获取文件或文件夹的索引节点,通过索引节点获取文件操作的类型、文件修改时间、文件大小、是否为文件;后判断文件操作的类型是否为创建操作,若是创建操作,则通过目录项获取文件操作的发生时间、文件名、文件路径、是否需要删除同路径文件索引,后在目录结构中的deleted_files字段中判断是否包含创建对象的名称,若包含则标记删除同路径文件索引标志为true;若不包含则标记删除同路文件索引标志为false,最后根据获取的信息构建创建操作消息字符串,并通过在文件系统缓存中增加index_create结构,将构建的创建操作消息字符串记录到index_create结构中待用,结束;若不是创建操作,则直接结束。

当文件操作的类型为删除操作时,获取所述文件操作的类型、文件操作的发生时间、文件路径以及是否为文件,并构建操作消息字符串。

具体地,如图6所示,在删除操作时,构建文件操作元数据信息,包括:先获取删除对象的目录项,根据目录项获取文件操作的类型,判断文件操作的类型是否为删除操作,若为删除操作,则根据目录项获取删除对象的文件路径、文件操作的发生时间以及是否为文件,根据获取的信息构建删除操作消息字符串,并通过在文件系统缓存中增加index_unlink结构,将构建的删除操作消息字符串记录到index_unlink结构中待用,结束;若不是删除操作,则直接结束。

在所有的文件操作元数据信息构建完成后,将文件系统缓存中的index_move结构、index_create结构和index_unlink结构中的文件操作元数据信息写入信息存储单元。由于日志合并操作是以目录为单位进行合并的,所以在将文件操作元数据信息写入信息存储单元时,也是以目录为单位写入的,将每个目录下的文件操作元数据信息,写入一个对象,完成写入之后,将所有记录文件操作元数据信息的index_move结构、index_create结构和index_unlink结构清空。

s104、读取信息存储单元中的文件操作元数据信息。

读取信息存储单元中的索引数据池中所有对象的内容,并且按文件操作元数据信息中文件操作的发生时间进行排序。具体地,定时查询信息存储单元中是否有对象,如果有对象,则读取所有对象的内容,完成所有对象的内容读取之后,先将其转换成易读格式,然后按文件操作元数据信息中文件操作的发生时间事件排序。

s105、对读取到的文件操作元数据信息进行解析,根据解析后所得的文件操作的类型,执行相应的文件索引操作。

具体地,如图8所示,当文件操作的类型为创建操作时,执行相应的文件索引操作,包括:先判断是否需要删除同路径文件索引,如果需要删除,则先删除索引集中的路径相同的文件索引,反之则无操作;然后再判断是否为文件,如果是文件,则构建并执行文件索引创建操作,如果不是文件,则结束。

如图9所示,当文件操作的类型为删除操作时,执行相应的文件索引操作,包括:先判断删除对象是否为文件,如果是文件,则构建并执行删除文件索引操作;如果是文件夹,则构建并执行该文件夹下的文件索引删除操作。

如图10所示,当文件操作的类型为移动操作时,执行相应的文件索引操作,包括:先判断移动对象是否为文件,如果是文件,则先构建并执行源路径下文件索引删除操作,然后构建并执行目的路径下文件索引创建操作,结束;如果是文件夹,则先检索出此文件夹路径下的文件索引,取出源文件索引中文件路径、修改时间、文件大小、文件名的值,然后将文件路径由源路径更新为目的路径,文件名、修改时间和文件大小不变,构建并执行目的路径下文件索引创建操作,然后构建并执行源路径下文件索引删除操作,结束。

本实施例中,s104步骤中换成的易读格式与s105步骤中对数据格式的解析对应,且均采用现有技术,在此不再进行赘述。

s106、待所有文件索引操作执行完成后,删除信息存储单元中的已处理对象。

本实施例还包括一种基于日志合并的分布式文件系统索引装置,所述分布式文件系统由多台性能好、容量大的存储阵列组成,如监控器、元数据服务器、存储单元等。客户端通过网络与分布式文件系统连接,向分布式文件系统发送文件操作请求,元数据服务器接收到请求后,执行文件操作的具体实现,最后返回操作结果给客户端。

如图11所示,所述基于日志合并的分布式文件系统索引装置10,包括更新构建写入单元模块11、信息存储单元模块12以及解析构建执行单元模块13,其中:

结合图12对所述更新构建写入单元模块11进一步详述:更新构建写入单元模块11用于在文件操作发生时,记录文件操作信息,并写入日志,所述文件操作信息包括文件操作的类型和文件操作的发生时间,并且在文件操作的类型为移动操作时,在记录完文件操作信息并写入日志后,立即构建文件操作元数据信息;

并且在满足触发条件下,执行日志合并操作;针对日志合并操作中被修改过的文件,当发生的文件操作的类型为创建/删除操作时,构建文件操作元数据信息,并写入信息存储单元模块12;当发生的文件操作的类型为移动操作时,将已经构建的文件操作元数据信息写入信息存储单元模块12;

所述信息存储单元模块12,用于存储更新构建写入单元模块11中所构建的文件操作元数据信息;

所述解析构建执行单元模块13,用于读取信息存储单元模块12中的文件操作元数据信息;对读取到的文件操作元数据信息进行解析,根据解析后所得的文件操作的类型,执行相应的文件索引操作;待所有文件索引操作执行完成后,删除信息存储单元模块12中的已处理对象。

本实施例的基于日志合并的分布式文件系统索引装置与上述基于日志合并的分布式文件系统索引方法对应,关于各步骤的具体操作内容在此不再进行一一赘述。

需要说明的是,本发明的一种实现方式,更新构建写入单元模块11设置在分布式文件系统的元数据服务器中;信息存储单元模块12是一个独立的具有信息存储功能的装置;解析构建执行单元模块13是一个独立的装置,存放在分布式文件系统的任意一台存储阵列上。或者,可以通过其它的方式实现。例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得计算机处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上实施例仅用以说明本发明的技术方案而非对其进行限制,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

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