用于用户定义的函数的容器框架的制作方法

文档序号:24059256发布日期:2021-02-26 13:24阅读:116来源:国知局
用于用户定义的函数的容器框架的制作方法
用于用户定义的函数的容器框架


背景技术:

[0001]
本说明书涉及数据库系统。
[0002]
数据库将数据组织到具有列和行的表中。唯一键标识每个表中的每一行。特定行代表特定实体的实例,并且该行中的列存储归属于该实例的值。通过在两个表之一中包含用于链接行的唯一键的列,可以将一个表中的行链接到另一表中的行。
[0003]
数据库可以划分为多个段(segment)。通过相应的段实例查询段,这些段实例是由称为段节点的物理或虚拟计算节点执行的计算机程序。每个段节点都有自己的存储和处理能力。在主机的指导下,每个段实例都可以处理来自客户端的查询的一部分。主机可以收集来自每个段实例的结果,并将最终结果返回给客户端。
[0004]
用户可以用查询语言编写数据库查询。查询语言是计算机编程语言,其可用于创建和更新数据库以及从这些数据库中检索和操纵数据。查询语言通常包括一组定义的操作以支持此功能。通常,特定数据库的段实例专门配置为以特定查询语言处理查询。本说明书将这些特定查询语言称为主(primary)查询语言。
[0005]
除了使用主查询语言中的预定义操作外,数据库用户还可以创建和使用以主查询语言编写的自定义函数。一些数据库还可以处理包含以辅助编程语言编写的函数的查询,这些辅助编程语言是与那些数据库的主查询语言不同的编程语言。本说明书将此类自定义函数和以辅助编程语言编写的函数称为用户定义的函数。尽管某些数据库可以处理用户定义的函数,但是这样做可能会效率低下。即,相对于执行以主查询语言编写的查询,执行用户定义的函数会消耗不成比例的计算资源量,例如内存或处理能力,这会破坏其他用户的数据库的正常操作。此外,用户定义的函数可能尚未经过全面测试,并且可能包含会禁用数据库或破坏数据的恶意代码。


技术实现要素:

