文件系统中有效文件内容搜索的系统和方法

文档序号:6655610阅读:193来源:国知局
专利名称:文件系统中有效文件内容搜索的系统和方法
技术领域
本发明涉及计算机系统,尤其涉及存储系统。
背景技术
计算机系统经常处理大量信息,包括应用数据和用来处理这些数据的可执行代码。在很多实施方式中,计算机系统提供了用来存储数据的各种类型的大容量存储设备,比如,磁盘和光盘驱动器、磁带驱动器等。为了提供可以访问所存储数据的正规和系统的接口,常常通过软件(如操作系统)将这些存储设备编排成文件的分层结构。通常,一个文件规定了用户在存储设备内能操作的最小数据粒度,尽管各种应用和操作系统过程可以以比整个文件更低的粒度对文件中的数据进行操作。
在许多常规的基于文件的计算机系统中,所感兴趣的数据可能分布在位于存储系统的完全不同的逻辑和物理区域中的许多文件中。不同的计算平台通常提供了各种类型的搜索应用,用户通过这些搜索应用可以判断哪些文件含有特定数据模式(比如文本串)。例如,代码开发者可以利用这种搜索应用来识别大规模复杂的代码库(codebase)中哪些文件含有特定修订串,从而可以选择这些文件进行操作。
然而,典型的搜索应用需要读取文件的全部内容才能判断该文件中是否有给定数据模式,尽管在大多数情况下,给定数据模式包括整个文件内容的一小部分(如果给定文件中确实有给定数据模式的话)。此外,许多典型的搜索应用没有历史记录,因此,如果重复搜索给定文件中的给定数据模式,那么在搜索过程中可能要再检查文件的全部内容。这种冗余的文件访问会大大降低经常执行文件内容搜索的系统的性能。

发明内容
本文公开了文件系统中用于有效文件内容搜索的系统和方法的各种实施方式。在一种实施方式中,该系统可以包括用来存储数据的存储设备和用来管理对存储设备的访问的文件系统。该文件系统可以用来检测搜索操作以判断存储设备中所存储的第一文件中给定数据模式的存在性,并将给定数据模式的标记和搜索操作的结果数据的标记存储在与第一文件有关的第一记录中。
在该系统的一种具体实施方式
中,在检测到搜索操作后,文件系统还可以用来扫描第一记录以判断其中是否存储有给定数据模式的标记,并且如果判定其中存储有标记,则只访问第一文件的一部分。
在该系统的另一种具体实施方式
中,如果第一文件中没有给定数据模式,那么文件系统还可以用来将给定数据模式的标记存储在第一记录中。另一方面,如果第一文件中有给定数据模式,那么文件系统还可以用来将给定数据模式的标记和模式位置信息存储在第二记录中。
此外,还设想了一种方法,在一种实施方式中,该方法包括存储多个文件、检测搜索操作以判断第一文件中给定数据模式的存在性,和将给定数据模式的标记和搜索操作的结果数据的标记存储在与第一文件有关的第一记录中。


