具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)云技术(Cloud Technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、存储、处理和共享的一种托管技术。
云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
2)云HDFS(云Hadoop Distributed File System,云Hadoop分布式文件系统)是云技术的一种演化,其提供了高性能、分布式元数据服务,同时利用低成本、可扩展的对象存储作为数据存储。
3)索引节点(Inode),用于存储文件的一些元数据,比如文件的访问、修改时间戳、所有者等。
4)元数据,主要描述数据属性的信息,用来指示存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录,用户在使用数据时可以首先查看其元数据以便能够获取自己所需的信息。
由于元数据也是数据,因此可以用类似数据的方法在数据库中进行存储和获取。
5)数据库模式,是指文件系统的所有元数据存放于数据库,通过数据库完成增删改查。
6)内存模式,是指将文件系统的所有元数据存放于系统内存之中,通过读取系统内存在实现元数据的增删改查。
7)目录项缓存,是为了加速文件系统元数据的访问,而引入的缓存结构。
大数据场景中一般会存在海量的用户文件,这些用户文件在上传到云端(云HDFS)以进行存储时,会利用元数据在对其的属性进行描述,以便于通过元数据来对用户存储的文件进行搜索和定位。
索引节点用于存储文件的元数据。索引节点包含节点标识(id)、父节点标识(pid)和节点名称(name)等属性,其中,节点标识唯一表示当前索引节点,父节点标识为父节点的标识,节点名称为当前索引节点的文件名。这样,通过文件系统的索引节点集合,能够构建出完整的目录树,同时,在查找元数据时,能够根据文件路径找出具体的索引节点的信息,从而实现上层文件系统接口。
在进行元数据查找时,云端需要先将文件路径进行切分,然后根据节点标识和节点名称,从根目录(一般默认根目录的节点标识为1)逐层查找索引节点,直至查找到文件路径最尾部的索引节点,然后从查找到的索引节点中提取出元数据。若是在查找时没有相应的索引节点,则返回索引节点不存在的错误。
示例图的,图1是串行从数据库查找元数据的过程示意图。参见图1,云端从终端的所发送的文件查找请求中,利用路径获取方法1-1,即GetInode()所获取到的文件路径为“/a/b/c”,云端先将其该文件路径进行切分1-2,分别得到“/”、“a”、“b”和“c”。然后,云端先从数据库1-3中先查找父节点=“/”,名称=“a”1-4的索引节点;在得到“a”所对应的索引节点之后,云端再从数据库中查找父节点=“a”,名称=“b”1-5的索引节点;在得到“b”所对应的搜索节点之后,云端接着从数据库中查找父节点=“b”,名称=“c”1-6的索引节点;在返回“c”所对应的索引节点之后,由于云端已经搜索到了文件路径的末尾,这时,云端会将“c”对应的索引节点中的元数据提取出来,从而实现元数据的查找。之后,云端可以根据该元数据,来进一步找到终端想要查询的文件。
由上述可知,元数据查找可以看作是对目录树子节点的查找。由于查找子节点需要依赖父节点标识,从而云端只能从上向下的逐层获取父节点标识,最终找到最下层的子节点,然后返回给上层,可见,索引节点之间是存在数据依赖的,只能串行逐层执行。
对于内存模式而言,由于所有元数据存放在内存,串行逐层执行不会影响元数据查找的速度。然而,内存所能存储的元数据是有限的,由于数据库在稳定性和容量上的优势,从而势必会利用数据库模式来对元数据进行管理。而在数据库模式下,从图1可知,元数据查找需要多次串行访问数据库,且数据库访问次数与路径层级成正比,从而带来很大的时延,即数据库模式时元数据查找的效率较低,并且数据库的吞吐量也受到了限制。
本申请实施例提供一种元数据查找方法、装置、设备和计算机可读存储介质,能够提高数据库模式下元数据查找的效率。下面说明本申请实施例提供的元数据查找设备的示例性应用,本申请实施例提供的元数据查找设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等各种类型的用户终端,也可以实施为服务器。下面,将说明元数据查找设备的示例性应用。
参见图2A,图2A是本申请实施例提供的元数据查找系统100的一个可选的架构示意图,为实现支撑一个元数据查找应用,终端400通过网络300连接元数据查找设备200,网络300可以是广域网或者局域网,又或者是二者的组合。
终端400在用户需要查询文件时,将用户所要查找的文件的路径封装在文件查找请求中,发送给元数据查找设备200。例如,当用户在图形界面410的命令行界面,输入文件系统路径,终端将文件系统路径封装在文件查找请求中,发送给元数据查找设备200。
元数据查找设备200接收文件查找请求,并从文件查找请求中获取文件系统路径,其中,文件系统路径为所要查找的文件的路径。元数据查找设备200对文件系统路径进行切分,得到多个文件名称,并基于多个文件名称,从系统内存的目录项缓存中,逐层确定出多个文件名称对应的多个索引参数。其中,目录项缓存记录了各个索引节点之间的层级依赖关系。元数据查找设备200依据多个索引参数,从存放元数据的数据库中,并行提取出多个文件名称各自对应的元数据,以实现元数据查找。
接着,元数据查找设备200可以依据元数据提取出用户所要查找的文件,然后将文件返回给终端400,终端400将文件展示在图形界面410上,以供用户查阅。
作为示例,元数据查找设备200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本发明实施例中不做限制。
本申请实施例还可以通过区块链技术来实现,参见图2B,图2B是本申请实施例提供的元数据查找系统100的另一个可选的架构示意图。图2B中,可以通过元数据查找设备200将多个索引参数,以及查找出的元数据上链,以保证元数据查找过程都能够被记录,并且该记录不可篡改。
在一些实施例中,元数据查找设备200可以加入区块链网络500而成为其中的一个节点。区块链网络500的类型是灵活多样的,例如可以为公有链、私有链或联盟链中的任意一种。以公有链为例,任何业务主体的电子设备,都可以在不需要授权的情况下接入区块链网络500,以作为区块链网络500的共识节点,例如,将终端600映射为区块链网络500中的共识节点500-1,以在将元数据上链时进行共识。
以区块链网络500为联盟链为例,终端600在获得授权后可以接入区块链网络500而成为节点。元数据查找设备200获取文件系统路径,对文件系统路径进行切分,得到多个文件名称,基于多个文件名称,从系统内存的目录项缓存中,逐层确定出多个文件名称对应的多个索引参数,从存放元数据的数据库中,并行提取多个文件名称各自对应的元数据,然后将提取出的元数据和多个索引参数发送至区块链网络500中进行共识。当共识通过时,区块链网络500会为多个索引参数和元数据分配新区块,将多个索引参数和元数据写入至新区块,并将新区块添加在区块链的末端。
参见图3,图3是本申请实施例提供的元数据查找设备200的结构示意图,图3所示的元数据查找设备200包括:至少一个处理器210、存储器250、至少一个网络接口220和用户接口230。元数据查找设备200中的各个组件通过总线系统240耦合在一起。可理解,总线系统240用于实现这些组件之间的连接通信。总线系统240除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图3中将各种总线都标为总线系统240。
处理器210可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口230包括使得能够呈现媒体内容的一个或多个输出装置231,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口230还包括一个或多个输入装置232,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器250可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器250可选地包括在物理位置上远离处理器210的一个或多个存储设备。
存储器250包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器250旨在包括任意适合类型的存储器。
在一些实施例中,存储器250能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统251,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块252,用于经由一个或多个(有线或无线)网络接口220到达其他计算设备,示例性的网络接口220包括:蓝牙、无线相容性认证(Wi-Fi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块253,用于经由一个或多个与用户接口230相关联的输出装置231(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块254,用于对一个或多个来自一个或多个输入装置232之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的元数据查找装置可以采用软件方式实现,图3示出了存储在存储器250中的元数据查找装置255,其可以是程序和插件等形式的软件,包括以下软件模块:路径获取模块2551、路径切分模块2552、参数确定模块2553、元数据提取模块2554和映射修复模块2555,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。
将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的元数据查找装置可以采用硬件方式实现,作为示例,本申请实施例提供的元数据查找装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的元数据查找方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific IntegratedCircuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
示例性的,本申请实施例提供一种元数据查找设备,包括:
存储器,用于存储可执行元数据查找指令;
处理器,用于执行所述存储器中存储的可执行元数据查找指令时,实现本申请实施例提供的元数据查找方法。
下面,将结合本申请实施例提供的元数据查找设备的示例性应用和实施,说明本申请实施例提供的元数据查找方法。
参见图4,图4是本申请实施例提供的元数据查找方法的一个可选的流程示意图一,将结合图4示出的步骤进行说明。
S101、获取文件系统路径。
本申请实施例是在查找用户指定的路径所对应元数据的场景下实现的,以便于基于元数据查找文件或者对元数据进行修改。元数据查找设备首先会获取传入的文件系统路径,其中,文件系统路径为所要查找的文件的路径。该路径可以是由用户的终端传输来的,也可以是元数据查找设备本身存储的。例如,终端将用户输入的查询路径传输给元数据查找设备,元数据查找设备获取传输的路径,该路径就是文件系统路径;或者,元数据查找设备在定期对元数据进行更新时,获取事先存储的要进行元数据更新的文件路径,该路径就是文件系统路径。
需要说明的是,文件系统路径描述了从系统根目录开始,直至指定的文件之间的各个层级结构,每个层级都有其对应的文件名称,不同层级的文件名称之间利用预设符号分隔开。例如,在“/a/b/c”描述的就是从系统根目录开始,直至指定文件c的层级结构,“/”为预设符号,其代表的含义为左边的文件名称作为根目录,在“/”左边没有文件名称时,则根目录就为系统根目录。
S102、对文件系统路径进行切分,得到多个文件名称。
元数据查找设备按照预设符号对文件系统路径进行分割,能够得到不同的文件层级,然后将每个文件层级中的文件名称进行提取,就得到了多个文件名称,以便于后续根据多个文件名称来确定索引参数。
示例性的,当文件系统路径为“/a/b/c”时,元数据查找设备可以按照“/”对“/a/b/c”进行切分,并对切分得到的“a”、“b”和“c”进行提取,就得到了文件系统路径所对应的多个文件名称。
可以理解的是,根目录属于文件系统路径中的初始层级,多个文件名称中也包含了根目录。
S103、基于多个文件名称,从系统内存的目录项缓存中,逐层确定出多个文件名称对应的多个索引参数。
元数据查找设备先利用多个文件名称中的根目录,在系统内存的目录项缓存中,查找出与根目录相对应的根节点标识(根目录所对应的根节点标识一般都是默认的),然后将根节点标识作为父节点标识,以及多个文件名称中根目录的下一个文件名称,从目录缓存项中查找到下一个文件名称对应的索引节点的节点标识,并将查找到的节点标识作为再下一个文件名称所对应的父节点标识,以结合再下一个文件名称确定出再下一个文件名称对应的索引节点的节点标识,依次类推,直至从目录项缓存中,为每个文件名称都查找出与其对应的索引节点的节点标识。接着,元数据查找设备可以将每个文件名称对应的父节点标识,以及每个文件名称,组成每个文件对应的索引参数,或者是将每个文件名称对应的索引节点的节点标识,直接作为每个文件名称对应的索引参数。如此,元数据查找设备就得到了与多个文件名称对应的多个索引参数。
需要说明的是,目录项缓存记录有以索引节点对应的父节点标识和文件名称所构成的索引参数作为键,以索引节点的节点标识作为值所得到的映射关系,利用该映射关系,能够明确每个索引节点的父节点的信息,每个索引节点的子节点的信息。从而,目录项缓存描述了各个索引节点之间的层级依赖关系,元数据查找设备可以通过串行访问目录项缓存,来利用该层级依赖关系(即各个索引节点之间的父子关系),从而逐层地确定出用于搜索每个文件名称所对应的索引节点的节点标识(即一轮只确定出一个节点标识,利用本轮的节点标识,再确定出下一个文件名称的搜索节点的节点标识)。
示例性的,当父节点标识用pid表示,文件名称用name表示,索引节点的节点标识用inode id表示时,那么目录项缓存中的键为(pid,name),值为inode id。
本申请实施例中,由于目录项缓存存放在系统内存中,而在系统内存中进行数据存储、读取等操作,所耗费的时间会非常少,元数据查找设备在从目录项缓存中串行逐层确定索引参数所需要的时间也会非常少,从而,元数据查找设备能够在依托于存放在系统内容中的目录项缓存,快速地确定出所有文件名称各自对应的索引参数。
需要说明的是,在一些实施例中,元数据查找设备可能从系统内存的目录项缓存中,得不到多个文件名称对应的多个索引参数,即只能针对多个文件名称中的一部分,确定出对应的索引参数,此时,元数据查找设备会直接从存放元数据的数据库中,串行逐层查找多个文件名称对应的多个索引节点,即直接将并行从数据库查找索引节点的过程,降级为串行从数据库查找索引节点的过程。当然,这种情况是元数据查找中的少数,从整体上并不会影响元数据查找的效率。
S104、依据多个索引参数,从存放元数据的数据库中,并行提取多个文件名称各自对应的元数据。
元数据查找设备在得到多个索引参数之后,就可以利用多个索引参数,并行访问存放元数据的数据库,从而同时查找出每个文件名称所对应的索引节点,并同时将每个文件名称对应的索引节点中所包含的元数据提取出来,如此,就得到了多个文件名称各自所对应的元数据,这样,就完成了在数据库模式下针对文件系统路径的元数据查找。
在一些实施例中,当索引参数由每个文件名称对应的父节点标识,以及每个名称组成时,元数据查找设备就是将每个文件名称和其所对应的父节点标识作为入参,并发访问存放元数据的数据库,从而能够利用数据库的并发访问优势,相比于串行从数据库逐个查找多个文件名称各自所对应的元数据,能够大幅度地提高元数据查找的效率。
同理的,在另一些实施例中,当索引参数为每个文件名称对应的索引节点的节点标识时,元数据查找设备就是利用每个文件名称所对应的节点标识,并发访问存放元数据的数据库,也可以充分利用数据库的并发访问优势,大幅提高元数据查找的效率。
需要说明的是,在一些实施例中,当元数据查找设备通过并行访问,无法从存放元数据的数据库中同时查找到每个文件名称对应的索引节点时(这可能是由于映射关系与数据库产生了偏差引起的),元数据查找设备也会将并行访问数据库的过程,降级为串行访问数据库。
本申请实施例中,元数据查找设备对所要查找的文件的路径进行切分,得到多个文件名称,然后基于多个文件名称,从系统内存的目录项缓存中,在较短的时间内快速地确定出所有文件名称各自所对应的索引参数,得到多个索引参数,然后再利用多个索引参数并发访问存放元数据的数据库,一次性得到多个文件名称各自对应的元数据,从而在数据库模式下查找元数据时,能够充分利用系统内存的查找速度优势和数据库的并发访问优势,极大地减少数据库模式下查找所需求的元数据的时间,提高了数据库模式下元数据查找的效率。
在本申请的一些实施例中,基于多个文件名称,从系统内存的目录项缓存中,逐层确定出多个文件名称对应的多个索引参数,即S103的具体实现过程,可以包括:S1031-S1034,如下:
S1031、将当前文件名称的上一个文件名称所对应的上一个索引节点标识,作为当前文件名称对应的当前父节点标识。
元数据查找设备在从目录项缓存中逐层确定多个文件名称对应的多个索引参数时,会先从多个文件名称中,确定出当前文件名称的上一个文件名称,然后获取为上一个文件名称所确定出的索引节点的节点标识,即获取上一个索引节点标识。接着,元数据查找设备将上一个索引节点标识作为当前文件名称的父节点标识,将该父节点标识记为当前父节点标识,从而,元数据查找设备能够明确当前文件名称对应的索引节点的父节点是哪个。
需要说明的是,当前文件名称为多个文件名称中除根目录之外的任意一个,即当前文件名称可以是从根目录的下一个文件名称开始,直至指定的文件(包括指定的文件)中的任意一个文件名称。
可以理解的是,上一个索引节点标识是利用上一个文件名称对应的父节点标识和上一个文件名称作为索引参数,从系统内容的目录项缓存中查找出的,这个过程是在针对当前文件名称进行索引节点的节点标识确定之前的就完成的,即在上一轮次完成的,从而上一个索引节点标识是已知的。
S1032、利用当前父节点标识和当前文件名称,构成当前文件名称对应的当前索引参数。
元数据查找设备可以将当前父节点标识和当前文件名称整合为一个集合,将该集合作为当前索引参数,也可以利用当前父节点和当前文件名称构成一个元组,将所构成的元组作为当前索引参数。当然,元数据查找设备还可以利用其它的方式,对当前父节点标识和当前文件名称进行其他的处理,将处理结果作为当前索引参数,本申请在此不作限定。
S1033、依据当前索引参数,从目录项缓存中,查找出当前文件名称所对应的索引节点的当前节点标识。
本申请实施例中,目录项缓存中具有多个缓存项,每个缓存项中存储一个键值对,在该键值对中,是以每个索引节点对应的父节点标识和文件名称作为键,以文件名称对应的索引节点的节点标识作为值。元数据查找设备在确定出当前文件名称所对应的当前索引参数之后,为下一个轮次的索引参数做准备时,可以依据利用键值对所描述的映射关系,为当前索引参数,即将当前父节点标识和当前文件名称,索引出某个索引节点的节点标识,将该节点标识作为当前节点标识。
S1034、将当前节点标识作为新的当前父节点标识,将下一个文件名称作为新的当前文件名称,以及依据新的当前父节点标识和新的当前文件名称构成新的当前索引参数,直至对每个文件名称均确定出对应的索引参数时,得到多个文件名称对应的多个索引参数。
元数据查找设备将当前节点标识作为新的父节点标识,将当前文件名称的下一个文件名称,作为新的当前文件名称,然后再利用新的父节点标识和新的当前文件名称,重复确定当前文件名称对应的当前索引参数的过程,然后再继续确定出新的当前节点标识的过程,如此循环往复,直至对所有的文件名称都确定出对应的所有参数,得到多个索引参数。
本申请实施例中,元数据查找设备能够在系统内存中的目录项缓存中,利用循环的形式逐层查找出多个文件名称所对应的多个索引参数,从而能够利用内存快速读取的特点,在较短的时间内从内存中获取到文件系统路径的所有文件名称各自对应的索引参数,以便于后续并发访问数据库。
在本申请的一些实施例中,上一个文件名称为根目录,上一个索引节点标识为根目录对应的根节点标识,即当前文件名称,为多个文件名称中根目录之后的首个文件名称,此时,将当前文件名称的上一个文件名称所对应的上一个索引节点标识,作为当前文件名称对应的当前父节点标识,即S1031的具体实现过程,可以包括:S1031a,如下:
S1031a、将根目录对应的根节点标识,作为当前文件名称对应的当前父节点标识。
元数据查找设备在当前文件名称的上一个文件名称为根目录时,就会先获取根目录所对应的根节点标识,然后将根节点标识,直接作为当前文件名称对应的父节点标识,以便于后续从根节点标识开始,逐层向下查找每个文件名称所对应的父节点标识,从而得到每个文件名称对应的索引参数。
可以理解的是,根目录所对应的根节点标识,一般默认的节点标识。例如,根节点标识默认为1,或者是默认为2等,本申请在此不作限定。
本申请实施例中,在上一个文件名称为根目录时,元数据查找设备会直接将默认的根节点标识,直接作为当前父节点标识,以便于确定出利用当前父节点标识和当前文件名称,确定出当前文件名称对应的当前索引参数。
在本申请的一些实施例中,在当前文件名称为根目录时,当前文件名称的上一个文件名称不存在,此时,元数据查找设备会直接将根目录作为索引参数(一般根目录是默认与根节点标识对应的),这样就能够直接在目录项缓存中直接得到根节点标识。
参见图5,图5是本申请实施例提供的元数据查找方法的一个可选的流程示意图二。在本申请的一些实施例中,多个索引参数中的每个索引参数包括:每个文件名称对应的父节点标识和每个文件名称,即每个文件名称对应的索引参数都是由每个文件名称及其对应的父节点标识组成的,从而,依据多个索引参数,从存放元数据的数据库中,并行提取多个文件名称各自对应的元数据,即S104的具体实现过程,可以包括:S1041-S1043,如下:
S1041、通过每个文件名称和每个文件名称对应的父节点标识,并行访问存放元数据的数据库,得到每个文件名称对应的索引节点。
元数据查找设备利用每个文件名称对应的父节点标识,以及每个文件名称所构成的索引参数,同时作为存放元数据的数据库的入参,以利用这些入参,在同一时刻并发访问该数据库,从而利用这些入参并发得到每个文件名称对应的索引节点。
示例性的,图6是本申请实施例提供的并发访问数据库的示意图。如图6所示,从文件系统路径中共切分出了3个文件名称,这3个文件名称各自对应的索引参数分别为P0、P1和P2,其中,每个文件名称所对应的索引参数都为(父节点标识,文件名称)。元数据查找设备利用P0、P1和P2同时访问存放元数据的数据库6-1,从而实现并发访问数据库,这样,以便于一次性得到3个文件名称各自所对应的元数据。
S1042、从每个文件名称对应的索引节点中,分别提取出每个文件名称对应的元数据。
S1043、当对多个文件名称均提取到对应的元数据时,得到多个文件名称各自对应的元数据。
元数据查找设备在得到每个文件名称对应的索引节点之后,就会将每个文件名称对应的索引节点所包含的元数据提取出来,从而得到每个文件名称所对应的元数据。当元数据查找设备对所有的文件名称均确定出对应的元数据时,就得到了多个文件名称各自对应的元数据,实现针对文件系统路径的了元数据的查找。
本申请实施例中,元数据查找设备能够利用每个文件名称和其对应的父节点标识,在同一时刻并发访问存放元数据的数据库,从而一次性地从该数据库中确定出每个文件名称所对应的索引节点,并从索引节点中提取出元数据,充分利用了数据库的并发访问特性,提高了数据库的吞吐量,大大减少了从存放元数据的数据库中查找元数据的时间。
基于图5,参见图7,图7是本申请实施例提供的元数据查找方法的一个可选的流程示意图三。在本申请的一些实施例中,在通过每个文件名称和每个文件名称对应的父节点标识,并行访问所述存放元数据的数据库,得到每个文件名称对应的索引节点之后,即在S1041之后,该方法还可以包括:S1044-S1045,如下:
S1044、当对每个文件名称对应的索引节点进行拼接,未得到索引节点路径时,依据每个文件名称,从存放元数据的数据库中,逐层查找出每个文件名称对应的最新索引节点。
本申请实施例中,元数据查找设备会按照每个文件名称的顺序,依次将每个文件名称对应的索引节点拼接起来,然后判断拼接结果是否可以为一个完整的路径,该路径就是索引节点路径。当元数据查找设备发现拼接结果不是完整的路径,即将每个文件名称对应的索引节点拼接得不到索引节点路径时,则说明依据某个文件名称和其所对应的父节点标识,从存放元数据的数据库中所拿到的索引节点的节点标识可能已经发生了变化,与目录项缓存中的映射关系出现了问题。在此情况下,为了保证元数据提取的准确性,元数据查找设备会将并发访问数据库降级为串行访问数据库,以利用从根目录查找到根节点标识,从根节点标识开始,逐层确定出每个文件名称的父节点标识,以基于父节点标识和文件名称,查找出每个文件名称对应的最新索引节点。
需要说明的是,元数据查找设备在判断拼接结果是否为完整的路径时,可以是依据拼接结果中是否存在节点标识的断层来确定的。例如,对于“/a/b/c”这个路径,若根节点为1,则其路径可以表示为(1,a)--(a,b)--(b,c)(逗号之前为父节点标识,逗号之后为文件名称),若是利用从目录项缓存中查找出的每个文件名称的索引节点进行拼接,所得到结果的为(1,a)--(b,c),显然,这个结果中存在断层,从而,元数据查找设备可以认为该拼接结果存在节点标识的断层。
S1045、从最新索引节点中,提取出每个文件名称对应的元数据,当对多个文件名称均提取到对应的元数据时,得到多个文件名称各自对应的元数据。
元数据查找设备在得到每个文件名称对应的最新索引节点之后,就会对最新索引节点所包含的元数据进行提取,从而得到每个文件名称对应的元数据,直至对所有的最新索引节点均完成了元数据的提取,得到多个文件名称各自对应的元数据。
本申请实施例中,元数据查找设备在发现利用每个文件名称对应的索引节点,拼接不出完整的路径时,就会将并发访问存放元数据的数据库的过程,降级为串行访问存放元数据的数据库的过程,从而为每个文件名称,确定出对应的最新索引节点,利用最新索引节点得到多个文件名称各自对应的元数据。如此,元数据查找设备在目录项缓存中的映射关系出现问题时,也能够保证查找出准确的元数据。
在本申请的一些实施例中,依据每个文件名称,从存放元数据的数据库中,逐层查找出每个文件名称对应的最新索引节点,即S1044的具体实现过程,可以包括:S1044a-S1044d,如下:
S1044a、将每个文件名称中除根目录之外的文件名称,依次作为当前文件名称。
S1044b、将当前文件名称的上一个文件名称对应的上一个最新索引节点的节点标识,作为当前文件名称的最新当前父节点标识。
需要说的是,由于根目录并没有上一个文件名称,从而,元数据查找设备将每个文件名称中,除去根目录之外的文件名称,轮流作为当前文件名称。其中,上一个最新索引节点是利用上一个文件名称对应的最新父节点标识和上一个文件名称作为索引参数,从存放元数据的数据库中查找出的。
可以理解的是,当上一个文件名称为根目录时,根节点标识就是上一个文件名称对应的最新父节点标识。
S1044c、依据最新当前父节点标识和当前文件名称,从存放元数据的数据库中,查找出当前文件名称对应的当前最新索引节点。
S1044d、当为每个文件名称均完成最新索引节点的查找时,得到每个文件名称对应最新索引节点。
元数据查找设备将最新当前父节点标识和当前文件名称作为入参,访问存放元数据的数据库,以查找出当前文件名称对应的最新索引节点。然后,元数据查找设备会将当前文件名称的下一个文件名称,作为新的当前文件名称,以对新的当前文件名称进行上述过程,从而形成循环。如此,在循环结束时,元数据查找设备完成了对每个文件名称查找最新索引节点的过程,从而得到每个文件名称对应的最新索引节点。
本申请实施例中,元数据查找设备将每个文件名称中除了根目录之外的其他文件名称,依次作为当前文件名称,将当前文件名称的最新父节点标识和当前文件名称作为入参,串行逐层访问存放元数据的数据库,从而利用循环,逐一为每个当前文件名称确定出对应的最新索引节点,以便于提取准确的元数据。
在本申请的一些实施例中,在依据每个文件名称,从存放元数据的数据库中,逐层查找出每个文件名称对应的最新索引节点之后,即在S1044之后,该方法还可以包括:S1046-S1048,如下:
S1046、将每个文件名称的上一个文件名称所对应的最新索引节点的节点标识,作为每个文件名称对应的最新父节点标识。
元数据查找设备在查找出每个文件名称对应的最新索引节点之后,会获取上一个文件名称对应的最新索引节点的节点标识,将获取到的节点标识作为每个文件名称的最新父节点标识。
可以理解的是,当某个文件名称为根目录时,其的上一个文件名称不存在,此时,元数据查找设备跳过为该文件名称确定最新父节点标识的过程,而是降级将该文件名称对应的节点标识,即根节点标识,作为根目录的下一个文件名称的最新父节点标识。
S1047、将最新父节点标识和每个文件名称,作为每个文件名称所对应的最新搜索节点的最新索引参数。
元数据查找设备利用每个文件名称对应的最新父节点标识和每个文件名称,构成集合或者是元组,将所构成的内容,作为最新搜索节点的最新索引参数。
S1048、建立每个文件名称对应的最新索引节点的节点标识,以及最新索引参数之间的最新映射关系。
之后,元数据查找设备会获取每个文件名称对应的最新搜索节点的节点标识,然后将最新索引参数作为键,将每个文件名称对应的最新索引节点的节点标识作为值,建立起最新映射关系。
本申请实施例中,元数据查找设备还能够在为每个文件名称找到对应的最新索引节点之后,还可以为每个文件名称确定出最新父节点标识,从而基于最新父节点标识构建出每个文件名称对应的最新搜索节点的最新索引参数,重新建立起最新索引参数与最新索引节点的节点标识之间的映射关系,如此,元数据查找设备就能够得到准确地映射关系了。
在本申请的一些实施例中,目录项缓存包括哈希表,哈希表用于记录不同索引节点对应的节点标识和索引参数之间的映射关系。示例性的,图8是本申请实施例提供的哈希表的示意图。如图8所示,哈希表8-1中包括了多个缓存项,即缓存项8-11、缓存项8-12,、……缓存项8-1n。每个缓存项中都将某个索引节点的索引参数,即父节点标识和文件名称作为键8-2,将该所有节点的节点标识作为值8-3,记录了该节点的索引参数和节点标识之间的映射关系。
从而,在目录项缓存包括哈希表,哈希表用于记录不同索引节点对应的节点标识和索引参数之间的映射关系的情况下,元数据查找设备在建立每个文件名称对应的最新索引节点的节点标识,以及最新索引参数之间的最新映射关系之后,即在S1048之后,该方法还可以包括:S1049或S10410,如下:
S1049、当哈希表中记录了每个文件名称对应的索引节点的节点标识和每个文件名称对应的索引节点的索引参数之间的映射关系时,利用最新映射关系,将哈希表中的每个文件名称对应索引节点的节点标识和每个文件名称对应的索引节点的索引参数之间的映射关系进行替换,得到更新后的哈希表。
元数据查找设备利用最新映射关系将哈希表中原先存在的每个文件名称对应的索引节点的节点标识,以及每个文件名称对应的搜索节点的索引参数之间的映射关系进行覆盖,从而实现利用最新映射关系对哈希表中的每个文件名称对应的索引节点的节点标识和每个文件名称对应的索引节点的索引参数之间的映射关系的替换,从而就能够得到更新后的哈希表。
S10410、当哈希表中不存在每个文件名称对应的索引节点的节点标识和每个文件名称对应的索引节点的索引参数之间的映射关系时,将最新映射关系添加至哈希表中,得到更新后的哈希表。
元数据查找设备在哈希表中缺少每个文件名称对应的索引节点的节点标识,以及每个文件名称对应的索引节点的索引参数之间的映射关系时,元数据查找设备会将最新映射关系添加到哈希表中,从而得到准确度更高的更新后的哈希表。
本申请实施例中,元数据查找设备还能够判断哈希表中每个文件名称对应的搜索节点的节点标识和每个文件名称对应的搜索节点的索引参数之间的映射关系是否存在,从而确定出应当是向哈希表中直接添加最新映射关系,还是利用最新映射关系替换原有的映射关系。如此,能够实现对哈希表中的映射关系的查漏补缺和更正,从而实现了目录项缓存的修复,以保证目录项缓存的可靠程度。
在本申请的一些实施例中,目录项缓存包括双向链表,双向链表用于表征不同索引节点对应的节点标识和索引参数之间的映射关系的使用热度。需要说明的是,双向链表与上述的哈希表的不同在于,双向链表是用来依据使用热度,来淘汰一部分不常用的映射关系,从而控制目录项缓存的大小,即双向链表用来存放热数据,淘汰冷数据,其中,使用热度可以为映射关系被使用的次数,或者是映射关系被使用的概率。示例性的,图9是本申请实施例提供的双向链表的示意图。如图9所示,双向链表9-1中的每个节点的头指针和尾指针(图中的虚线箭头)分别指向了存储了使用热度比自身的映射关系高的映射关系的缓存项,以及存储了使用热度比自身的的映射关系低的映射关系的缓存项,从而实现将哈希表8-1中的各个缓存项按照使用热度进行排列。
在此情况下,在依据所述当前索引参数,从目录项缓存中,查找出当前文件名称所对应的当前节点标识之后,即在S1033之后,该方法还可以包括:S1035,如下:
S1035、将当前索引参数和当前节点标识之间的映射关系,移动至双向链表的头部。
元数据在查找出当前文件名称对应的索引节点的当前节点标识之后,就会将当前节点标识和当前索引参数之间的映射关系,从其原本的位置,移动到双向链表的头部。也即,在当前索引参数命中目录项缓存,且其所对应的映射关系被记录在双向链表中时,元数据查找设备就会将当前索引参数和当前节点标识之间的映射关系的热度提高,以使得其不被淘汰出双向链表。
本申请实施例中,在当前索引参数命中目录项缓存时,元数据查找设备就会将当前索引参数和当前节点标识之间的映射关系移动到双向链表的头部,从而保证当前索引参数和当前节点标识之间的映射关系是热数据,以便于后续的快速使用。
在本申请的一些实施例中,目录项缓存包括双向链表,其中,双向链表用于表征不同索引节点对应的节点标识和索引参数之间的映射关系的使用热度,此时,在将最新映射关系添加至哈希表中,得到更新后的哈希表之后,即在S10410之后,该方法还可以包括:S10411,如下:
S10411、将最新映射关系,添加在双向链表的头部。
元数据查找设备在将最新映射关系添加至哈希表中之后,还可以将最新映射关系添加在双向链表的头部,从而保证新添加的最新映射关系,是目录项缓存中的热数据,以便于后续需要使用最新映射关系,能够及时查找到。
本申请实施例中,在目录项缓存中不存在当每个文件名称对应的索引节点的节点标识和每个文件对应的索引节点的索引参数之间的映射关系时,元数据查找设备除了将最新映射关系添加在哈希表中之外,还可以将最新映射关系添加在双向链表的头部,以使得最新映射关系是热数据,以便于后续使用。
在本申请的一些实施例中,在将最新映射关系,添加在双向链表的头部之后,该方法还可以包括:S10412-S10413,如下:
S10412、将位于双向链表的尾部的索引节点对应的节点标识和索引参数之间的映射关系,作为待删除映射关系。
S10413、删除待删除映射关系。
元数据查找设备为了使得目录项缓存容量可控,会对双向链表尾部所存储的映射关系进行删除,从而精简目录项缓存中映射关系的数量。此时,元数据查找设备提取双向链表尾部的索引节点对应的节点标识和索引参数之间的映射关系,然后将该映射关系作为待删除映射关系,接着将待删除映射关系从双向链表中删除,从而实现对映射关系的数量的精简。
本申请实施例中,元数据查找设备会对双向链表尾部的映射关系进行删除,从而精简双向链表中映射关系的数量,以使得目录项缓存容量可控。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
本申请实施例是在从数据库模式下查找指定路径的元数据的时实现的。首先,先对缓存内设计进行介绍。
缓存内的设计如图10所示,图10为本申请实施例提供的目录项缓存的示意图。目录项缓存10-1由哈希表10-11和双向链表10-12组成,哈希表10-11用来索引缓存项(不同索引节点对应的节点标识和索引参数之间的映射关系),键为(父节点标识,文件名称)(索引参数),值为索引节点的节点标识,查找的时间复杂度近似O(1),双向链表10-12,用头指针和尾指针将缓存项串起来,用来实现LRU(Least Recently Used,最近最少使用)缓存(不同索引节点对应的节点标识和索引参数之间的映射关系的使用热度),存放热数据,淘汰冷数据,并控制缓存大小。
继续参见图10,缓存项(映射关系)的值10-2只需要保存索引节点的节点标识,这里的节点标识由两个作用,其一是用于缓存项逐层查找的父节点使用(即上一个索引节点标识作为当前父节点标识),其二是用于数据库并行查找索引节点的父节点标识是由(以父节点标识和文件名称作为数据库的入参)。如此,逐层查找这类串行行为只会发生在内存,速度极快(利用了内存读写速度快的优势),然后通过逐层查找获得的多组(父节点标识,文件名称)并行访问数据库10-3,时延相当于一次数据库查询操作,大大提高了元数据查找效率。
图11是本申请实施例提供的查找指定路径的元数据的过程示意图。参见图11,在数据库模式下查找指定路径的元数据的过程可以包括:
S201、开始。
S202、以“/”(预设符号)切分指定路径。
S203、缓存内(系统内存)根据(父节点标识,文件名称)查找索引节点标识。
S204、判断缓存是否命中(即是否当前索引参数查找到对应的当前节点标识)。在缓存命中时,执行S205,在缓存没有命中时,执行S210。
S205、判断完整路径查找是否完成。在完成时,执行S206,否则回到S203。
S206、数据库(存放元数据的数据库)内根据多组(父节点标识,文件名称)(即多个索引参数)并行查找索引节点,并等待所有索引节点结果返回。
S207、判断数据库是否均命中。是则执行S208,否则执行S210。
S208、判断所有索引节点是否构成完整路径(对每个文件名称的索引节点进行拼接,得到索引节点路径)。在判断为是时,执行S209,在判断为否时,执行S214。
S209、提取所有索引节点中的元数据(从每个文件名称对应的索引节点中,分别提取出每个文件名称对应的元数据)。
S210、数据库内根据(父节点标识,文件名称)串行查找索引节点(降级为串行从数据库查找索引节点的过程)。
S211、判断数据库是否命中。是则执行S212,否则回到S210。
S212、判断完整路径是否查找完成。在完整路径查找完成时,执行S213,否则,执行S215。
S213、增加缓存内(父节点标识,文件名称)到索引节点标识的映射(建立最新索引节点的节点标识以及最新索引参数之间的最新映射关系,将最新映射关系添加至哈希表中)。之后,进入S209的处理过程。
S214、删除缓存内(父节点标识,文件名称)到索引节点标识的映射。之后,进入S210的处理过程。
S215、返回索引节点不存在的信息。
S216、结束。
缓存的(父节点标识,文件名称)到索引节点的节点标识的映射关系并不总是有效的,需要根据数据库查询结果去修复。例如,如图11所示,在中间映射关系缺失时,并行访问就降级为串行访问,并新增映射关系至缓存(添加最新映射关系至哈希表),这样,在下次相同路径查找元数据时,换乘能够全部命中,在此升级为并行访问。
同时,并行访问并不能保证所得到的索引节点可以构成完整路径,因为根据(父节点标识,文件名称)从数据库所得到的索引节点的节点标识可能已经发生变化,和缓存中的映射不一致,此时,需要再次降级为串行访问,从数据库获取到实际结果并对缓存映射关系进行修复。
缓存修复包括删除无效映射关系(将哈希表中的每个文件名称对应索引节点的节点标识和每个文件名称对应的索引节点的索引参数之间的映射关系进行替换)和增加有效映射关系(添加最新映射关系至哈希表)。
删除无效映射关系发生在数据库并行访问所得到的索引节点不能构成完整路径的情况下,而增加有效映射关系则发生在数据库串行访问所得到的索引节点能够构成完整路径的情况下,即完整路径对应的索引节点存在,如果(父节点标识,文件名称)到索引节点的节点标识的映射关系在缓存中已经存在,则增加操作会将其覆盖,替换成正确的索引节点的节点标识。如果缓存映射关系数量超过阈值,则需要依赖双向链表对映射关系进行LRU淘汰,即从双向链表尾部淘汰,缓存命中(将当前索引参数和当前节点标识之间的映射关系,移动至双向链表的头部)或新增(将最新映射关系,添加在双向链表头部)。通过这种方式,在下次遇到相同的文件路径时,缓存既能命中,又能给出正确的映射关系,而且缓存占比不高,容量可控。
通过上述方式,能够有效解决在数据库模式下元数据查找时时延高的问题,提高了大数据作业的性能。
下面继续说明本申请实施例提供的元数据查找装置255的实施为软件模块的示例性结构,在一些实施例中,如图3所示,存储在存储器250的元数据查找装置255中的软件模块可以包括:
路径获取模块2551,用于获取文件系统路径;所述文件系统路径为所要查找的文件的路径;
路径切分模块2552,用于对所述文件系统路径进行切分,得到多个文件名称;
参数确定模块2553,用于基于所述多个文件名称,从系统内存的目录项缓存中,逐层确定出所述多个文件名称对应的多个索引参数;其中,所述目录项缓存描述了各个索引节点之间的层级依赖关系;
元数据提取模块2554,用于依据所述多个索引参数,从存放元数据的数据库中,并行提取所述多个文件名称各自对应的元数据。
在本申请的一些实施例中,所述参数确定模块2553,还用于将当前文件名称的上一个文件名称所对应的上一个索引节点标识,作为所述当前文件名称对应的当前父节点标识;其中,所述当前文件名称为所述多个文件名称中除根目录之外的任意一个,所述上一个索引节点标识是利用所述上一个文件名称对应的父节点标识和所述上一个文件名称作为索引参数,从所述系统内存的所述目录项缓存中查找出的;利用所述当前父节点标识和所述当前文件名称,构成所述当前文件名称对应的当前索引参数;依据所述当前索引参数,从所述目录项缓存中,查找出所述当前文件名称所对应的当前节点标识;将所述当前节点标识作为新的当前父节点标识,将下一个文件名称作为新的当前文件名称,以及依据所述新的当前父节点标识和所述新的当前文件名称构成所述新的当前索引参数,直至对每个文件名称均确定出对应的索引参数时,得到所述多个文件名称对应的所述多个索引参数。
在本申请的一些实施例中,所述上一个文件名称为根目录,所述上一个索引节点标识为所述根目录对应的根节点标识;
所述参数确定模块2553,还用于将所述根目录对应的根节点标识,作为所述当前文件名称对应的当前父节点标识。
在本申请的一些实施例中,所述多个索引参数中的每个索引参数包括:每个文件名称对应的父节点标识和所述每个文件名称;
所述元数据提取模块2554,还用于通过所述每个文件名称和所述每个文件名称对应的父节点标识,并行访问所述存放元数据的数据库,得到所述每个文件名称对应的索引节点;从所述每个文件名称对应的索引节点中,分别提取出所述每个文件名称对应的元数据;当对所述多个文件名称均提取到对应的元数据时,得到所述多个文件名称各自对应的元数据。
在本申请的一些实施例中,所述元数据提取模块2554,还用于当对所述每个文件名称对应的索引节点进行拼接,未得到索引节点路径时,依据所述每个文件名称,从所述存放元数据的数据库中,逐层查找出所述每个文件名称对应的最新索引节点;从所述最新索引节点中,提取出所述每个文件名称对应的元数据,当对所述多个文件名称均提取到对应的元数据时,得到所述多个文件名称各自对应的元数据。
在本申请的一些实施例中,所述元数据提取模块2554,还用于将所述每个文件名称中除根目录之外的文件名称,依次作为当前文件名称;将所述当前文件名称的上一个文件名称对应的上一个最新索引节点的节点标识,作为所述当前文件名称的最新当前父节点标识;其中,所述上一个最新索引节点是利用所述上一个文件名称对应的最新父节点标识和所述上一个文件名称作为索引参数,从所述存放元数据的数据库中查找出的;依据所述最新当前父节点标识和所述当前文件名称,从所述存放元数据的数据库中,查找出所述当前文件名称对应的当前最新索引节点;当为所述每个文件名称均完成最新索引节点的查找时,得到所述每个文件名称对应最新索引节点。
在本申请的一些实施例中,所述元数据查找装置255,还包括:映射修复模块2555;
所述映射修复模块2555,用于将所述每个文件名称的上一个文件名称所对应的最新索引节点的节点标识,作为所述每个文件名称对应的最新父节点标识;将所述最新父节点标识和所述每个文件名称,作为所述每个文件名称所对应的最新搜索节点的最新索引参数;建立所述每个文件名称对应的最新索引节点的节点标识,以及所述最新索引参数之间的最新映射关系。
在本申请的一些实施例中,所述目录项缓存包括哈希表,所述哈希表用于记录不同索引节点对应的节点标识和索引参数之间的映射关系;
所述映射修复模块2555,还用于当所述哈希表中记录了所述每个文件名称对应的索引节点的节点标识和所述每个文件名称对应的索引节点的索引参数之间的映射关系时,利用所述最新映射关系,将所述哈希表中的所述每个文件名称对应索引节点的节点标识和所述每个文件名称对应的索引节点的索引参数之间的映射关系进行替换,得到更新后的哈希表;当所述哈希表中不存在所述每个文件名称对应的索引节点的节点标识和所述每个文件名称对应的索引节点的索引参数之间的映射关系时,将所述最新映射关系添加至所述哈希表中,得到所述更新后的哈希表。
在本申请的一些实施例中,所述目录项缓存包括双向链表,所述双向链表用于表征不同索引节点对应的节点标识和索引参数之间的映射关系的使用热度;
所述映射修复模块2555,还用于将所述当前索引参数和所述当前节点标识之间的映射关系,移动至所述双向链表的头部。
在本申请的一些实施例中,所述目录项缓存包括双向链表,所述双向链表用于表征不同索引节点对应的节点标识和索引参数之间的映射关系的使用热度;
所述映射修复模块2555,还用于将所述最新映射关系,添加在所述双向链表的头部。
在本申请的一些实施例中,所述映射修复模块2555,还用于将位于所述双向链表的尾部的索引节点对应的节点标识和索引参数之间的映射关系,作为待删除映射关系;删除所述待删除映射关系。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的元数据查找方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行元数据查找指令,当可执行元数据查找指令被处理器执行时,将引起处理器执行本申请实施例提供的元数据查找方法,例如,如图4示出的方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行元数据查找指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行元数据查找指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper Text Markup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行元数据查找指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。