在文件系统中搜索元数据和标签的异构索引的系统和方法与流程

文档序号:14203854阅读:224来源:国知局
相关申请案交叉申请本申请要求于2015年8月25日递交的发明名称为“在文件系统中搜索元数据和标签的异构索引的系统和方法”的第14/835,399号美国非临时专利申请案的在先申请优先权,该在先申请的内容以引入的方式并入本文。
背景技术
::数据存储的规模正快速的增长。为了利用这些数据存储,可能需要高效的用于搜索这些存储并提供基础维护以保持存储最新且有效的方法。此外,还可能需要具有使用纯语言文本以识别与数据的技术细节相反的数据的能力。因此,可能需要搜索纯语言文本标识和技术细节以获取结果文件的过程。技术实现要素:在一实施例中,所公开的是一种在异构索引中处理查询的装置。所述装置包括:接收器,用于接收用户的查询,所述查询包括期望文件的至少一个期望属性;处理器,耦合到所述接收器且用于搜索所述异构索引。所述处理器用于通过以下方式搜索所述异构索引:从所述接收器接收所述查询;接收到所述查询后,在所述异构索引中为所述期望属性的存在测试存储分区的布隆过滤器;当所述布隆过滤器指示所述存储分区中不存在所述期望属性时,忽略所述存储分区并进入所述异构索引中的下一个存储分区;当所述布隆过滤器指示所述存储分区中存在所述期望属性时,搜索所述存储分区以确定所述存储分区中的一个或多个文件中的哪一个具有所述期望属性。在另一实施例中,所公开的是一种为存储分区更新异构搜索索引的方法。所述方法包括:接收用户的更新消息,所述更新消息指示将在所述异构搜索索引上执行的操作,所述异构搜索索引包括属性,所述属性包括元数据和标签;记录日志条目,所述日志条目指示接收到所述用户的所述更新消息;根据所述更新消息确定所述将要执行的操作;根据所述更新消息更新所述异构搜索索引;记录日志条目,所述日志条目指示所述接收到的用户的更新消息执行成功。在又一实施例中,所公开的是一种从异构搜索索引中的系统故障中恢复的方法。所述方法包括:在接收到多个待执行的动作时,将所述动作输入到日志中,所述动作的接收时间先于所述动作的执行时间,所述待执行的动作包括以下至少两项:更新所述异构搜索索引的布隆过滤器,所述布隆过滤器指示所述异构搜索索引中的标签或元数据的存在;更新所述异构搜索索引的k维树;以及更新所述异构搜索索引的键值存储;在动作完成时,将已执行的动作输入到日志中,以指示第一个动作执行成功并继续第二个动作。在又一实施例中,更新单元用于为存储分区更新异构搜索索引。所述更新单元可以包括接收单元,用于接收用户的更新消息,所述更新消息指示将在所述异构搜索索引上进行的操作,所述异构搜索索引包括属性,所述属性包括元数据和标签。所述更新单元还可以包括:记录单元,用于记录日志条目,所述日志条目指示接收到所述用户的所述更新消息;确定单元,用于根据所述更新消息确定所述将要执行的操作。所述异构搜索索引可以根据所述更新消息更新。所述记录单元可以记录日志条目,所述日志条目指示所述接收到的用户的更新消息执行成功。在又一实施例中,恢复单元用于从异构搜索索引中的系统故障中恢复。所述恢复单元可以包括日志记录单元,用于在接收到多个待执行的动作时,将所述动作输入到日志中,所述动作的接收时间先于所述动作的执行时间。所述待执行的动作包括:更新所述异构搜索索引的布隆过滤器,所述布隆过滤器指示所述异构搜索索引中的标签或元数据的存在。所述恢复单元还可以包括更新单元,用于更新所述异构搜索索引的k维树,以及更新所述异构搜索索引的键值存储。所述日志记录单元可以在动作完成时将已执行的动作输入到日志中,以指示第一个动作执行成功并继续第二个动作。通过以下结合附图和权利要求的详细描述,这些以及其它特征将会被更清楚地理解。附图说明为了更透彻地理解本发明,现参阅结合附图和具体实施方式而描述的以下简要说明,其中的相同参考标号表示相同部分。图1示出了包括文件元数据和标签的网元可读文件;图2为索引服务器的一实施例的示意图;图3为索引服务器查询流程的一实施例的流程图;图4为索引服务器插入或删除以及更新流程的一实施例的流程图;图5为索引服务器集群系统的一实施例的示意图;图6为用于索引搜索的网元的一实施例的示意图。具体实施方式首先应理解,尽管下文提供一项或多项实施例的说明性实施方案,但所公开的系统和/或方法可使用任何数目的技术来实施,无论该技术是当前已知还是现有的。本发明决不应限于下文所说明的说明性实施方案、附图和技术,包括本文所说明并描述的示例性设计和实施方案,而是可在所附权利要求书的范围以及其等效物的完整范围内修改。本文公开的是用于建立包括机器可读元数据和语义标签的文件属性的索引的方式。所公开的实施例促进了根据接收到的用户的查询进行的索引搜索。文件存储空间划分成了多个分区,所述分区用于存储文件和伴随这些文件的用于搜索的属性索引。每个分区包括用于指示上述分区中给定属性存在的布隆过滤器,用于将元数据的固定类别编入索引的k维树,以及各自将标签的一个类别编入索引的多个键值存储。采用记录分区中文件存在的哈希表,可以根据接收到的用户的更新消息更新和维护k维树和键值存储索引。通过创建接收到的用户的更新消息和成功执行的更新消息的日志,可以建立基于日志的恢复过程。图1为包括文件元数据和标签的网元可读文件100,或称为媒体文件,的实施例。多种信息用于标记网元可读文件,以便识别、搜索、排序、索引、呈现网元可读文件,或与网元可读文件交互。元数据102示出了标记网元可读文件的一个示例。在一些实施例中,元数据102可称为机器可读文件属性并包括网元可读文件的自动生成的技术细节。例如,元数据102包括文件系统标识值、索引节点号、文件类型、文件访问许可、文件硬链接、文件所有者、群组、文件大小、文件创建时间戳、文件访问时间戳、文件修改时间戳、文件更改时间戳、文件名和/或其他类似的技术文件属性。标签104示出了标记网元可读文件的另一个示例。在一些实施例中,标签104可称为人可读文件属性并包括关于网元可读文件的用户引入的语义细节。例如,对于如电影等网元可读文件,标签104包括标题、导演、一个或多个演员的名单、类型、起源国、语言、释放日期、长度、备注和/或其他类似的语义细节。例如,对于如音频文件等网元可读文件,标签104包括歌曲名、一个或多个歌手名、专辑名、一个或多个制作人的姓名、曲目数和/或其他类似的语义细节。图2为索引服务器200的一实施例的示意图。服务器200包括一个或多个分区202,每个分区包括一个或多个指示文件属性存在于分区中的布隆过滤器204,索引多个固定文件元数据字段(如图1所示的元数据102)的k维树(kd-tree)索引206,以及各自索引文件标签(如图1所示的标签104或动态文件元数据字段)的一个类别的一个或多个键值存储(kv-store)208。在一实施例中,每个分区202代表服务器200上的部分可用文件空间且针对在分区202中进行索引的标签的每个类别包括一个kv存储208。例如,索引四个标签类别(如标题、演员、导演和类型)的分区202将包括四个kv存储208,每个kv存储208有一个相关联的标签类别。在一实施例中,每个分区202针对每个动态添加的元数据类别还包括一个kv存储208。服务器200还包括用于处理查询请求的查询处理器210和用于处理插入、删除和/或更新请求的更新处理器212。当具有与文件相关联的元数据和/或标签的网元可读文件被添加到分区202时,该文件会被添加到分区202中的哈希表中,以记录该文件在该分区202中的存在。此外,该文件的元数据在该分区202的kd树索引206中进行索引,该文件的标签在对应于各自标签类别的kv存储208中进行索引。查询处理器210接收用户的查询,该查询包括一个或多个查询属性。查询属性可以是识别网元可读文件的元数据和/或标签的任意组合,其中,针对该网元可读文件的搜索正在进行。查询处理器210解析该查询并为查询属性的存在测试每个分区202的每个布隆过滤器204。在一实施例中,每个分区202针对每个文件属性(如在该分区202中进行索引的元数据和/或标签)包括一个布隆过滤器204。例如,在一个服务器200中,若每个分区202索引27个组合的元数据和标签的文件属性,每个分区202包括27个布隆过滤器204。总的来说,若每个分区202索引n个文件属性,每个分区202包括n个布隆过滤器204。每个布隆过滤器204包括多个比特,每个比特用作布隆过滤器204所在的分区202中的特定文件属性的存在的指示符。例如,当查询处理器210针对布隆过滤器204测试包括一个或多个查询属性的查询时,将查询属性与布隆过滤器204的比特相比较,以确定具有所述查询属性的文件是否存在于布隆过滤器204所在的特定分区202中。当查询处理器210从布隆过滤器204接收到指示具有期望查询属性的文件很可能存在于布隆过滤器204所在的分区202中的肯定响应时,所述查询处理器210搜索kd树索引206和kv存储208以识别具有期望查询属性的文件,并将这些文件返回给用户。存储在分区202中的网元可读文件可以从分区202中删除,额外的网元可读文件可以插入到分区202中,和/或分区202中现有的网元可读文件可通过修改一个或多个元数据字段和/或标签更新。在一实施例中,更新处理器212接收用户的包括一个或多个将在分区202中执行的动作的请求。如上所述,动作可以是将网元可读文件插入到分区202中,将网元可读文件从分区202中删除,或者更新分区202中已存在的网元可读文件的元数据或标签。当更新处理器212在分区202中执行动作时,布隆过滤器204、kd树索引206和kv存储208会相应更新,以反映更新处理器212执行动作后分区202中存在的元数据和/或标签的变化。可以理解,在一实施例中,查询处理器210、更新处理器212和分区202位于同一个设备上,例如,下文中进一步详细描述的单个网元。还可以理解,可替代实施例的存在使得查询处理器210、更新处理器212和分区202分布在多个设备中,例如,在云计算环境中。例如,在一实施例中,查询处理器210和更新处理器212可以位于第一设备上,分区202可以位于第二设备上,例如,网络附加存储设备。图3为索引服务器查询流程300的一实施例的流程图。例如,方法300可以实施,以高效的搜索文件属性的索引,以响应用户的查询。在步骤302中,查询处理器(例如图2所示的查询处理器210)接收查询。所述查询包括相应的网元可读文件期望的一个或多个属性。在步骤304中,查询处理器通过布隆过滤器(例如图2所示的布隆过滤器204)测试索引服务器(例如图2所示的服务器200)中的第一分区(例如图2所示的分区202),以确定文件存在于具有所述查询指示的属性的特定分区的可能性。查询服务器从布隆过滤器接收响应,所述响应指示所述期望属性肯定不存在于所述分区中或所述期望属性很可能存在于所述分区中。当查询处理器从布隆过滤器接收到指示所述期望属性肯定不存在于所述分区中的响应时,在步骤306中,查询处理器忽略所述特定分区并在索引服务器的其余分区中继续流程300。当查询处理器从布隆过滤器接收到指示所述期望属性很可能存在于所述分区中的响应时,在步骤308中,查询处理器为与kd树键匹配的元数据测试所述分区的kd树索引(例如图2所示的kd树索引206)。当找到与kd树键匹配的元数据时,在步骤312中,查询处理器搜索kd树索引以识别具有所述查询指示的元数据的特定网元可读文件。在搜索kd树索引以识别具有所述查询指示的元数据的特定网元可读文件后或者如果在步骤308中未找到与kd树键匹配的元数据,在步骤310中,查询处理器测试kv存储(例如图2所示的kv存储208),以确定查询中的标签是否与kv存储键匹配。当找到与kv存储键匹配的标签时,在步骤316中,查询处理器搜索kv存储索引以识别具有所述查询指示的元数据的特定网元可读文件。在搜索kv存储索引以识别具有所述查询指示的标签的特定网元可读文件后或者如果在步骤310中未找到与kv存储键匹配的标签,在步骤314中,查询处理器确定在步骤308中的kd树索引中或在步骤310的kv存储索引中是否未找到查询中的属性。当在任一索引中未找到查询中的属性时,在步骤320中,查询处理器扫描分区中的所有文件以找到与所述查询匹配的任意文件。在步骤318中,查询处理器整合步骤312中kd树搜索、步骤316中kv存储索引搜索和步骤320中对所有文件扫描的结果。在步骤322中,将结果返回给用户。在流程300的可替代实施例中,在搜索kd树之前搜索kv存储,使得步骤310和步骤316中的一个或全部可以在步骤308和步骤312中的一个或全部之前执行。在流程300的另一可替代实施例中,在搜索kv存储之前搜索kd树。在流程300的另一可替代实施例中,例如,在具有多个处理器和/或多个核心的网元上,大致同时地搜索kv存储和kd树,使得kv存储的搜索和kd树的搜索大致同时地开始和/或结束。图4为索引服务器插入或删除以及更新流程400的一实施例的流程图。例如,可以实施更新流程400,以响应于更新处理器接收到对应于分区的更新消息。在步骤402中,更新处理器(例如图2所示的更新处理器212)接收更新消息。所述更新消息指示将在分区(例如图2所示的分区202)中执行的动作。所述动作可以是将网元可读文件插入到分区中,从分区中删除网元可读文件,或更新与分区中已存在的网元可读文件相关联的元数据或标签,然后更新一个或多个索引(例如上述图2中讨论的kd树索引和/或kv存储索引)。在步骤404中,更新处理器写入消息日志。消息日志记录更新消息的内容且为了将来使用或参考在如上所述的备份系统中进行维护。在步骤406中,更新处理器确定更新消息规定了何种操作。若所述更新消息指示将要将文件插入到分区中或者将要通过新的元数据和/或标签更新分区中现有的文件,在步骤408中,更新处理器确定所述文件是否存在于分区的哈希表中,如上所述。若所述文件不在分区的哈希表中,在步骤410中,更新处理器确定所述分区是否针对所述文件有可用空间或者所述分区是否已满。当所述分区已满,在步骤412中,更新处理器创建新的分区并指定该分区为当前分区,然后在步骤414中,更新哈希表以指示所述文件已置于新创建的分区中。更新哈希表后或者如果在步骤408中确定所述分区针对所述文件有可用空间,在步骤416中,更新处理器将当前指定的分区用于将来的动作。若在步骤408中,在哈希表中找到了所述文件且因此更新了它的元数据和/标签,在步骤418中,更新处理器在分区中找到所述文件。在步骤420中,更新处理器插入与插入到步骤416或418中所确定分区的文件相关联的元数据和/或标签,更新分区的布隆过滤器、kd树以及kv存储以反映新文件和与它相关的元数据和/或标签。在步骤422中,更新处理器写入提交消息,所述提交消息指示更新消息中的在步骤404中记录在消息日志中的任务已经在步骤424中的返回之前完成。若在步骤406中,更新处理器确定更新消息指示将要从分区中删除文件,在步骤426中,更新处理器确定所述文件是否存在于分区的哈希表中,如上所述。若所述文件不在分区的哈希表中,在步骤428中,更新服务器记录无法找到所述文件并在步骤424中返回。若在哈希表中找到所述文件,在步骤430中,更新处理器找到所述文件所在的分区。在步骤432中,更新处理器删除与删除的文件相关联的元数据和/或标签,更新分区的布隆过滤器、kd树以及kv存储。在步骤434中,更新处理器写入提交消息,所述提交消息指示更新消息中的在步骤404中记录在消息日志中的任务已经在步骤424中的返回之前完成。在一实施例中,如下文进一步详细讨论,步骤404中的消息日志与步骤422和434中的提交日志的组合用于实现系统备份。例如,一个或多个更新消息被传递给了索引服务器(例如图2中的服务器200),只有一部分更新消息执行成功。对消息日志和提交日志的组合进行检查以确定哪些更新消息执行成功,哪些更新消息开始执行但尚未完成,哪些更新消息有待于开始执行。此备份系统可以通过以下方式实现:允许服务器通过匹配提交日志条目到消息日志条目和更新消息自动地从故障中恢复。图5为索引服务器集群系统500的一实施例的示意图。在一实施例中,上述图2所示的服务器200可扩展并能够集成到基于集群的系统中,例如系统500。系统500包括查询调度器502、一个或多个包括集群管理器504的集群、恢复管理器506、索引服务器508(例如图2所示的服务器200),以及一个或多个用于数据存储的文件服务器510。查询调度器用于通过路由接收到的用户的查询到集群管理器504以及从系统500的集群返回查询结果给用户连接用户和剩余系统500。可以理解,查询调度器502、集群,以及文件服务器510可以存在于云计算环境中且不必位于单个设备上或单个位置中,例如,同一个数据中心。集群管理器504根据从查询调度器502接收的查询指导系统504的每个集群的功能。例如,在从查询调度器502接收到查询后,集群管理器504根据流程300和400将查询传递给索引服务器508进行处理,如上所公开(例如,在文件服务器510上搜索具有特定元数据和/或标签属性的文件的存在,和/或更新文件的元数据和/或标签属性)。多个集群随着每个查询传输到每个集群的集群管理器504并行实现,每个集群包括索引服务器508。在一实施例中,查询可以由特别指定的索引服务器508执行。在其他实施例中,查询可以由查询调度器502确定的可用索引服务器508执行。恢复管理器506用于帮助系统500通过利用消息和提交日志从系统故障中恢复,如图4所示的流程400中所述。当索引服务器508发生故障,查询调度器502将该索引服务器508从可用的索引服务器508的集合中移除,以确定查询分配。发生故障的索引服务器508回到操作状态并通过恢复管理器506恢复。在索引服务器508执行更新消息之前,更新消息由恢复管理器506记入日志。在更新消息执行成功后,恢复管理器506输入提交日志条目以表示第一个记入日志的消息已经完成。当索引服务器508发生故障,它根据恢复管理器506维护的日志恢复。例如,若发生故障的索引服务器508在提交日志#100后发生故障,索引服务器508必须获取从消息日志#101开始并持续到系统500接收到的最新操作的更新后的消息日志,然后相应地更新所有索引数据结构。通过实施此基于日志的系统恢复方法,可以认为系统具有备份以防止故障。本发明所述的至少部分特征/方法可在网元(networkelement,简称ne)600中实施,例如,本发明所述的特征/方法可通过硬件、固件和/或在硬件上安装运行的软件实现。所述网元可以为通过网络传输数据的任何设备,例如,交换机、路由器、网桥、服务器和客户端等。图6为网元600的一实施例的示意图,所述网元可以用于处理索引服务器查询和/或作为如图2所示的服务器200更新。网元600可以是任何设备(例如,接入点、接入点基站、路由器、交换机、网关、网桥、服务器、客户端、用户设备、移动通信设备等。),其通过网络、系统和/或域传输数据。此外,术语网络“单元”、网络“节点”、网络“部件”、网络“模块”,和/或类似术语可以互换使用,用于概括性地描述网络设备;并且除非本发明另有特别规定和/或声明,这些术语不具有特定或特殊含义。在一实施例中,网元600可以是用于支持多个存储分区的装置,如流程300和/或流程400所述,每个分区能够索引,搜索,更新结构。所述网元600可包括与收发器(tx/rx)620耦合的一个或多个下游端口610,所述收发器可以为发送器、接收器、或者二者的结合。所述tx/rx620可以通过下游端口610向其他网络节点发射帧和/或从其他网络节点接收帧。类似地,所述网元600可以包括与多个上游端口640耦合的另一个tx/rx620,其中所述tx/rx620可以通过所述上游端口640向其他节点发射帧和/或从其他节点接收帧。所述下游端口610和/或上游端口640可以包括电和/或光发射和/或接收组件。在另一实施例中,所述网元600可以包括与所述tx/rx620耦合的一根或多根天线。所述tx/rx620可以通过一根或多根天线无线地发射数据到其他网元和/或接收其他网元的数据(例如,数据包)。处理器630可以与所述tx/rx620耦合,并可以用于处理帧和/或确定将数据包发送(例如,发射)到哪些节点。在一实施例中,所述处理器630可以包括一个或多个多核处理器和/或存储模块650,其可以充当数据存储、缓存等。处理器630可以实现为通用处理器或者一个或多个专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)和/或数字信号处理器(digitalsignalprocessor,简称dsp)的一部分。虽然示出的是单个处理器,但处理器630不限于此,并且可包括多个处理器。处理器630可以用于进行多目的地帧的通信和/或处理。图6还示出了存储模块650,可以与处理器630耦合,并可以是用于存储各种类型数据的非瞬时性介质。存储模块650可以包括存储设备,包括辅助存储器、只读存储器(read-onlymemory,简称rom)和随机存取存储器(randomaccessmemory,简称ram)。辅助存储器通常包括一个或多个磁盘驱动器、光驱、固态驱动器(solidstatedrive,简称ssd)和/或磁带驱动器,并且用于数据的非易失性存储,而且如果ram的容量不足以存储所有工作数据辅助存储器则用作溢流数据存储设备。辅助存储器可用于当加载到ram中程序被选择执行时存储这类程序。rom用于存储指令,可能还存储在程序执行期间读取的数据。rom是非易失性存储器设备,通常具有相对于辅助存储器的大存储容量来说较小的内存容量。ram用于存储易失性数据,可能还存储指令。访问rom和ram通常都快于访问辅助存储器。存储模块650可以用于容纳用于执行本发明所述的各种实施例的指令。在一实施例中,存储模块650可以包括索引服务器查询流程660,流程660可在处理器630上实现且用于根据上述图3中所讨论的流程300搜索数据存储设备的分区的索引。在另一实施例中,存储模块650可以包括索引服务器更新流程670,流程670可以在处理器630上实现且用于根据上述图4中所讨论的流程400更新数据存储的分区的索引中的元数据和/或标签。应理解的是,通过编程可执行指令和/或将可执行指令载入网元600,处理器630和/或存储器650中的至少一个发生变化,将网元600部分转换成特定机器或装置,例如,具有本发明所述的新颖功能的多核转发架构。加载可执行软件至计算机所实现的功能可以通过现有技术中公知的设计规则转换成硬件实施,这在电力工程和软件工程领域是很基础的。决定使用软件还是硬件来实施一个概念通常取决于对设计稳定性及待生产的单元数量的考虑,而不是从软件领域转换至硬件领域中所涉及的任何问题。通常,仍在经受频繁改变的设计可以优选在软件中实施,因为重改硬件实施方案比重改软件设计更为昂贵。通常,稳定及大规模生产的设计更适于在硬件(如asic)中实施,因为运行硬件实施的大规模生产比软件实施更为便宜。设计通常可以以软件形式进行开发和测试,之后通过现有技术中公知的设计规则转变成asic中等同的硬件实施,该asic硬线软件指令。以与由新asic控制的机器为特定机器或装置相同的方式,同样,已经编程和/或加载有可执行指令的计算机可以被看作特定机器或装置。本发明的任何处理可以通过使处理器(例如,通用多核处理器)执行计算机程序来实施。在这种情况下,可以使用任何类型的非瞬时性计算机可读介质向计算机或网络设备提供计算机程序产品。计算机程序产品可存储在计算机或网络设备中的非瞬时性计算机可读介质中。非暂时性计算机可读媒体包含任何类型的有形存储媒体。非瞬时性计算机可读介质的示例包括磁性存储介质(如软盘、磁带、硬盘驱动器等)、光磁性存储介质(如磁光盘)、只读光盘(compactdiscread-onlymemory,简称cd-rom)、可录光盘(compactdisc-readable,简称cd-r)、可重写光盘(compactdisc-rewritable,简称cd-r/w)、数字多功能光盘(digitalversatiledisc,简称dvd)、蓝光(注册商标)光盘(blue-raydisc,简称bd)和半导体存储器(如掩模rom、可编程rom(programmablerom,简称prom)、可擦prom、闪存rom和ram)。还可以使用任何类型的瞬时性计算机可读介质向计算机或网络设备提供计算机程序产品。瞬时性计算机可读介质的示例包括电信号、光信号和电磁波。瞬时性计算机可读介质可以经由有线通信线路(例如,电线或光纤)或无线通信线路将程序提供给计算机。虽然本发明中已提供若干实施例,但应理解,在不脱离本发明的精神或范围的情况下,本发明所公开的系统和方法可以以许多其它特定形式来体现。本发明的实例应被视为说明性而非限制性的,且本发明并不限于本文本中所给出的细节。例如,各种元件或组件可以在另一系统中组合或整合,或者某些特征可以省略或不实施。此外,在不脱离本发明的范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、模块、技术或方法进行组合或合并。展示或论述为彼此耦合或直接耦合或通信的其它项也可以采用电方式、机械方式或其它方式经由某一接口、设备或中间组件间接地耦合或通信。其他变化、替代和改变的示例可以由本领域的技术人员在不脱离本文精神和所公开的范围的情况下确定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1