[0006]
本说明书描述了在云计算平台上实现的分布式数据库系统,该系统可以处理隔离容器中的用户定义的函数。容器是通过操作系统级虚拟化实现的隔离的用户空间实例。容器共享托管容器的各个计算系统的计算资源,例如内存或处理能力。计算系统可以动态调整容器之间的计算资源分配。
[0007]
数据库系统可以从客户端设备接收查询。该查询可以用主查询语言编写,该语言支持对可能以其他编程语言编写的用户定义的函数的调用。如果查询完全用主查询语言编写,并且不包含对用户定义的函数的调用,则由一个或更多个主段主机(primary segment host)实现的一个或更多个段实例可以完整地处理查询。主段主机可以是物理或虚拟计算节点。例如,主段主机可以是物理计算机、虚拟机、容器或这三者的某种组合。
[0008]
如果查询包括对用户定义的函数的调用,则系统可以分配一个或更多个容器以处理用户定义的函数。本说明书将这些分配的容器称为udf容器。
[0009]
udf容器与主段主机不同。即,udf容器不是主段主机,并且主段主机不是也不实现udf容器。系统可以例如通过向udf容器分配单独的计算资源以将udf容器与主段主机隔离。
[0010]
系统可以专门配置udf容器以处理用户定义的函数。例如,系统可以将每个udf容器配置为具有库(library),该库以辅助编程语言定义操作,以该辅助编程语言编写用户定义的函数。这样的库可以促进用户定义的函数的有效执行。
[0011]
系统分配并初始化udf容器后,系统可以指示主段主机向udf容器提供用户定义的函数以及一个或更多个数据库段。然后,udf容器可以处理用户定义的函数,例如,通过从数据库段中检索特定数据。当用户定义的函数执行完成时,udf容器可以将结果提供给主段主机。此后,主段主机可以将结果转发到发送查询的客户端设备。
[0012]
本说明书中描述的主题可以在特定实施例中实现,以实现以下优点中的一个或更多个。与在主段主机上相比,本文描述的系统可以在隔离的udf容器中更有效、更安全地处理用户定义的函数。
[0013]
用户定义的函数通常会低效地使用计算资源。这是因为数据库系统通常被优化为处理以特定查询语言编写的查询。在具有单独计算资源的隔离的udf容器中执行用户定义的函数可确保用户定义的函数不会使用数据库的所有计算资源。这减少了过载事件的发生,过载事件会影响查询速度和一致性。
[0014]
udf容器还可以包含以辅助编程语言定义操作的库。这允许系统处理具有对用这些辅助编程语言编写的用户定义的函数的调用的查询,而无需重新配置数据库的段实例,也无需将以辅助编程语言定义的操作转换为主查询语言的语句,这是时间密集的过程。
[0015]
用户定义的函数还可包含恶意代码或漏洞代码,这些代码可能会使数据库瘫痪或破坏其数据。该系统可以通过在无法访问主段主机上的段实例或数据库段的隔离的udf容器中执行用户定义的函数来减轻恶意代码的风险。因此,恶意代码不会干扰数据库的正常操作。由于udf容器与数据库系统隔离,因此它们还阻止用户定义的函数访问未经授权的文件系统。
[0016]
本说明书的主题的一个或更多个实施例的细节在附图和以下描述中阐述。根据说明书、附图和权利要求书、本主题的其他特征,方面和优点将变得显而易见。
附图说明
[0017]
图1是示例云计算平台的图。
[0018]
图2是示例容器池的图。
[0019]
图3是用于在隔离的容器中执行用户定义的函数的示例过程的流程图。
[0020]
在各个附图中,相同的附图编号和名称表示相同的元件。
具体实施方式
[0021]
图1是示例云计算平台100的图。云计算平台100提供可以实现分布式数据库的计算资源和服务,包括物理计算机、虚拟机、容器和软件。
[0022]
包括客户端设备102的客户端设备可以通过有线或无线网络104访问在云计算平台100上实现的数据库。网络104可以是局域网(lan),其在有限区域(例如住宅、学校、实验室或办公楼)中连接计算机。局域网包括以太网和wi-fi网络。该网络也可以是更大的网络,包括广域网(wan)或因特网。客户端设备102可以创建、更新或查询数据库。
[0023]
云计算平台100包括一个或更多个主段主机110a-110n。主段主机110a-110n是实
现数据库的一个或更多个段实例的计算资源,例如物理计算机、虚拟机、容器或这些的某种组合。在一些实现中,每个主段主机是托管多个容器的物理计算机或虚拟机。在这样的实现中,每个容器实现数据库的相应段实例。在本说明书中,这些容器称为主容器。
[0024]
如上所述,容器是通过操作系统级虚拟化实现的隔离的用户空间实例。容器共享各自计算系统的计算资源。计算系统可以动态调整容器之间的计算资源分配,并且可以将不同级别的计算资源分配给在同一台物理计算机上运行的不同容器。
[0025]
主容器负责实现处理用主查询语言编写的查询的段实例。
[0026]
云计算平台100还包括可以处理用户定义的函数的一个或更多个udf容器120a-120m。用户定义的函数是由用主查询语言编写的查询调用的函数,并且是其定义由用户输入指定的函数。换句话说,用户定义的函数不是主查询语言的内置函数。可以使用以不同的辅助编程语言的语句来定义用户定义的函数。udf容器120a-120m提供隔离的计算环境,在其中安全地处理这种用户定义的函数。
[0027]
udf容器120a-120m可以具有以辅助编程语言定义操作的库。这些库有助于高效处理以那些辅助编程语言编写的用户定义的函数。协调器130(将在下面更详细地描述)还可以将额外的计算资源分配给udf容器120a-120m,而无需减少分配给主容器的计算资源的量。
[0028]
云计算平台100还包括协调器130。协调器130可以从客户端设备接收查询,创建查询计划并管理主段主机110a-110n和udf容器120a-120m。
[0029]
当协调器130从客户端设备102接收到查询时,协调器130根据主程序132创建分布式查询计划。主程序132定义应如何处理数据库查询。主程序132还可以定义在主段主机110a-110n上托管的不同主容器之间应该如何分配资源。协调器130将查询计划发送到段主机110a-110n。如果查询完全用主查询语言编写,则段实例可以完全地处理查询计划。
[0030]
如果查询而是包括对以辅助编程语言编写的用户定义的函数的调用,则协调器130可以另外分配一个或更多个udf容器以处理对该用户定义的函数的调用。通常,协调器130响应于来自实现数据库的段实例的一个或更多个主容器的请求而分配udf容器。段实例可以基于查询中的一个或更多个标识符来识别查询包括用户定义的函数。响应于该请求,协调器130分配一个或更多个udf容器以处理用户定义的函数。在一些实现方式中,协调器130为作出请求的每个主容器分配一个udf容器。在其他实现方式中,协调器为每个用户定义的函数分配一个udf容器,或者为用户定义的函数中的每个任务分配一个udf容器。在协调器130分配并初始化udf容器之后,主容器可以将用户定义的函数以及处理用户定义的函数所需的任何数据库段传递给udf容器。然后,udf容器可以处理用户定义的函数。
[0031]
例如,系统可以接收以python编程语言编写的查询,其包含以下函数:
[0032]
defsquared(s):
[0033]
return s*s
[0034]
sqlcontext.udf.register(squaredwithpython,squared)
[0035]
此函数是用户定义的函数,因为它不是主查询语言中的内置函数。相反,用户必须使用辅助编程语言python编写和定义函数。段实例可以基于该函数是用辅助编程语言编写的(如在代码的最后一行中所指示的)事实,或者基于显式注册为用户定义的函数的事实,将该函数分类为用户定义的函数。此后,实现段实例的主容器可以请求协调器130提供udf
容器,在其中处理用户定义的函数。然后,协调器130可以分配一个或更多个udf容器,这些容器被配置为处理用python编写的用户定义的函数。
[0036]
协调器130还包括调度器134。调度器134可以选择主段主机以托管未调度的段实例。为此,调度器134可以跟踪每个主段主机的资源利用,以确保不调度超过可用计算资源的工作量。调度器134还可以基于在主程序132中定义的策略指令(directive)来选择用于主容器的计算资源分配。协调器130可以与主段主机通信以执行那些资源分配决定。例如,协调器130可以指示主段主机创建或删除容器,或者修改容器之间的计算资源分配。
[0037]
协调器130还包括池管理器136。池管理器136可以管理可被用作udf容器的容器池。当协调器130接收到来自主容器的请求时,池管理器136可以将可用容器提升为活动udf容器。池管理器136执行与调度器134相似的功能,但是用于udf容器而不是主容器。
[0038]
云计算平台100还包括永久性存储器140。永久性存储器140可以存储数据库段的备份副本,从而确保数据库的高可用性。永久性存储器140还可以将数据库数据的配置存储在数据库的主段主机110a-110n中。换句话说,永久性存储器140可以指定哪些段主机存储哪些数据库段。更具体地说,它可以指定哪些容器执行哪些段实例。段主机中数据配置的改变反映在永久性存储器140中。例如,某些段实例可以在主段主机之间或在容器之间交换。这样的改变将反映在永久性存储器140中。永久性存储器140可以类似地存储udf容器120a-120m的配置。永久性存储器140还可以在udf容器失效(fail)的情况下存储用户定义的函数。如果分配的udf容器确实失效,则协调器130可以分配新的udf容器来替换它。
[0039]
永久性存储器140可以被实现为提供高可用性存储器的一个或更多个raid阵列。raid阵列由多个独立的存储磁盘组成,这些磁盘提供读和/或写速度、冗余和增加的存储空间的某种组合。
[0040]
图2是示例性容器池200的图。容器池200包括一个或更多个可用容器210a-210n。可用容器210a-210n并不主动处理用户定义的函数。
[0041]
如果协调器130从主容器(例如主容器230)接收到处理用户定义的函数的请求,则协调器130可以检查容器池200以查看其是否具有任何可用的容器。如果是这样,则协调器130可以将可用的udf容器(例如udf容器220)分配给作出请求的主容器(步骤a)。主容器和分配的udf容器可以连接(步骤b),并且主容器可以将用户定义的函数和数据库数据提供给udf容器,以便udf容器可以处理用户定义的函数。尽管图2仅描绘了单个主容器和单个udf容器,但是可以为请求处理用户定义的函数的每个主容器执行该过程。
[0042]
协调器130可以根据需要在可用容器和分配的udf容器之间重新分配计算资源,例如内存和处理能力。例如,与向分配的udf容器相比,协调器130可以向可用容器分配更少的计算资源。当协调器130分配可用容器时,它可以向该分配的容器分配附加的计算资源。在某些情况下,分配的udf容器可能需要附加的计算资源。在这种情况下,协调器130可以销毁可用容器,并将计算资源从销毁的容器重新分配给分配的udf容器。如果例如分配的udf容器和可用容器的计算资源利用并未超过限制,则协调器130还可以向容器池200添加其他容器。
[0043]
在udf容器220处理了用户定义的函数并将结果提供给主容器230之后,协调器130可以停用udf容器220并将其添加回容器池200(步骤c)。
[0044]
协调器130可以在分布式数据库系统接收到查询之前初始化多个udf容器,以减少
主容器请求udf容器时的延迟。
[0045]
图3是用于在一个或更多个隔离的udf容器中执行用户定义的函数的示例过程300的流程图。为了方便起见,该过程将被描述为由云计算平台上的分布式数据库系统执行,或者由分布式数据库系统的一个或更多个组件执行。分布式数据库系统包括参考图1描述的组件。
[0046]
系统接收以主查询语言编写的查询(310)。该查询包括对用户定义的函数的调用。用户定义的函数不是以主查询语言明确定义的函数,而是由用户编写并定义的函数。用户定义的函数可以由与编写查询所用的主查询语言不同的辅助编程语言来定义。
[0047]
系统分配一个或更多个主段主机以处理用主查询语言编写的查询的一个或更多个部分(320)。在一些实现方式中,主段主机是主容器。在这样的实现中,每个主容器都实现了段实例,该段实例可以处理查询的一部分。
[0048]
系统还分配一个或更多个udf容器以处理对用户定义的函数的调用(330)。通常,系统响应于来自一个或更多个主容器的请求而分配一个或更多个udf容器,该一个或更多个主容器接收了包括用户定义的函数的查询的部分。系统可以将udf容器分配给作出请求的每个主容器。
[0049]
分配udf容器以处理对用户定义的函数的调用可涉及从可用容器池中选择udf容器。特别是,分配udf容器以处理对用户定义的函数的调用可涉及识别和选择专门配置为处理采用编写用户定义的函数所采用的辅助编程语言的函数的容器。例如,如果用户定义的函数是用python编写的,则系统可以分配配置为包括python库的udf容器,这将有助于促进用户定义的函数的执行。
[0050]
分配的udf容器与主段主机上的主容器隔离。即,udf容器不与主容器共享计算资源。
[0051]
主段主机将用户定义的函数以及对用户定义的函数的调用中的一个或更多个参数(argument)提供给udf容器(340)。对用户定义的函数的调用中的参数可以包括用户定义的函数将在其上运行的数据库段。
[0052]
udf容器使用对用户定义的函数的调用中的参数来执行用户定义的函数,例如,使用调用中的数据库段(350)。当udf容器执行用户定义的函数时,主段主机实现的段实例会处理查询的其他部分,例如,以主查询语言编写且不包括用户定义的函数的查询的部分。
[0053]
在udf容器处理了用户定义的函数之后,主段主机接收由udf容器计算的对用户定义的函数的调用的初始结果(360)。主段主机使用初始结果来计算查询的最终结果(370),并响应于接收到查询来提供查询的最终结果(380)。
[0054]
向主段主机提供执行对用户定义的函数的调用的初始结果后,系统可以将udf容器释放到可用容器池中。
[0055]
本说明书中描述的主题的实施例可以实现为一个或更多个计算机程序,即,在有形的非暂时性存储介质上编码的计算机程序指令的一个或更多个模块,以由数据处理装置执行或控制数据处理装置的操作。替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如,机器生成的电、光或电磁信号,其被生成以对信息进行编码以传输到合适的接收器装置,以由数据处理装置执行。该计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行访问内存设备或它们中的一个或更多个的组合或者是其一部
分。计算机存储介质不是传播的信号。
[0056]
术语“数据处理装置”涵盖用于处理数据的所有种类的装置、设备和机器,例如包括可编程处理器,计算机或多个处理器或计算机。数据处理装置可以包括专用逻辑电路,例如fpga(现场可编程门阵列)、asic(专用集成电路)或gpu(图形处理单元)。除了硬件之外,该装置还可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或更多个的组合的代码。
[0057]
可以以任何形式的编程语言(包括编译或解释性语言,或声明性或程序性语言)来编写计算机程序,也可以将其称为或描述为程序、软件、软件应用程序、应用程序、模块、软件模块、引擎、脚本或代码;并且可以以任何形式进行部署,包括作为独立程序或作为模块、组件、引擎、子例程或其他适合在计算环境中执行的单元,该环境可以包括通过一个或更多个位置中的数据通信网络互连的一个或更多个计算机。
[0058]
计算机程序可以但不必对应于文件系统中的文件。计算机程序可以存储在保存其他程序或数据的文件的部分中,例如存储在标记语言文档中的一个或更多个脚本,专用于所讨论程序的单个文件中,或多个协调文件中,例如,存储一个或更多个模块、子程序或代码部分的文件。
[0059]
本说明书中描述的过程和逻辑流程可以由执行一个或更多个计算机程序以通过对输入数据进行操作并生成输出来执行操作的一个或更多个计算机来执行。所述过程和逻辑流程还可通过专用逻辑电路(例如,fpga,asic或gpu)或通过专用逻辑电路和一个或更多个编程计算机的组合来执行。
[0060]
适用于执行计算机程序的计算机可以基于通用或专用微处理器或两者,或者基于任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于执行指令的中央处理单元和用于存储指令和数据的一个或更多个内存设备。中央处理单元和内存可以由专用逻辑电路补充或并入专用逻辑电路中。
[0061]
通常,计算机还将包括或可操作地耦合以从一个或更多个大容量存储设备接收数据或将数据传输到一个或更多个大容量存储设备。大容量存储设备可以是,例如磁盘、磁光盘或光盘、或固态驱动器。但是,计算机不必具有此类设备。此外,计算机可以被嵌入到另一个设备中,例如,移动电话,个人数字助理(pda),移动音频或视频播放器,游戏机,全球定位系统(gps)接收器或便携式存储设备,例如通用串行总线(usb)闪存驱动器,仅举几例。
[0062]
为了提供与用户的交互,本说明书中描述的主题的实施例可以在具有显示设备例如lcd(液晶显示器)监视器的计算机上实现或配置为与该计算机通信,以将信息显示给用户,并且用户可以通过输入设备(例如键盘和指示设备,例如鼠标、轨迹球或触摸板)向计算机提供输入。其他种类的设备也可以用于提供与用户的交互。例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声音、语音或触觉输入。另外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户进行交互。例如,通过响应于从网络浏览器接收的请求,将网页发送到用户设备上的网络浏览器,或者与用户设备(例如智能手机或电子平板)上运行的应用程序进行交互。而且,计算机可以通过将文本消息或其他形式的消息发送到个人设备(例如,运行消息收发应用程序的智能手机)并从用户接收响应消息来与用户
交互。
[0063]
本说明书中描述的主题的实施例可以在包括后端组件,例如,作为数据服务器,或包括中间件组件(例如,应用服务器),或包括前端组件的计算系统中实现,例如具有图形用户界面的客户端计算机,web浏览器或应用程序,用户可通过该应用程序与本说明书中描述的主题的实现进行交互,或者一种或多种此类后端、中间件或前端组件的任何组合。系统的组件可以通过数字数据通信的任何形式或介质(例如,通信网络)互连。通信网络的示例包括局域网(lan)和广域网(wan),例如因特网。
[0064]
该计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离,并且通常通过通信网络进行交互。客户端和服务器之间的关系是通过在相应计算机上运行并彼此具有客户端-服务器关系的计算机程序产生的。在一些实施例中,服务器例如为了向与作为客户端的设备交互的用户显示数据并从其接收用户输入的目的,向用户设备发送数据(例如html页面)。可以在服务器处从设备接收在用户设备处生成的数据,例如,用户交互的结果。
[0065]
除了上述实施例之外,以下实施例也是创新的:
[0066]
实施例1是一种方法,包括:
[0067]
由安装在云计算平台上的分布式数据库系统接收以主查询语言编写的查询,其中所述查询调用用户定义的函数;
[0068]
分配所述云计算平台上托管的一个或更多个主段主机以处理以所述主查询语言编写的所述查询的一个或更多个部分;
[0069]
分配一个或更多个第一容器以处理对所述查询中用户定义的函数的调用;
[0070]
由所述一个或更多个主段主机将所述用户定义的函数以及对所述用户定义的函数的调用中的一个或更多个参数提供给被分配以处理对所述用户定义的函数的所述调用的所述一个或更多个第一容器;
[0071]
由被分配以处理对所述用户定义的函数的所述调用的所述一个或更多个第一容器,使用所述用户定义的函数中的所述调用的所述参数来执行所述用户定义的函数;
[0072]
由所述一个或更多个主段主机接收由所述一个或更多个第一容器计算的对所述用户定义的函数的所述调用的初始结果;
[0073]
由所述一个或更多个主段主机使用对所述用户定义的函数的所述调用的所述初始结果计算所述查询的最终结果;以及
[0074]
响应于接收到所述查询,提供所述查询的所述最终结果。
[0075]
实施例2是实施例1所述的方法,其中,分配所述第一容器以处理对所述用户定义的函数的所述调用包括:
[0076]
从可用容器池中选择所述第一容器。
[0077]
实施例3是实施例2所述的方法,还包括:
[0078]
在向所述主段主机提供执行对所述用户定义的函数的所述调用的初始结果后,将所述第一容器释放到所述可用容器池中。
[0079]
实施例4是实施例2-3任一项所述的方法,还包括:
[0080]
当所述第一容器的资源利用超过限制时,从所述可用容器池中移除相应的容器;以及
[0081]
将资源从所述被移除的容器重新分配到所述第一容器。
[0082]
实施例5是实施例2-4任一项所述的方法,其中,在所述分布式数据库系统接收到所述查询之前,初始化所述可用容器池中的一个或更多个容器。
[0083]
实施例6是实施例2-5任一项所述的方法,还包括:
[0084]
当所述第一容器和可用容器的资源利用并未超过限制时,将容器添加到所述可用容器池中。
[0085]
实施例7是实施例1-6任一项所述的方法,还包括:
[0086]
如果所述第一容器之一失效,则将所述用户定义的函数和数据库段存储在永久性存储器中。
[0087]
实施例8是实施例1-7任一项所述的方法,还包括:
[0088]
分配新容器以替换失效的第一容器。
[0089]
实施例9是实施例1-8任一项所述的方法,其中,所述第一容器不与所述主段主机共享计算资源。
[0090]
实施例10是实施例1-9任一项所述的方法,其中,所述用户定义的函数是用与所述主查询语言不同的辅助编程语言编写的。
[0091]
实施例11是实施例10所述的方法,其中,分配所述一个或更多个第一容器以处理对所述用户定义的函数的所述调用包括识别被配置为以所述辅助编程语言处理函数的一个或更多个第一容器。
[0092]
实施例12是一种系统,包括:一个或更多个计算机和一个或更多个存储设备,该存储设备存储指令,这些指令在由一个或更多个计算机执行时,使一个或更多个计算机执行实施例1-11任一项所述的方法。
[0093]
实施例13是一种或更多种计算机存储介质,其存储指令,该指令在由一个或更多个计算机执行时,使一个或更多个计算机执行实施例1-11任一项所述的方法。
[0094]
尽管本说明书包含许多具体的实现细节,但是这些细节不应解释为对任何发明的范围或所要求保护的范围或可以要求保护的范围的限制,而应视为对特定发明的特定实施例特定的特征的描述。在单独的实施例的上下文中在本说明书中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也可以分别在多个实施例中或以任何合适的子组合来实现。而且,尽管以上可以将特征描述为以某些组合起作用并且甚至最初是这样主张的,但是在某些情况下,可以从该组合中切除所要求保护的组合的一个或更多个特征,并且权利要求可以针对子组合或子组合的变型。
[0095]
类似地,虽然在附图中以特定顺序描绘了操作并且在权利要求中对其进行了记载,但是这不应被理解为要求以所示的特定顺序或以连续的顺序执行这样的操作,或执行所有示出的操作以达到理想的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中都需要这种分离,并且应当理解,所描述的程序组件和系统通常可以集成在单个软件产品中或打包成多个软件产品。
[0096]
已经描述了主题的特定实施例。其他实施例在所附权利要求的范围内。例如,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。作为一个示例,附图中描绘的过程不一定需要所示的特定顺序或连续顺序来实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1