在存储节点上存储数据的制作方法

文档序号:12785982阅读:310来源:国知局
在存储节点上存储数据的制作方法与工艺
本申请是国际申请日为2012年1月19日、于2013年9月10日进入中国国家阶段、国家申请号为201280012751.4、名称为“在存储节点上存储数据”的中国发明专利申请的分案申请。有关申请的交叉引用本申请要求对通过引用将其公开内容结合于此、名称为STORINGDATAONSTORAGENODES、于2011年1月20日提交的第13/010,548号美国专利申请的优先权。
技术领域
本说明书涉及在物理存储设备上存储数字数据。
背景技术
:数据分条(striping)包括跨越存储设备阵列存储数据。取代向单个设备写入所有数据,向多个设备并行写入数据,从而使得写入数据的总速率大于仅用单个设备而可能的速率。数据分条可以与其他数据存储技术(例如,存储冗余数据、随着数据的检错或者纠错码)组合以创建快速、可靠的存储。技术实现要素:计算机存储系统在存储节点阵列上存储文件。每个存储节点包括一个或者多个存储设备,并且每个存储节点包括高速缓存(例如,随机存取存储器(RAM))和更慢存储装置(例如,硬盘)。高速缓存可以比更慢存储装置存储数据更快。例如,存储节点可以是具有高速缓存能力的硬盘。计算机存储系统从文件向第一存储节点写入数据直至第一存储节点的高速缓存为满,并且然后从文件向第二存储节点写入数据。第一存储节点从第一存储节点的高速缓存向第一存储节点的更慢存储装置复制数据。计算机存储系统继续向各种存储设备写入数据,从而使得完全存储文件。无论存储节点是否被附着到例如个别计算机或者多个数据处理装置,都可以用相同方式写入向存储节点写入的数据。一般而言,可以在包括以下动作的方法中体现在本说明书中描述的主题内容的一个创新方面:接收将跨越各自包括高速缓存的多个存储节点存储的文件;通过各自在不同存储节点上存储文件的多个部分存储文件,包括向第一存储节点的高速缓存写入第一部分直至确定第一存储节点的高速缓存为满并且响应于确定第一存储节点的高速缓存为满选择不同的第二存储节点;以及为文件的每个部分记录该部分的位置,该位置至少指示存储该部分的存储节点。这一方面的其他实施例包括对应系统、装置和在计算机存储设备上编码的被配置用于执行方法的动作的计算机程序。这些和其他实施例可以可选地包括以下特征中的一个或者多个特征。确定第一存储节点的高速缓存为满包括确定用于写入第一部分的数据存储速率已经下降。确定第一存储节点的高速缓存为满包括比较第一部分的数量与第一存储节点的高速缓存的已知大小并且确定数量等于或者超过已知大小。选择第二存储节点包括从存储节点随机选择第二存储节点。选择第二存储节点包括选择具有以往最远写入时间的存储节点。动作还包括向多个存储节点中的每个存储节点分配权值,并且其中选择第二存储节点包括使用权值。每个存储节点的权值基于存储节点的性能特性。选择第二存储节点基于以下各项中的一项或者多项:第二存储节点的性能特性、第二存储节点的使用历史和用于第二存储节点的以往性能记录。选择第二存储节点基于以下各项中的一项或者多项:由第二存储节点存储的绝对数据数量和由第二存储节点存储的相对于第二存储节点的容量的数据数量。第一存储节点响应于向第一存储节点的高速缓存写入第一部分从第一存储节点的高速缓存向更慢存储装置复制第一部分。存储文件包括向第二存储节点写入第二部分。向第二存储节点写入第二部分包括向第二存储节点的高速缓存写入第二部分直至确定第二存储节点的高速缓存为满。存储文件包括继续向各种存储节点写入文件的部分直至在存储节点中完全存储文件。动作还包括:接收对于文件的请求;从第一存储节点读取第一部分;以及从第二存储节点读取第二部分。可以实施在本说明书中描述的主题内容的特定实施例以便实现以下优点中的一个或者多个优点。计算机存储系统可以通过向具有高速缓存的存储节点写入来增加它的存储速度。在高速缓存模式中更频繁地保持存储节点以减少延时并且增加吞吐量。计算机存储系统可以使用存储日志来恢复存储的数据。在附图和以下描述中阐述在本说明书中描述的主题内容的一个或者多个实施例的细节。主题内容的其他特征、方面和优点将从描述、附图和权利要求变得清楚。附图说明图1是示例存储系统的框图。图2是用于在各自具有高速缓存的存储节点的阵列上存储数据的示例技术的流程图。图3是用于在各自具有高速缓存的存储节点的阵列上存储数据的示例技术的流程图。图4是用于从各自具有高速缓存的存储节点的阵列读取数据的示例技术的流程图。图5是用于存储数据的示例计算系统的示意图。在各种附图中的相似标号和标示指示相似要素。具体实施方式图1是示例存储系统102的框图。存储系统102包括可以在地理上分布的一个或者多个数据处理装置。存储系统102在存储节点110a-110d的阵列上存储数字数据文件。存储系统102可以通过计算机网络106从客户端设备104或者从另一来源接收电子文件(或者“文件”)。文件可以是任何数据,例如,文本、图像、音频内容、视频内容或者其组合。文件可以如例如通过网络文件系统协议由存储系统102接收。其他协议是可能的。存储系统102可以例如通过在正常操作期间产生服务日志来创建数据以用于存储。存储系统102可以基于其他数据(例如,通过从高分辨率源图像产生小缩略图图像)创建数据以用于存储。存储引擎108确定如何分布文件的内容以用于在存储节点110a-110d上存储。每个存储节点110包括高速缓存112和一个或者多个更慢存储装置114设备。高速缓存112可以例如是RAM、闪存、硬盘等。更慢存储装置114也可以是RAM或者硬盘,但是更慢存储装置114比高速缓存112花费更长时间来存储数据。更慢存储装置114通常具有比高速缓存112更大的存储容量。首先向高速缓存112写入向存储节点110写入的数据,因为可以在高速缓存112中比更慢存储装置114更快地存储数据。存储节点110然后从高速缓存112向更慢存储装置114复制数据。例如,存储节点110可以是具有RAM高速缓存的硬盘。首先向RAM高速缓存写入并且然后向盘复制向存储节点110写入的数据。在另一示例中,存储节点110是具有共享RAM高速缓存的硬盘阵列,例如,廉价盘冗余阵列(RAID)设备。虽然存储节点110包括多个盘,但是存储引擎108可以将存储节点在逻辑上作为单个设备来寻址。存储引擎108通过从文件向存储节点写入数据的一部分来存储文件。存储引擎108向该存储节点写入数据直至确定存储节点的高速缓存为满。高速缓存在它存储达到或者接近它的容量的数据数量以使得它不再可以接受新数据以用于存储时为满。以下描述用于确定高速缓存为满的技术。存储引擎108然后从文件向不同存储节点写入数据的另一部分直至确定不同存储节点的高速缓存为满。由存储引擎108写入的部分未必在文件中相邻,并且无需有序写入文件的内容。存储引擎108继续从文件在各种存储节点上写入数据直至完全写入文件的内容。备选地,写入少于整个文件的内容。如果所有存储节点具有为满的高速缓存,则存储引擎108可以等待直至高速缓存具有自由空间(在向更慢存储装置复制它的内容之后)或者向更慢存储装置直接写入。在一些实现方式中,无论是否所有存储节点具有为满的高速缓存,存储引擎108继续选择用于写入到的新存储节点直至它发现可用的存储节点。通过向具有可用高速缓存存储的存储节点写入,无论高速缓存是否为满,与向单个设备写入单个文件比较,存储引擎108增加它的数据存储速率。存储引擎108跟踪来自文件的写入的数据在存储日志116中的位置。存储日志116包括为了从存储节点恢复文件而必需的信息。例如,存储日志116可以包括数据在第一存储节点上的位置。存储日志116也包括在位置与文件之间的关联(例如,通过在表的相同记录或者行中包括位置和文件名称)。以下在表1中举例说明示例存储日志。文件名存储节点地址时间戳文件1A1-501B200-3002C50-1253文件2A150-2504C200-3005表1例如,考虑用于存储如由表1所示的“文件1”的示例场景。第一列将前三行与文件1关联。第一行指示在由时间戳1给定的时间,存储引擎108从文件1向存储节点A的地址1-50写入数据。第二行指示在由时间戳2给定的时间,存储引擎108从文件1向存储节点B的地址200-300写入数据。存储引擎108例如比存储节点A更多使用在存储节点B的地址,因为存储节点B具有比存储节点A更大的高速缓存或者因为存储节点A的高速缓存在存储引擎108开始写入数据时部分地为满。第三行指示在由时间戳3给定的时间,存储引擎108从文件1向存储节点C的地址50-125写入数据。表1所示的地址是示例地址。一般而言,地址引用数据在存储节点的更慢存储装置上的位置。即使通常初始地向高速缓存写入数据,地址也引用更慢存储装置上的位置,因为存储节点从高速缓存向更慢存储装置复制数据。例如,存储节点可以将向它的高速缓存写入的数据的位置映射到更慢存储装置上的目的地位置。存储引擎108可以使用各种技术来确定存储节点的高速缓存为满。例如,存储引擎108可以监视存储节点接受数据的速率。在速率下降时,存储引擎108确定存储节点的高速缓存为满。在另一示例中,存储引擎108可以比较它已经向存储节点写入的数据数量与存储节点的高速缓存的指定的大小。在写入的数据数量超过指定的大小时,存储引擎108确定存储节点的高速缓存为满。存储引擎108可以存储用于存储节点的指定的大小,或者存储引擎108可以在它开始向存储节点写入数据之前向存储节点查询指定的大小。在一些实现方式中,无需确定,因为存储引擎108向存储节点仅写入指定的大小的数量并且然后选择不同存储节点。那些实现方式例如在存在足够高速缓存存储装置以假设每个高速缓存将在再次被选择时为空时有用。在存储引擎108确定存储节点的高速缓存为满时,它可以使用各种技术来选择不同存储节点。考虑以下四种示例技术。在第一示例中,存储引擎108可以随机选择另一存储节点。这例如在多个存储引擎向各种存储节点写入并且难以确定是否任何给定的存储节点将具有可用高速缓存存储装置时有用。在第二示例中,存储引擎108可以使用存储日志116以选择不同存储节点。存储引擎108通常选择任何存储节点中的具有过去最远写入时间的存储节点。例如,考虑表1中所示的示例存储日志。在存储节点A、B和C之中,存储节点B具有过去最远写入时间(在时间戳2)。在第三示例中,存储引擎108可以使用加权随机化。加权随机化涉及向存储节点分配权值并且基于权值选择存储节点。例如,假设所有存储节点属于A和B这两类之一。属于B类的节点平均比属于A类的节点快两倍(例如,因为属于B类的节点使用更加新的硬件)。存储引擎108可以比来自A类的节点更频繁地选择来自B类的节点以提高系统性能。在一些实现方式中,向个别存储节点分配权值W[k],并且存储引擎108选择存储节点以使得选择节点#k的可能性与成比例。在第四示例中,存储引擎108可以用伪随机方式选择节点。选择节点的可能性基于与节点有关的各种因素,例如,性能特性(例如,高速缓存速度)、使用历史(例如,使用存储日志116)、以往性能记录(例如,避免持续地或者暂时地比其他节点更慢的节点)。存储引擎108可以在选择不同存储节点时使用其他信息。存储引擎108可以根据用于存储的计划或者方案选择存储节点。例如,存储引擎108可以使用存储节点已经存储的绝对数据数量、由存储节点存储的相对于它的容量的数据数量(例如,防止写入或者尝试写入到为满的节点)、数据年龄(例如,其中比旧数据更频繁地访问新数据)等等。存储引擎108可以例如使用存储节点的负荷和容量以有助于跨越所有可用存储装置的均匀存储利用并且避免让所有数据存储于很少节点上。在另一示例中,存储引擎108可以例如通过监视当前或者计划的数据访问模式来平衡写入数据的速度和延时与数据处理容量。这例如对避免在单个存储节点或者仅少数存储节点上存储大量高需求数据有用。存储引擎108可以例如使用具体数据的以往数据访问模式或者使用关于数据的其他信息(例如,是否新近生成它)来标识高需求数据。图2是用于在各自具有高速缓存的存储节点的阵列上存储数据的示例技术200的流程图。技术200可以由计算机系统(例如,图1的计算机系统102)执行。出于例示的目的,将关于执行技术200的系统描述该技术。系统标识文件以用于在存储节点上存储(步骤202)。例如,系统可以从客户端设备(例如,图1的客户端设备104)接收文件。系统选择存储节点(步骤204)。例如,系统可以随机选择存储节点,或者系统可以使用存储日志(例如,图1的存储日志116)来选择存储节点。系统从文件在选择的存储节点存储数据(步骤206)。例如,系统可以向选择的存储节点发送固定数量的数据,或者系统可以用流发送数据持续固定数量的时间。系统记录存储的数据在选择的存储节点的位置(步骤208)。例如,系统可以在存储日志(例如,图1的存储日志116)中记录位置。系统关联存储的数据的位置与文件(例如,使用文件名或者文件描述符)。系统确定是否完全存储文件(步骤210)。如果存储了文件,则系统标识另一文件(返回到步骤202)。如果未存储文件,则系统确定选择的存储节点的高速缓存是否为满(步骤212)。例如,系统可以监视向存储节点的写入的数据速率,或者比较存储节点的指定的大小与写入的数据数量。如果选择的存储节点的高速缓存为满,则系统选择另一存储节点(返回到步骤204)。如果选择的存储节点的高速缓存未满,则系统继续从文件向选择的存储节点写入数据(返回到步骤206)。图3是用于在各自具有高速缓存的存储节点的阵列上存储数据的示例技术300的流程图。技术300可以由计算机系统(例如,图1的计算机系统102)执行。出于例示的目的,将关于执行技术300的系统描述该技术。系统接收文件(步骤302)。系统从文件向存储节点的高速缓存写入数据的一部分直至确定存储节点的高速缓存为满(步骤304)。在一些实现方式中,存储节点响应于向存储节点的高速缓存写入数据的该部分从存储节点的高速缓存向更慢存储装置复制数据的该部分。在向更慢存储装置复制数据之后,存储该数据的高速缓存位置可以例如被擦拭干净(例如,清零)或者被标记为可用于写入。在一些实现方式中,确定存储节点的高速缓存为满包括确定数据存储速率已经下降。在一些实现方式中,确定存储节点的高速缓存为满包括比较数据数量与存储节点的高速缓存的已知大小并且确定该数量超过已知大小。系统记录数据的该部分在存储节点上的位置并且关联该位置与文件(步骤306)。系统响应于确定存储节点的高速缓存为满选择不同存储节点(步骤308)。在一些实现方式中,选择不同存储节点包括从存储节点随机选择不同存储节点。在一些实现方式中,选择不同存储节点包括访问写入时间和存储节点的日志并且选择具有以往最远写入时间的存储节点。系统从文件向不同存储节点写入数据的另一部分(步骤310)。在一些实现方式中,从文件向不同存储节点写入数据的另一部分包括向不同存储节点的高速缓存写入数据直至确定不同存储节点的高速缓存为满。系统记录数据在不同存储节点上的位置并且关联位置与文件(步骤312)。图4是用于从各自具有高速缓存的存储节点的阵列读取数据的示例技术400的流程图。技术400可以由计算机系统(例如,图1的计算机系统102)执行。出于例示的目的,将关于执行技术400的系统描述该技术。系统接收对于文件的请求(步骤402)。例如,请求者可以是客户端设备,例如,图1的客户端设备104。系统标识具有来自文件的数据的存储节点(步骤404)。例如,系统可以访问如下存储日志,该存储日志具有用于各种文件的数据的位置,例如,图1的存储日志116。系统从标识的存储节点读取数据(步骤406)。通常,系统从存储节点的更慢存储装置读取数据,因为存储节点已经从它的高速缓存向它的更慢存储装置复制了数据;然而,在一些情况下,系统可以从高速缓存读取数据以提高性能(例如,其中数据近来被写入到高速缓存并且尚未被重写或者清零)。系统确定是否已经读取文件中的所有数据(步骤408)。例如,系统可以确定在存储日志中是否存在用于文件的附加条目,或者比较读取的数据数量与文件(例如,随着请求而接收的或者存储于存储日志中的)的大小。如果已经读取了用于文件的所有数据,则系统从文件向请求者提供数据(步骤410)。如果尚未读取用于文件的所有数据,则系统标识具有来自文件的数据的另一存储节点(返回到步骤404)。图5是用于存储数据的示例计算系统502的示意图。在操作中,系统502直接地或者通过网络580与一个或者多个存储节点590通信。系统502包括一个或者多个数据处理装置。尽管在图5中示出仅一个数据处理装置,但是可以使用多个数据处理装置。可以在地理上分布系统502。例如,系统502可以包括在各种地理位置的多个数据处理装置。系统502包括各种模块,例如,计算机程序指令的模块,这些模块包括用于向存储节点写入数据(例如,使用图2的技术200)的写入引擎504;用于从存储节点读取数据(例如,使用图4的技术400)的读取引擎506;以及用于管理存储日志(例如,图1的存储日志116)的日志引擎。每个模块被配置用于在系统502上运行。例如,模块可以作为系统502上的操作系统的一部分、作为系统502上的应用或者作为系统502上的操作系统的一部分和应用的一部分来运行。虽然图示了若干软件模块,但是可以在更少或者更多软件模块中实施服务器的功能。另外,可以在由一个或者多个网络或者其他适当通信介质连接的一个或者多个数据处理装置上分布软件模块。系统502也包括硬件或者固件设备,这些设备包括一个或者多个处理器512、一个或者多个附加设备514、计算机可读介质516、通信接口518和一个或者多个用户接口设备520。每个处理器512能够执行用于在系统502内执行的指令。每个处理器512能够执行在计算机可读介质516上或者在存储设备(比如附加设备514之一)上存储的指令。系统502使用它的通信接口518以例如通过网络580与一个或者多个计算机590通信。用户接口设备520的示例包括显示器、相机、扬声器、麦克风、触觉反馈设备、键盘和鼠标。系统502可以例如在计算机可读介质516或者一个或者多个附加设备514(例如,软盘设备、硬盘设备、光盘设备或者磁带设备中的一个或者多个设备)上存储实施与以上描述的模块关联的操作的指令。可以在数字电子电路装置中或者在计算机软件、固件或者硬件(包括在本说明书中公开的结构及其结构等效物)中或者在它们中的一项或者多项的组合中实施在本说明书中描述的主题内容和操作的实施例。可以将在本说明书中描述的主题内容的实施例实施为在计算机存储介质上编码的用于由数据处理装置执行或者控制数据处理装置的操作的一个或者多个计算机程序,即,一个或者多个计算机程序指令模块。备选地或者附加地,可以在人为生成的传播的信号(例如,机器生成的电、光或者电磁信号)上对程序指令编码,该信号被生成用于对信息编码以用于向适当接收器装置传输以供数据处理装置执行。计算机存储介质可以是计算机可读存储设备、机器可读存储衬底、随机或者串行存取存储器阵列或者设备或者它们中的一项或者多项的组合或者被包含于机器可读存储设备、机器可读存储衬底、随机或者串行存取存储器阵列或者设备或者它们中的一项或者多项的组合中。另外,尽管计算机存储介质不是传播的信号,但是计算机存储介质可以是在人为生成的传播的信号中编码的计算机程序指令的源或者目的地。计算机存储介质也可以是一个或者多个单独物理部件或者介质(例如,多个CD、盘或者其他存储设备)或者被包含于一个或者多个单独物理部件或者介质中。可以将在本说明书中描述的操作实施为数据处理装置对在一个或者多个计算机可读存储设备上存储的或者从其他来源接收的数据执行的操作。术语“数据处理装置”涵盖所有种类的用于处理数据的装置、设备和机器、举例而言包括可编程处理器、计算机、芯片上的系统或者前述各项中的多项或者组合。该装置可以包括专用逻辑电路装置,例如,FPGA(现场可编程门阵列)或者ASIC(专用集成电路)。该装置除了硬件之外也可以包括为讨论的计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统、跨平台运行时环境、虚拟机或者它们中的一项或者多项的组合的代码。该装置和执行环境可以实现各种不同计算模型基础结构,比如web服务、分布式计算和网格计算基础结构。可以用包括编译或者解译语言、说明或者过程语言的任何形式的编程语言编写计算机程序(也被称为程序、软件、软件应用、脚本或者代码),并且可以用任何形式部署它、包括部署为独立程序或者部署为适合于在计算环境中使用的模块、部件、子例程、对象或者其他单元。计算机程序可以、但是无需对应于文件系统中的文件。程序可以被存储于保持其他程序或者数据的文件(例如,存储于标记语言文档中的一个或者多个脚本)的一部分中、专用于讨论的程序的单个文件中或者多个协同文件(例如,存储一个或者多个模块、子程序或者代码部分的文件)中。计算机程序可以被部署用于在一个计算机上或者在位于一个地点或者分布于多个地点并且由通信网络互连的多个计算机上执行。在本说明书中描述的过程和逻辑流程可以由一个或者多个可编程处理器执行,该一个或者多个可编程处理器执行一个或者多个计算机程序以通过对输入数据操作并且生成输出来执行动作。过程和逻辑流程也可以由专用逻辑电路装置(例如,FPGA(现场可编程门阵列)或者ASIC(专用集成电路))执行并且也可以将装置实施为专用逻辑电路装置。举例而言,适合于执行计算机程序的处理器包括通用和专用微处理器二者以及任何种类的数字计算机的任何一个或者多个处理器。一般而言,处理器将从只读存储器或者随机存取存储器或者二者接收指令和数据。计算机的基本单元是用于根据指令执行动作的处理器以及用于存储指令和数据的一个或者多个存储器设备。一般而言,计算机也将包括用于存储数据的一个或者多个海量存储设备(例如,磁盘、磁光盘或者光盘)或者被操作地耦合用于从该一个或者多个海量存储设备接收数据或者向该一个或者多个海量存储设备发送数据或者二者。然而,计算机无需具有这样的设备。另外,计算机可以被嵌入于另一设备中,聊举数例,例如,移动电话、个人数字助理(PDA)、移动音频或者视频播放器、游戏控制台、全球定位系统(GPS)接收器或者便携存储设备(例如,通用串行总线(USB)快闪驱动)。适合于存储计算机程序指令和数据的设备包括所有形式的非易失性存储器、介质和存储器设备,举例而言包括半导体存储器设备,例如,EPROM、EEPROM和闪存设备;磁盘,例如,内部硬盘或者可去除盘;磁光盘;以及CD-ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路装置补充或者被并入于专用逻辑电路装置中。为了提供与用户的交互,可以在计算机上实施在本说明书中描述的主题内容的实施例,该计算机具有用于向用户显示信息的显示设备(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器)以及用户可以用来向计算机提供输入的键盘和指点设备,例如,鼠标或者跟踪球。其他种类的设备也可以用来提供与用户的交互;例如,向用户提供的反馈可以是任何形式的感官反馈,例如,视觉反馈、听觉反馈或者触觉反馈;并且可以用包括声音、话音或者触觉输入的任何形式接收来自用户的输入。此外,计算机可以通过向由用户使用的设备发送文档和从该设备接收文档(例如,通过响应于从用户的客户端设备上的web浏览器接收的请求向该web浏览器发送网页)来与用户交互。可以在计算系统中实施在本说明书中描述的主题内容的实施例,该计算系统包括例如作为数据服务器的后端部件或者包括中间件部件(例如,应用服务器)或者包括前端部件(例如,具有图形用户界面或者Web浏览器(用户可以通过该图形用户界面或者Web浏览器与在本说明书中描述的主题内容的实现方式交互)的客户端计算机)或者一个或者多个这样的后端、中间件或者前端部件的任何组合。系统的部件可以由任何数字数据通信形式或者介质(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”)、互联网(例如,因特网)和对等网络(例如,自组织对等网络)。计算系统可以包括客户端和服务器。客户端和服务器一般相互远离并且通常通过通信网络交互。客户端和服务器的关系借助在相应计算机上运行并且相互具有客户端-服务器关系的计算机程序而产生。在一些实施例中,服务器向客户端设备传输数据(例如,HTML页面)(例如,用于向与客户端设备交互的用户显示数据和从该用户接收用户输入)。可以在服务器从客户端设备接收在客户端设备生成的数据(例如,用户交互的结果)。尽管本说明书包含许多具体实现方式细节,但是不应将这些解释为限制任何发明的或者可以要求保护的内容的范围,而是对具体发明的具体实施例特有的特征的描述。在本说明书中在不同的实施例的背景中描述的某些特征也可以在单个实施例中被组合实施。反言之,在单个实施例的背景中描述的各种特征也可以在多个实施例中单独地或者在任何适当子组合中被实施。另外,虽然上文可以将特征描述为在某些组合中动作并且甚至起初这样要求保护,但是来自要求保护的组合的一个或者多个特征可以在一些情况下从该组合中被删除,并且要求保护的组合可以涉及子组合或者子组合的变型。类似地,尽管在附图中以特定顺序描绘操作,但是这不应被理解为要求以所示特定顺序或者以依次顺序执行这样的操作或者执行所有所示操作以实现希望的结果。在某些境况中,多任务和并行处理可以是有利的。另外,在上文描述的实施例中的各种系统部件的分离不应被理解为在所有实施例中要求这样的分离,并且应当理解描述的程序部件和系统一般可以被一起集成于单个软件产品中或者封装到多个软件产品中。已经这样描述了主题内容的具体实施例。其他实施例在所附权利要求的范围内。在一些情况下,在权利要求中记载的动作可以按不同顺序被执行而仍然实现希望的结果。此外,在附图中描绘的过程未必需要所示特定顺序或者依次顺序以实现希望的结果。在某些实现方式中,多任务和并行处理可以是有利的。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1