图1是说明存储系统的一种实施方式的框图。
图2是说明操作系统体系结构及其与存储设备的接口的一种实施方式的框图。
图3是说明用来检测对文件的搜索操作和存储相应记录的文件系统的一种实施方式的框图。
图4是说明检测对文件的搜索操作和存储相应记录的方法的一种图5是说明保持与搜索操作相应的所存储记录的参照完整性的方法的一种实施方式的流程图。
尽管本发明可以有各种修改和可选择形式,不过,这里利用附图中的例子来说明其特定实施方式,并将详述这些实施方式。然而,应当理解,这些附图及其详细描述并不是要将本发明局限于所公开的特殊形式,相反,在附属权利要求书所规定的本发明思想和范围内,本发明可以涉及所有修改方式、等价方式和可选方式。
具体实施例方式
存储系统和文件系统综述下面,回到图1,图中示出了存储系统的一种实施方式的框图。在举例实施方式中,存储系统10包括多个主设备20a和20b,这些主设备通过系统互连40与多个存储设备30a和30b连接。此外,在举例实施方式中,主设备20b包括系统存储器25。为了便于说明,这里用跟有字母的标号所表示的单元可以统一用单独标号来表示。例如,主机设备20a和20b以及存储设备30a和30b可以统一用主设备20和存储设备30来表示。
在存储系统10的各种实施方式中,主设备20可以用来存取一个或多个存储设备30上所存储的数据。在一种实施方式中,存储系统10可以在单一计算机系统内实现,比如实现为一个综合存储服务器。在这种实施方式中,例如,主设备20可以是单独处理器,系统存储器25可以是高速缓冲存储器(比如静态RAM(SRAM)),存储设备30可以是大容量存储设备(比如硬盘驱动器或者其他可写或可重写媒介),而系统互连40可以包括外围总线互连(比如外设部件接口(PCI)总线)。在某些这样的实施方式中,系统互连40可以包括主设备20与存储设备30之间的若干种互连。例如,系统互连40可以包括一条或多条用来与主设备20连接的处理器总线(未示出);一个或多个用来使处理器总线与一条或多条外围总线连接的总线桥(未示出);和一个或多个用来使外围总线与存储设备30连接的存储设备接口(未示出)。存储设备接口类型在不同的实施方式中可以包括例如小型计算机系统接口(SCSI)、AT附属包接口(ATAPI)、法尔(Firewire)总线和/或通用串行总线(USB),尽管许多包括其他接口类型的其他实施方式也是可行和可预期的。
按照在单一计算机系统内实现的存储系统10的一种实施方式,存储系统10可以用来为一个或多个其他计算机系统(未示出)提供大多数数据存储需要,并可以用来与这些其他计算机系统通信。在另一种实施方式中,存储系统10可以例如配置成分布式存储系统(比如存储区域网络(SAN))。在这种实施方式中,主设备20可以例如是单独计算机系统(比如服务器系统),系统存储器25可以由一种或多种动态RAM(DRAM)构成,存储设备30可以是独立存储节点(每个节点都包括一个或多个硬盘驱动器或其他类型的存储器),而系统互连40可以是通信网络(比如以太网或光纤信道)。存储系统10的分布式存储配置可以有利于定标存储系统容量以及主机与存储设备之间的数据带宽。
在又一种实施方式中,存储系统10可以例如配置成混合存储系统,其中,一些存储设备30集成在与一些主设备20相同的计算机系统中,而其他存储设备30配置成通过网络与其他主设备20连接的独立设备。在这种混合存储系统中,系统互连40可以包括多种互连机制(比如上述外围总线和网络互连)。
应当注意,尽管图1中示出了两个主设备20和两个存储设备30,然而,在其他实施方式中,可以设想存储系统10可以有任意多个每种这些类型的设备。此外,在存储系统10的某些实施方式中,可以例如在其他主设备20或存储设备30中使用一个以上的系统存储器25。再者,在某些实施方式中,给定系统存储器25可以置于主设备20和存储设备30之外,并且可以与给定主设备20或存储设备30直接连接或者通过系统互连40间接连接。
在存储系统10的许多实施方式中,一个或多个主设备20可以用来执行程序指令和用来存取数据,从而完成计算功能。在某些实施方式中,系统存储器25可以是用来存储这些程序指令和数据的计算机可存取媒介的一种实施方式。然而,在其他实施方式中,可以根据计算机可存取媒介的不同类型来接收、发送或存储程序指令和/或数据。一般而言,计算机可存取媒介可以包括诸如磁或光媒介的存储媒介或存储器媒介,例如,作为存储设备30包含在存储系统10中的磁盘或CD-ROM。计算机可存取媒介还可以包括易失性或非易失性媒介,比如RAM(如SDRAM、DDR SDRAM、RDRAM、SRAM等)、ROM等,这些媒介可以作为系统存储器25包含在存储系统10的某些实施方式中。再者,计算机可存取媒介可以包括通过通信媒介(比如网络和/或无线链路)传送的信号(比如电、电磁或数字信号)的传输媒介,这些通信媒介可以作为系统互连40包含有在存储系统10的某些实施方式中。
在某些实施方式中,上述计算机可存取媒介中所存储的程序指令和数据可以实现操作系统,而操作系统反过来又提供了各种应用程序的运行环境。例如,给定主设备20可以用来运行一种MicrosoftWindows操作系统、Unix操作系统、Apple操作系统或其他合适的操作系统。另外,给定主设备可以用来执行应用程序,比如字处理器、web浏览器和/或服务器、电子邮件客户机和/或服务器和多媒体应用以及许多其他可能的应用。
在给定主设备20上的运行期间,操作系统或给定应用可以产生数据要由给定存储设备30装载或存储到给定存储设备30中的请求。例如,与操作系统或其本身应用的部分相应的代码可以存储在给定存储设备30上,因此,如果调用所需操作系统例程或应用程序,则可以检索所执行的相应代码。同样,操作系统或应用运行可能产生所要存储的数据。
许多操作系统实施方式提供了数据和控制结构,用于将存储设备30所提供的存储空间编排成文件。在不同的实施方式中,数据结构可以包括一个或多个表,用来存储诸如每一文件的身份、它在存储设备30中的位置(比如变换到特定存储设备内的特定物理位置)的信息以及关于如下详述的每一文件的其他信息。此外,在不同的实施方式中,控制结构可以包括用于操作文件的可执行例程,比如,如下所详述的用于改变文件身份和用于修改文件内容的功能调用。这些数据和控制结构在此可以统称为文件系统,而给定文件系统所执行的特定数据格式和协议在此可以统称为文件系统的格式。
在某些实施方式中,文件系统可以集成到操作系统中,这样,对存储设备30中所存储的数据的任何访问由文件系统的控制和数据结构来管理。不同的操作系统可以利用不同的格式执行不同的本机文件系统,但在某些实施方式中,给定操作系统可以包括支持多个不同类型的文件系统格式(包括属于其他操作系统的文件系统格式)的文件系统。在这样一些实施方式中,文件系统所支持的不同文件系统格式在此可以称为本地文件系统。另外,在某些实施方式中,文件系统可以利用分层结构中所安排的多层功能性来实现,如图2中所示。
图2示出了操作系统体系结构及其与存储设备的接口的一种实施方式。在举例实施方式中,操作系统200包括用户空间210和内核空间220。用户空间210包括多个进程(process)212A-C,其中每一进程都可以对应于给定用户应用。在某些实施方式中,用户空间210内的一些应用进程212可以不同于操作系统200。这些进程可以被认为是在操作系统200所提供的环境中进行操作,或者是在操作系统200“之上”进行操作。每一进程212都可以通过调用应用编码接口(API)214来访问存储设备230A-C。API 214为进程212提供用于在内核空间220内进行操作的文件系统205的入口。在一种实施方式中,存储设备230可以代表图1中的存储设备230。此外,在一种实施方式中,操作系统200、其任一部件和/或任一进程212可以用来在图1的一个或多个主设备20上执行例如在计算机可存取媒介(比如图1中的系统存储器25)中所存储的程序指令和数据。
如上关于图1的存储系统10所述,给定主机设备20可以位于与给定存储设备30不同的计算机系统中,并可以通过网络访问该存储设备。同样,关于操作系统200,在一种实施方式中,给定进程(比如进程212A)可以通过网络远程执行和访问存储设备230。在举例实施方式中,文件系统200包括网络协议225,以支持通过远程进程对文件系统的访问。在某些实施方式中,网络协议225可以包括对例如网络文件系统(NFS)协议或通用因特网文件系统(CIFS)协议的支持,尽管可以设想可以使用任意合适的网络协议,和在某些实施方式中可以支持多个这样的协议。
文件系统205可以用来支持多种本地文件系统。在举例实施方式中,文件系统205包括VERITAS(VxFS)专有格式本地文件系统240A、Berkeley快速文件系统(FFS)格式本地文件系统240B和不同的专有(X)格式本地文件系统240X。然而,可以设想,在其他实施方式中,文件系统205可以支持任意多个本地文件系统格式或其组合。为了向各种本地文件系统240提供通用接口,文件系统205具有一个虚拟文件系统222。在一种实施方式中,虚拟文件系统222可以用来将来自进程212的文件系统操作转换为可适用于每一操作所对应的特定本地文件系统240的格式。此外,在举例实施方式中,操作系统200包括设备驱动器224,本地文件系统240可以通过它来访问存储设备230。设备驱动器224可以执行存储设备230所用的接口类型所特有的数据传送协议。例如,在一种实施方式中,设备驱动器224可以提供对通过SCSI和ATAPI接口传送数据的支持,尽管在其他实施方式中设备驱动器224可能支持其他接口类型和接口组合。
在举例实施方式中,文件系统205还包括过滤驱动器221。在某些实施方式中,过滤驱动器221可以用来监控输入文件系统205的每一操作,并在检测到特定类型的操作后,执行附加操作或者改变所检测操作的特性。例如,在一种实施方式中,过滤驱动器221可以用来将多个写操作合并成单个写操作,以改善文件系统性能。在另一种实施方式中,过滤驱动器221可以在检测到对文件的写操作后用来计算出该文件的签名。在又一种实施方式中,过滤驱动器221可以在检测到对一些特定文件的某些类型的操作后用来存储与这些特定文件有关的信息(比如记录)。可以设想,在某些实施方式中,过滤驱动器221可以用来执行上述操作的一种或多种组合(包括未明确提到的其他过滤操作)。
应当注意,过滤驱动器221是文件系统205的一部分,而不是用户空间210中的应用或进程。因此,过滤驱动器221可以与用户空间210中的应用或进程独立地进行操作。此外,除了上述操作之外,过滤驱动器221还可以在从用户空间210中的应用或进程中接收到的请求后用来执行操作。
还应当注意,在某些实施方式中,与用户空间进程212类似,内核空间220可以包括产生对存储设备230的访问的进程(未示出)。在这样一些实施方式中,内核空间220中执行的进程可以用来以与用户空间进程212类似的方式通过内核模式的API(未示出)访问文件系统205。因此,在某些实施方式中,所有对存储设备230的访问都可以由文件系统205来处理,而与发出这种访问操作的进程的类型或空间无关。
操作系统200和文件系统205的许多其他实施方式也是可行和可预期的。例如,文件系统205可以支持不同数量和格式的本地文件系统240或只支持单个本地文件系统240。在某些实施方式中,网络协议225可以省略或集成到操作系统200的在文件系统205之外的一部分中。同样,在某些实施方式中,例如如果只有单个本地文件系统240在使用,那么虚拟文件系统222也可以省略或不用。另外,在某些实施方式中,过滤驱动器221可以在文件系统205的不同层中实现。例如,在一种实施方式中,过滤驱动器221可以集成到虚拟文件系统222中,而在另一实施方式中,过滤驱动器221的一个实例可以在本地文件系统240的每一个中实现。
优化文件搜索操作如上所述,文件系统205可以用来管理对存储设备230中所储存的多个文件的访问。在某些实施方式中,操作系统200和/或进程212可以用来搜索一个或多个文件以判断所搜索文件是否含有特定数据模式。例如,可以调用诸如Unix“grep”、“egrep”或“fgrep”命令或者Microsoft Windows“文件搜索”实用程序等应用程序来判断一组文件中是否有特定文本串。在某些实施方式中,搜索应用可能例如能够规定任意复杂度的数据模式(比如正则表达式)。此外,在某些实施方式中,搜索应用除了处理文本模式和文件之外还可以用来处理二进制数据模式和文件。
一旦被调用,搜索应用可以执行比如进程212之一,并可以产生对文件系统205的读操作,以便检索指定文件的内容。取决于搜索应用,通过向搜索应用提供作为变元的多个文件名、利用通配符、指定文件夹或目录名或者通过其他任何适合的方式,可以将多个文件指定为搜索操作的目标。当通过文件系统205检索到来自每一指定文件的数据时,搜索应用可以通过利用任何合适的搜索算法检查所检索数据来判断它是否含有所指定的搜索数据模式。取决于搜索应用的实现方式,给定文件的搜索可以在检测到搜索数据模式的第一匹配或指定个数的匹配(如果有的话)后终止,或者一直进行到该文件搜索结束为止,从而报告所有检测到的匹配。在某些实施方式中,这些或其他方面的搜索应用功能性可以由用户通过命令行变元、菜单或类似的方式来选择。
在某些常规实施方式中,搜索应用将会导致读取每一指定文件的全部内容,即使已经执行了完全相同的搜索(即指定相同的数据模式和目标文件组)。在这样的环境下的冗余访问文件可能会增加文件系统的活动性而降低总体系统性能。例如,在这样一些实施方式中,同一文件中的同一模式的两个连续搜索可能各自导致读取所有相应的文件数据并搜索两次,这可能会比执行单次搜索耗费长得多的处理时间。
在一种实施方式中,文件系统205可以用来检测对文件的搜索操作,并将这些搜索操作所指定的数据模式以及搜索结构数据存储在与所搜索文件相应的记录中。图3示出了文件系统的一种这样的实施方式。图3中所示的文件系统205的这种实施方式可以包括图2的实施方式中所示的那些单元;不过,为简明起见,这些单元中的某些单元未示出。在举例实施方式中,文件系统205包括过滤驱动器221、任意多个文件310a-n以及与每一文件310a-n有关的各自元数据命名流320a-n。文件系统205还包括与每一文件310a-n有关的各自否定搜索命名流330a-n和各自肯定搜索命名流340a-n。应当注意,文件310a-n或者命名流320a-n、330a-n或340a-n之一的通用例子可以分别称为文件310或者命名流320、330或340,而文件310a-n和命名流320a-n、330a-n或340a-n可以分别统称为文件310和命名流320、330或340。
文件310可以代表文件系统205所管理的文件。每一文件310都有相应的元数据命名流320(简称为元数据320)。每一元数据命名流320都可以用来存储关于其相应文件的信息(在此可以称为元数据)。在不同的实施方式中,元数据可以包括诸如文件身份、大小、所有权和文件访问权限等(但并不局限于此)信息以及与所检测搜索操作相应的记录等,如下所述。在举例实施方式中,过滤驱动器221可以用来协调文件310的文件数据以及相应的元数据流320的文件元数据的读和写。
此外,在举例实施方式中,每一文件310都有相应的否定搜索命名流330(简称为否定流330)和相应的肯定搜索命名流340(简称为肯定流340)。每一否定流330和肯定流340可以用来存储与相应文件310上所执行的搜索操作有关的信息,如下所详述。在举例实施方式中,过滤驱动器221可以用来协调否定流330和肯定流340的这些搜索操作记录的读和写。
应当注意,文件310、元数据320、否定流330和肯定流340实际上可以存储在一个或多个存储设备(比如图2的存储设备230)中。不过,为了说明,这些单元中的每一个在概念上都示为位于文件系统205中。
存储文件操作的记录和检测搜索操作在文件系统205的某些实施方式中,过滤驱动器221可以用来检测各种操作,比如对文件系统205从各种应用中接收到的给定文件的读或写操作。在检测到指定给特定文件310的操作后,过滤驱动器221可以用来将所检测操作的记录存储在与目标文件310相应的元数据320中。在不同的实施方式中,在检测到文件操作后,过滤驱动器221所存储的记录可以包括关于目标文件310和所检测操作的各种信息,比如文件身份、文件类型、操作类型、文件大小、文件内容签名(如散列或消息摘要5(MD5)签名)、文件拥有者和/或文件权限等。此外,该记录还可以包括关于发出操作的进程或应用的信息,比如应用名称、调用变元、进程ID或其他可用的信息。
在一种特殊实施方式中,文件系统205可以用来检测搜索操作,以判断在一个或多个文件中是否有给定数据模式。例如,过滤驱动器221可以通过检查发出操作的应用的名称和/或调用该应用所用的变元,用来检测出是由搜索应用产生了特定文件读操作。在某些实施方式中,过滤驱动器221可以配置以搜索应用的名称目录,并可以确定从所列出的应用之一中接收到的文件读操作是搜索操作。在这样一些实施方式中,应当注意,过滤驱动器221可能无需搜索应用的任何特定动作或修改就能够检测出搜索操作;也就是说,搜索操作的检测对搜索应用来说可以是透明的。在其他实施方式中,过滤驱动器221可以提供一种便利,比如注册应用编码接口(API),通过这些接口,应用可以将它们自己注册为搜索应用,从而使得过滤驱动器221可以通过名称或其他识别数据识别出任意搜索应用。在又一些实施方式中,过滤驱动器221可以通过以下方式用来提供搜索应用特有的API比如通过提供用于调用文件操作的另一组功能调用,或者通过利用与特定搜索相关的语义来提供用于使标准文件操作功能调用超载的一个或多个机制。在这样一些实施方式中,当执行与搜索有关的文件操作时,给定搜索应用可以利用与特定搜索相关的API来与文件系统205进行交互,并且过滤驱动器221可以检测通过API接收到的作为搜索操作的操作。文件系统205可用来检测搜索应用的许多其他机制也是可行和可预期的。
一旦检测到指定给特定文件310的搜索操作,过滤驱动器221可以用来将搜索操作的记录存储在相应的元数据命名流320中。可以设想,在检测到相关操作后随时可以进行这种记录的存储。例如,在一种实施方式中,记录的存储可以延迟到对文件310a的操作完成后进行,而在另一实施方式中,记录的存储可以在该操作完成之前进行。在后一种情况下,如果操作不能保证完成(即不确定),那么,过滤驱动器221可以提供一种机制,以便万一操作不能完成就删除其相应操作的事先存储的记录。
在一种实施方式中,在检测到搜索操作之后,过滤驱动器221所存储的记录可以以扩展标记语言(XML)格式来产生和存储,尽管可以设想,在其他实施方式中,还可以使用任何合适的格式。XML格式的记录的一个例子如下<record sequence="3">
<path>/test1/foo.txt</path>
<type>ascii</type>
<user id=1598>username</user>
<group id=119>groupname</group>
<perm>rw-r--r--</perm>
<md5>d41d8cd98f00b204e9800998ecf8427e</md5>
<size>58937</size>
<process>
<name>grep</name>
<args>grep release4/test1/*,txt</args>
<pid>7168</pid>
<ppid>409</ppid>
<pgrpid>409</pgrpid>
</process>
</record>
这种记录可以附加到与文件(比如文件310a)有关的元数据命名流(比如元数据320a)中,在搜索应用“grep”用变元“greprelease4/test1/*.txt”调用后,该文件具有文件身份“/test1/foo.pdf”。如上所述,在一种实施方式中,过滤驱动器221可以通过检测作为发出进程名称的“grep”用来检测作为搜索操作的这一操作,而在其他实施方式中,可以利用不同的方法进行这种检测。“grep”搜索应用的这一特定调用可以搜索具有扩展名“.txt”的每一文件,该扩展名位于文本模式“release4”的“/test1”目录中。在一种实施方式中,在文件系统205接收与特定文件(比如“test1/foo.txt”)相应的搜索操作之前,可以通过预处理器(比如shell环境或命令处理器)将通配符表达式“/test1/*.txt”扩展到符合该表达式的文件的显式目录中。在另一实施方式中,文件系统205可以用来内部扩展通配符表达式。
针对这一例子,与“record sequence”字段有关的编号表示这一记录是与文件310a有关的第三记录。“path”字段包括文件身份,而“type”字段表示文件类型,文件类型在一种实施方式中可以由发出文件建立操作的进程所提供,而在其他实施方式中可以例如根据文件名的扩展名或根据文件中的标题信息来确定。“user id”字段记录了数字用户id和与发出文件建立操作的进程有关的用户的文本用户名,而“groupid”字段记录了数字组id和该用户的文本组名。“perm”字段以文件系统205和/或操作系统特有的格式记录了与文件310a有关的文件权限。“md5”字段记录了与文件内容相应的MD5签名,而“size”字段记录了文件310a的字节长度。
此外,“process”字段可以包括一些子字段,记录有关执行内容访问操作的进程的信息。“name”子字段记录了发出该操作的进程或应用的名称,而“args”子字段记录了调用指定进程时给定的变元。“pid”、“ppid”和“pgrpid”子字段分别记录了进程ID、进程的父进程的ID和进程的组ID。可以设想,在其他实施方式中,过滤驱动器221可以存储与所检测搜索操作相应的记录,包括更多或更少的字段以及具有不同定义或内容的字段。还可以设想,在某些实施方式中,过滤驱动器221可以检测搜索操作并按如下所述对它进行处理,而无需如上所述形成元数据流320中的记录。
处理文件系统中的搜索操作在举例实施方式中,文件系统205可以利用否定流330和肯定流340中所存储的信息来优化处理所检测到的对相应文件310的搜索操作。具体地说,否定流330可以用来存储一些记录(比如如下所述的XML记录),这些记录指示是否知道给定搜索数据模式不在其相应的文件310中。同样,肯定流340可以用来存储一些记录,这些记录指示知道给定搜索数据模式在相应的文件310中以及在文件310中找到该搜索数据模式的位置。
一旦检测到如上所述的搜索操作,在一种实施方式中,过滤驱动器221可以用来确定该搜索操作所指定的数据模式。例如,过滤驱动器221可以检查调用发出该搜索操作的应用所用的变元,并根据该应用的语法对这些变元进行分析。参照上述例子,过滤驱动器221可以确定为“grep”操作所指定的数据模式是文本串“release4”。如前面所述,在某些实施方式中,数据模式可以包括通配符、正则表达式语法或其他摘要模式匹配的语法。
在确定了搜索操作所指定的数据模式后,在一种实施方式中,过滤驱动器221可以用来扫描否定流330和肯定流340,以判断这两种流中是否存储有所指定数据模式的标记。在某些实施方式中,过滤驱动器221可以用来照字义将所指定数据模式与否定流330和肯定流340的内容进行对照。在所指定数据模式可能包括摘要语法的实施方式中,过滤驱动器221可以用来评估该语法以及流330和340的内容的语法,以判断这两种流中是否存储有所指定数据模式的标记。例如,评估时两种字义不同的正则表达式可以识别相同的数据模式。
如果这两种流中没有所指定数据模式的标记,那么,在一种实施方式中,过滤驱动器221可以用来检测搜索操作所指向的文件310,以判断其中是否有所指定数据模式。例如,在一种实施方式中,文件系统205中的过滤驱动器221或另一模块可以实现在图2的内核空间220中可执行的搜索算法。在另一实施方式中,过滤驱动器221可以用来调用在图2的用户空间210中可执行的外部搜索应用。在某些这样的实施方式中,在文件系统205被初始化时或者由程序员或系统管理员需要时可以选择所要调用的外部搜索应用,比如通过API。
如果在过滤驱动器221搜索文件310后没有找到所指定数据模式的匹配,那么,在一种实施方式中,过滤驱动器221可以用来将该数据模式的标记存储到否定流330中。在一种实施方式中,过滤驱动器221可以将该数据模式作为XML记录存储到否定流330中。例如,如果在过滤驱动器221搜索文件“foo.txt”后没有找到如上所述的例子中所提到的模式“release4”,那么过滤驱动器221可以将如下记录<pattern>release4</pattern>
存储到相应的否定流330中。
同样,如果在过滤驱动器221搜索文件310后找到了所指定数据模式的匹配,那么,在一种实施方式中,过滤驱动器221可以用来将该数据模式的标记以及关于在文件310中何处找到该模式的信息存储到肯定流340中。在一种实施方式中,过滤驱动器221可以将该数据模式作为XML记录存储到肯定流340中。例如,如上所述的例子中所提到的模式“release4”可能在文件“foo.txt”中出现在文件的第20行和第485行。此外,第20行可能位于文件的第2块中而第485行可能位于文件第4块中,其中块尺寸和分界线由文件系统205所确定(例如,文件系统205可以利用1024字节的块来编排和操作文件内容)。在这种情况下,在搜索到文件“foo.txt”中的模式“release4”后,过滤驱动器221可以将下列XML记录存储到相应的肯定流340中<occurs>
<pattern>release4</pattern>
<record>
<linenumber>20</linenumber>
<blocknumber>2</blocknumber>
</record>
<record>
<linenumber>485</linenumber>
<blocknumber>4</blocknumber>
</record>
</occurs>
除了行和块编号之外(或代替行和块编号),可以用任何合适的索引来索引文件的相应部分。例如,在某些实施方式中,可以用偏离文件起点的字节偏移量来代替比如刚刚提到的记录中的行和块编号。此外,可以设想,在其他实施方式中,可以用不同的XML标记来界定和构造否定流330和肯定流340中所存储的记录,或者可以用不同于XML的语法来构造记录。此外,还可以设想,在某些实施方式中,搜索操作的目标文件310可能未被格式化为文本文件(比如文件310可以是二进制文件)。在某些这样的实施方式中,如果给定目标文件310不是文本文件,那么行编号可能不适合于索引文件,并且可以从相应肯定流340中的记录中省略这些行编号。
如上所述,在一种实施方式中,过滤驱动器221在接收到搜索操作后可以用来扫描否定流330和肯定流340,以判断这两种流中是否存储有所指定数据模式的标记。针对使用刚刚提到的举例记录的格式的一种实施方式,过滤驱动器221可以用来扫描每种流中所记录的“模式”字段。如果所指定数据模式与否定流330中所存储的模式匹配,那么,过滤驱动器221可以用来向发出搜索操作的应用返回一个否定搜索标记,而无需访问相应文件310的内容。例如,过滤驱动器221可以通过将文件结束标记发送到始发应用(无需任何文件数据)的方式来间接和透明地向始发应用返回一个否定搜索标记;也就是说,过滤驱动器221可以使文件310对始发应用而言好象具有零长度。在这种情况下,始发应用可以尝试在文件系统205所返回的空文件数据中搜索所指定搜索数据模式,假如空模式不是该搜索数据模式的有效匹配,那么尝试失败。在另一实施方式中,过滤驱动器221可以通过返回与文件310相同长度的数据的方式来间接和透明地向始发应用返回一个否定搜索标记,但其中所返回的文件数据只含有空白符(比如空格符、制表符)和/或换行符。
在文件系统205实现如上所述的与特定搜索相关的API的一些实施方式中,过滤驱动器221可以例如通过功能调用或其他规定的接口而不是通过返回文件结束标记来直接向始发应用指示否定搜索结果。应当注意,不管向始发搜索应用指示否定搜索结果所用的具体机制,都可以无需实际访问目标文件310的内容来指示这些否定搜索结果,从而潜在地降低了文件系统活动性。
如果所指定数据模式与肯定流340中所存储的模式匹配,那么,过滤驱动器221可以用来只访问文件310中的由肯定流340中的匹配记录所指示的那些部分,并向始发应用返回那些部分的文件数据。在一种实施方式中,过滤驱动器221可以用来通过以下方式透明地返回那些特定的文件部分在肯定流340中的匹配记录中所指示的行或块之前返回空白符(比如空格符、制表符)和/或换行符,然后读取相应文件310中的所指示块,并只将该块的文件数据返回到始发应用。如果给定数据模式在给定文件310中多次匹配,正如与如上所述的数据模式相应的多个记录所指示,那么,过滤驱动器221可以利用附加的空白和/或换行符来跟踪给定的返回数据块直到到达记录所指示的下一行或块为止。例如,如果搜索操作指定数据模式“release4”而肯定流340含有如上所述的“occurs”记录,那么,过滤驱动器221可以用来只访问和返回相应文件310的第2块和第4块,其中用适当数量的空白和/或换行符来散置这些块。始发搜索应用可以尝试在文件系统205所返回的空白/换行填充的文件数据中搜索所指定数据模式,但是,假如用于代替未读部分的字符不是有效的搜索模式数据,那么可能只匹配文件系统205实际返回的目标文件310的部分中的那种数据模式。
在文件系统205实现如上所述的与特定搜索相关的API的一些实施方式中,过滤驱动器221可以用来直接向始发应用指示肯定搜索结果。例如,在一种这样的实施方式中,过滤驱动器221可以通过功能调用或其他规定的接口而不是通过返回嵌入在空白符的流中的特定部分的方式,来返回文件310的那些特定部分以及关于这些特定部分位于文件310中的何处的信息。正如上述否定搜索结果的情况一样,应当注意,不管向始发搜索应用指示肯定搜索结果所用的具体机制,都可以在实际只访问目标文件310的部分的同时指示这些肯定搜索结果,从而潜在地降低了文件系统活动性。
如果例如通过文件写操作修改了给定文件310的内容,那么,相应否定流330和肯定流340中所存储的数据模式可能不再准确地反映所修改的文件内容。也就是说,所存储的数据模式可能不再展现关于给定文件310的修改内容的参照完整性,因为在存储数据模式时所存储数据模式所涉及的信息可能已改变。在某些实施方式中,过滤驱动器221可以用来在对相应文件310进行写后,通过例如将流330和340缩短到零长度来清除否定流330和肯定流340中所存储的记录。在其他实施方式中,过滤驱动器221可以用来对所存储数据模式和所修改内容进行对照检查,以确定文件内容修改后每一所存储记录的有效性。例如,在一种这样的实施方式中,过滤驱动器221可以在文件310中搜索否定流330和肯定流340中所存储的每一数据模式,相应地可以更新这些流。此外,在某些实施方式中,过滤驱动器221可以用来从否定流330和肯定流340中除去一些记录,以减小这些流所需的存储量。例如,如果给定流的长度超出了某一阈值或者某段时间过后,过滤驱动器221可以用来从给定流中除去较旧的记录。
应当注意,在不同的实施方式中,搜索索否定流330和肯定流340的次序可以变化。在一种实施方式中,在检测到搜索操作后,过滤驱动器221可以用来首先搜索索否定流330中的指定数据模式。如果没有找到该模式,那么过滤驱动器221可以接着搜索索肯定流340,最后可以搜索指定文件310本身。在另一实施方式中,过滤驱动器211可以用来并行或者按不同次序搜索否定流330、肯定流340和文件310中的一些或所有。此外,在提供与特定搜索相关的API的文件系统205的某些实施方式中,可以由搜索应用来规定搜索这些项目的次序和并发度。例如,这种规定可以根据这样的启示来进行,这种启示可以提出在给定文件中有可能找到有可能找不到给定数据模式,从而可能在肯定流中或在否定流中,或者是否知道最近已进行还是未进行给定搜索,相应地数据模式是否可能在这两种流中。
还应当注意,在某些实施方式中,文件系统205可以支持否定流330或肯定流340之一,而不支持另一个,或者可以在非过滤驱动器221的其他模块中管理上述否定流330和/或肯定流340。此外,在某些实施方式中,否定流330和/或肯定流340还可以完全省去,与否定和肯定搜索结果相应的记录可以直接存储在元数据流320或另一命名流中。在这样一些实施方式中,这些记录可以用与如上所述不同的XML标记来界定,以便区分肯定搜索记录和否定搜索记录。
最后,可以设想,各种类型的索引都可适用于给定否定流330或肯定流340的内容,或者总体上可适应文件系统205的与搜索有关的内容。例如,在一种实施方式中,文件系统205可以用来通过以下方式索引给定否定流330或肯定流340中所存储的记录比如通过对其中所存储的记录的语法进行预分析并以分析格式(比如二进制格式)来存储记录数据,从而减少搜索给定流所需的时间。此外,在一种实施方式中,文件系统205可以用来产生和保留索引现有否定流330和肯定流340的附加命名流或文件。例如,文件系统205可以用来产生含有特定否定流330的记录的否定索引流(确定其中有给定的搜索数据模式)以及类似的肯定索引流。为适应搜索活动性,文件系统205还可以利用这些索引流来减少对否定流330和肯定流340的访问次数,其方式与如上所述的给定否定流330和给定肯定流340可以减少对其相应文件310的访问的方式类似。
图4表示检测对文件的搜索操作和存储与该搜索操作相应的记录的方法的一种实施方式。共同参照图1至图4,操作从块400开始,在该块中,检测对给定文件中的数据模式的搜索操作。例如,在一种实施方式中,过滤驱动器221可以检测对给定文件310的文件读操作,该操作发自其名称与已知搜索应用相应的应用。在其他实施方式中,文件系统205可以提供API,搜索应用从而可以向文件系统205发出搜索操作。
当检测到搜索操作时,在一种实施方式中,可以扫描否定流330,以判断其中是否存储有该搜索操作所指定的数据模式的标记(块402、404)。如果其中存储有所指定数据模式的标记,那么,可以将否定标记返回到始发应用,而无需访问相应文件310(块406)。例如,在这种情况下,过滤驱动器221可以用来将文件结束标记返回到始发应用,或者可以通过API指示否定搜索状态。
如果在否定流330中没有检测到所指定数据模式的标记,那么,在一种实施方式中,可以扫描肯定流340,以判断其中的记录中是否存储有这种标记(块408、410)。如果找到这种标记,那么,可以只访问该记录所指示的文件310的数据块(块412)。可以将这些数据块返回到始发应用(块414)。例如,在一种实施方式中,这些数据块可以通过嵌入到过滤驱动器221所产生的空白符中以一种对始发应用透明的方式来返回。在另一实施方式中,这些数据块可以比如通过API与关于其在文件中的位置的信息一起直接返回到始发应用。
如果在肯定流340中没有检测到所指定数据模式的标记,那么,可以搜索相应的文件310,以判断其中是否存储有该数据模式,并可以根据搜索结果将适当的记录存储在否定流330或肯定流340中(块416)。
应当注意,在该方法的某些实施方式中,可以以不同的次序或并发地搜索否定流330、肯定流340和文件310。还应当注意,在该方法的某些实施方式中,可以只实现否定流330和肯定流340中的一种流或另一种流,或者可以将这两种记录合并到单个命名流中。
图5表示保持与搜索操作相应的所存储记录的参照完整性的方法的一种实施方式。共同参照图1-3和图5,操作从块500开始,在该块中,存储与文件搜索操作相应的记录。例如,可以检测搜索操作,并可以将含有搜索数据模式的相应记录存储到否定流330或肯定流340中,如以上结合图3和4的描述情况所述。
在存储了文件搜索操作的记录之后,可以检测对相应文件的内容的修改操作(块502)。例如,在一种实施方式中,过滤驱动器221可以检测对在相应否定流330或肯定流340中存储有记录的文件的文件写操作。
一旦检测到对文件的内容修改操作,就可以清除与该文件相应的所存储搜索记录(块504)。例如,在一种实施方式中,当检测到对相应文件310的内容修改操作(比如文件写操作)时,过滤驱动器221可以用来将否定流330和肯定340缩短到零长度。在另一实施方式中,可以设想,例如可以通过过滤驱动器221来检查每一所存储搜索记录,以便在检测到内容修改操作后评估其参照完整性。在这种实施方式中,可以只清除其完整性受到内容修改操作影响的那些记录。
尽管非常详细地描述了以上实施方式,然而,对熟练技术人员而言,一旦彻底了解上述公开内容,显然可以想到许多变化和修改方式。因此,目的在于认为附属权利要求书包括了所有这些变化和修改方式。
权利要求
1.一种系统,包括用来存储数据的存储设备;和被配置为用来管理对所述存储设备的访问的文件系统,其中,所述文件系统被配置用于检测搜索操作以判断所述存储设备中所存储的第一文件中给定数据模式的存在;和将所述给定数据模式的标记和所述搜索操作的结果数据的标记存储在与所述第一文件有关的第一记录中。
2.如权利要求1所述的系统,其中,在检测到所述搜索操作后,所述文件系统还被配置为用来扫描所述第一记录以判断其中是否存储有所述给定数据模式的所述标记;并且其中,根据判定其中存储有所述标记,则所述文件系统还被配置为只访问所述第一文件的一部分。
3.如权利要求2所述的系统,其中,结果数据的所述标记包括与所述第一文件中出现所述给定数据模式的一个或多个部分相应的索引;并且其中,根据判定所述第一记录中存储有所述给定数据模式的所述标记,则所述文件系统还被配置为用来只访问所述第一文件中与所述索引相应的一个或多个部分。
4.如权利要求1所述的系统,其中,在检测到所述搜索操作后,所述文件系统还被配置为用来扫描所述第一记录以判断其中是否存储有所述给定数据模式的所述标记,并且如果所述第一记录中存储有所述给定数据模式的所述标记,则返回否定标记而无需访问所述第一文件。
5.如权利要求1所述的系统,其中,如果所述第一文件中有所述给定数据模式,那么所述文件系统还被配置为用来将所述给定数据模式的所述标记和模式位置信息存储在所述第一记录中;并且其中,如果所述第一文件中没有所述给定数据模式,那么所述文件系统还被配置为用来将所述给定数据模式的所述标记存储在第二记录中。
6.如权利要求5所述的系统,其中,所述第一记录和所述第二记录被存储在各自的命名流中,每一命名流都与所述第一文件相应。
7.如权利要求1所述的系统,其中,根据检测对所述第一文件中所存储数据的修改操作,所述文件系统还被配置为用来清除与所述第一文件有关的所述记录。
8.如权利要求1所述的系统,其中,所述文件系统还被配置为用来检测搜索操作,以判断在所述存储设备中所存储的多个文件中的一个或多个中给定数据模式的存在,并将所述给定数据模式的标记和所述搜索操作的结果数据的标记存储在与所述多个文件中的所述一个或多个中的每一个有关的相应记录中。
9.一种方法,包括存储多个文件;检测搜索操作以判断第一文件中给定数据模式的存在;和将所述给定数据模式的标记和所述搜索操作的结果数据的标记存储在与所述第一文件有关的第一记录中。
10.如权利要求9所述的方法,还包括在检测所述搜索操作后,扫描所述第一记录以判断其中是否存储有所述给定数据模式的所述标记;和根据判定其中存储有所述标记,则只访问所述第一文件的一部分。
11.如权利要求10所述的方法,其中,结果数据的所述标记包括与所述第一文件中出现所述给定数据模式的一个或多个部分相应的索引;并且其中,该方法还包括根据判定所述第一记录中存储有所述给定数据模式的所述标记,则只访问所述第一文件中与所述索引相应的一个或多个部分。
12.如权利要求9所述的方法,还包括在检测所述搜索操作后,扫描所述第一记录以判断其中是否存储有所述给定数据模式的所述标记;和如果所述第一记录中存储有所述给定数据模式的所述标记,则返回否定标记而无需访问所述第一文件。
13.如权利要求9所述的方法,还包括如果所述第一文件中有所述给定数据模式,那么将所述给定数据模式的所述标记和模式位置信息存储在所述第一记录中;和如果所述第一文件中没有所述给定数据模式,那么将所述给定数据模式的所述标记存储在第二记录中。
14.如权利要求13所述的方法,其中,所述第一记录和所述第二记录被存储在各自的命名流中,每一命名流都与所述第一文件相对应。
15.如权利要求9所述的方法,还包括根据检测对所述第一文件中所存储数据的修改操作,清除与所述第一文件有关的所述记录。
16.一种含有程序指令的计算机可存取媒介,其中,这些程序指令是计算机可执行的,用于存储多个文件;检测搜索操作以判断第一文件中给定数据模式的存在;和将所述给定数据模式的标记和所述搜索操作的结果数据的标记存储在与所述第一文件有关的第一记录中。
17.如权利要求16所述的计算机可存取媒介,其中,这些程序指令是计算机可执行的,以用于在检测所述搜索操作后,扫描所述第一记录以判断其中是否存储有所述给定数据模式的所述标记;和根据判定其中存储有所述标记,则只访问所述第一文件的一部分。
18.如权利要求17所述的计算机可存取媒介,其中,结果数据的所述标记包括与所述第一文件中出现所述给定数据模式的一个或多个部分相应的索引;并且其中,程序指令是计算机可执行的,以用于根据判定所述第一记录中存储有所述给定数据模式的所述标记,则只访问所述第一文件中与所述索引相应的一个或多个部分。
19.如权利要求16所述的计算机可存取媒介,其中,这些程序指令是计算机可执行的,以用于在检测所述搜索操作后,扫描所述第一记录以判断其中是否存储有所述给定数据模式的所述标记;和如果所述第一记录中存储有所述给定数据模式的所述标记,则返回否定标记而无需访问所述第一文件。
20.如权利要求16所述的计算机可存取媒介,其中,这些程序指令是计算机可执行的,还用于如果所述第一文件中有所述给定数据模式,那么将所述给定数据模式的所述标记和模式位置信息存储在所述第一记录中;和如果所述第一文件中没有所述给定数据模式,那么将所述给定数据模式的所述标记存储在第二记录中。
21.如权利要求20所述的计算机可存取媒介,其中,所述第一记录和所述第二记录被存储在相应的命名流中,每一命名流都与所述第一文件相应。
22.如权利要求16所述的计算机可存取媒介,其中,这些程序指令是计算机可执行的,以用于根据检测到对所述第一文件中所存储数据的修改操作,那么清除与所述第一文件有关的所述记录。
全文摘要
文件系统中用于有效文件内容搜索的系统和方法。在一种实施方式中,该系统可以包括用来存储数据的存储设备和用来管理对存储设备的访问的文件系统。该文件系统可以用来检测搜索操作以判断存储设备中所存储的第一文件中给定数据模式的存在性,并将给定数据模式的标记和搜索操作的结果数据的标记存储在与第一文件有关的第一记录中。
文档编号G06F17/30GK1947119SQ200580012759
公开日2007年4月11日 申请日期2005年3月4日 优先权日2004年3月4日
发明者杜拉巴加尤蒂·波萨库尔, 纳尔·普莱默, 克雷格·K·汉默 申请人:维瑞泰斯操作公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1