用于处理数据的方法和系统的制作方法

文档序号:6397706阅读:163来源:国知局
专利名称:用于处理数据的方法和系统的制作方法
技术领域
本发明的实施例一般涉及流计算应用。具体地,本发明涉及使用不同的流度量来触发操作器(operator)在流计算应用中处理的元组(tuple)的窗口。
背景技术
在计算机数据库已经变得极其复杂的同时,对于数据库系统施加的计算要求也已经以快速的步伐增加。数据库系统通常被配置来将存储数据的处理与访问、操纵或使用存储在数据库中的数据分离。更具体地,数据库使用模型,其中,数据首先被存储,然后被索引化,并且最后被查询。然而,这个模型不能满足一些实时应用的性能要求。例如,数据库系统可以接收和存储进入的数据的速率限制可以处理或评估多少数据。这继而可能限制数据库应用实时处理大量数据的能力。

发明内容
本发明的实施例提供了用于处理数据的方法、系统和计算机程序产品。在一个实施例中,所述方法和计算机程序接收要由多个操作器处理的流数据元组,所述操作器处理所接收的数据元组的至少一部分。所述方法和计算机程序也建立所述多个操作器的操作器图(graph),其中,所述操作器图限定至少一个执行路径,并且其中,所述多个操作器的第一操作器被配置来从至少一个上游操作器接收数据元组,并且向至少一个下游操作器发送数据元组。所述方法和计算机程序确定当所述上游操作器基于所述流数据元组的至少一个执行操作的同时出现的异常(exception)的当前数量。所述方法和计算机程序基于所述异常的数量来触发在所述多个操作器的、与所述上游操作器不同的至少一个操作器中的数据窗口,其中,所述窗口包括多个数据元组。在另一个实施例中,所述系统包括至少两个计算节点,每一个计算节点包括至少一个计算机处理器。所述至少两个计算节点被配置来容纳处理流数据元组的多个操作器的至少一个。而且,所述操作器处理所接收的数据元组的至少一部分。所述多个操作器建立操作器图,所述操作器图限定至少一个执行路径,其中,所述多个操作器的第一操作器被配置来从至少一个上游操作器接收数据元组,并且向至少一个下游操作器发送数据元组。所述系统也包括窗口启动器,所述窗口启动器被配置来确定在所述上游操作器基于所述流数据元组的至少一个执行操作的同时出现的异常的当前数量,并且基于所述异常的数量来触发在所述多个操作器的、与所述上游操作器不同的至少一个操作器中的数据窗口,其中,所述窗口包括多个数据元组。


为了获得并且可以详细地明白上述的方面,可以通过参考附图来进行上面简述的本发明的实施例的更具体的说明。然而,应当注意,附图仅图示了本公开的典型实施例,并且因此不被解释为限制其范围,因为本发明可以允许其他等同有效的实施例。图1A-1B图示了根据本发明的实施例的、被配置来执行流计算应用的计算基础架构。图2是根据本发明的一个实施例的、图1A-1B的计算结果的更详细视图。图3是根据本发明的一个实施例的、图1A-1B的服务器管理系统的更详细视图。图4是图示根据本发明的一个实施例的、在流计算应用中滚动(tumble)和滑动窗口的表格。图5图示了根据本发明的一个实施例的、用于触发窗口的部分操作器图。图6图示了根据本发明的一个实施例的、用于触发窗口部分操作器图。图7图示了根据本发明的一个实施例的、用于触发窗口的部分操作器图。
具体实施例方式基于流的计算和基于流的数据库计算正在作为用于数据库系统的发展中的技术而出现。可获得允许用户建立应用的产品,所述应用在流数据到达数据库文件前处理和查询流数据。利用该正在出现的技术,用户可以指定处理逻辑以在入站(inbound)数据记录在“飞行中(in flight)”的同时应用到该入站数据记录,在很短的时间量、经常在几个毫秒中可获得结果。使用该类型的处理来构造应用已经打开了新的编程范式,该新的编程范式允许开发大量革新应用、系统和处理,并且为应用程序员和数据库开发者带来新的挑战。在流计算应用中,处理单元(processing element)彼此连接,使得数据从一个处理单元流向下一个(例如,通过TCP/IP套接字)。通过下述方式来达到可伸缩性(scalability):通过建立许多小的可执行代码片(S卩,操作器)而在节点上分布(distribute)应用,以及,在多个节点上复制处理单元并在它们之间进行负载平衡。在流计算应用中的处理单元(和操作器)可以被融合在一起,以形成较大的处理单元或作业。如此进行允许处理单元共享公共处理空间,导致在操作器之间获得比使用进程间的通信技术(例如,使用TCP/IP套接字)可获得的快得多的通信。而且,可以通过流计算应用动态地从表示数据的流的操作器图插入或去除处理单元,以及,可以在运行时间(runtime)期间从流计算应用融合或解除融合处理单元。而且,一些流计算应用使用元组来在操作器(或处理单元)之间流化(stream)数据。操作器可以然后使用接收的元组来执行一个或多个处理功能。取代在接收到元组时处理它们,操作器可以等待评估一组元组一即,窗口。然而,流计算应用需要用于确定何时触发窗口的指示器,该指示器指示操作器评估在数据窗口内包括的元组。可能的窗口化参数包括等待直到接收到特定数量的元组或等待直到已经过去了特定的时间量。取代仅依赖于这两个参数,可以基于操作器接收元组的速率一即,在一时间段内接收到的元组数量的比率——来触发窗口。如果该速率超过或小于阈值,则可以触发数据窗口。例如,如果操作器在它接收到1000个元组后触发窗口,但是它接收元组的速率小于每秒10个元组,则操作器可以触发窗口,即使它已经接收到仅500个元组。另外,流计算应用可以评估过去的元组速率以确定当前的元组速率相对于历史速率如何偏离。如果偏离——例如,将历史速率与当前速率作比较的百分比——超过或小于阈值,则可以触发窗□。
如果多个操作器向单个操作器发送元组,则可以监视和考虑用于数据路径的每一个的元组速率。流计算应用可以例如保证在触发窗口前流入操作器内的元组速率全部超过相应的阈值。附加于或取代评估元组速率,流计算应用可以监视由一个或多个操作器抛出的异常的数量。作为由单独操作器执行的异常处理的一部分,操作器可以记录异常或特定类型的异常的总数,以确定它是否超过或小于阈值。如果如果是,则可以触发数据窗口。 不论流计算应用是否使用元组速率或异常来触发窗口,都可以在不位于提供元组速率或异常计数的操作器的下游的操作器中触发窗口。即,这些参数可以用于在流计算应用的操作器图中的任何操作器上触发窗口。下面,参考本发明的实施例。然而,应当明白,本发明不限于特定的所述实施例。相反,下面的特征和元件的任何组合不论是否与不同的实施例相关,都被考虑为实现和实施本发明。而且,虽然本发明的实施例可以相对于其他可能解决方案和/或现有技术实现优点,但是是否通过给定实施例实现特定优点不是本发明的限制。因此,下面的方面、特征、实施例和优点仅是说明性的,并且不被考虑为所附的权利要求的元素或限制,除了在权利要求中明确地陈述。同样,对于“本发明”的引用不应当被解释为在此公开的任何发明主题的一般化,并且不应当被看作是所附的权利要求的元素或限制,除了在权利要求中明确地陈述。所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一但不限于一无线、电线、光缆、RF等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言一诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instructionmeans)的制造品(manufacture)。也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。本发明的实施例可以通过云计算基础架构被提供到终端用户。云计算一般指的是通过网络提供可扩展的计算资源作为服务。更正式地,云计算可以被定义为在计算资源和其基础的技术架构(例如,服务器、储存器、网络)之间提供抽象的计算能力,使得能够对可以使用最小的管理努力或服务提供商交互来迅速提供和释放的可配置计算资源的共享池进行方便的、根据需要的网络访问。因此,云计算允许用户在“云”中访问虚拟计算资源(例如,储存器、数据、应用和甚至完全虚拟化的计算系统),而不考虑用于提供计算资源的基础物理系统(或那些系统的位置)。通常,云计算资源在根据使用付费的基础上被提供到用户,其中,仅对于实际上使用的计算资源(例如,由用户使用的存储空间的量或由用户实例化的虚拟系统的数量)向用户收费。用户可以在任何时间并且从在因特网上的任何位置访问在云中驻留的任何资源。在本发明的上下文中,用户可以访问在云中可获得的应用或相关数据。例如,用于建立流计算应用的节点可以是由云服务提供商容纳的虚拟机。如此进行允许用户从附接到与云连接的网络(例如,因特网)的任何计算系统访问该信息。图1A-1B图示了根据本发明的一个实施例的被配置来执行流计算应用的计算基础架构。如所示,计算基础架构100包括管理系统105和多个计算节点130i_4,每一个连接到通信网络120。而且,管理系统105包括操作器图132和流管理器134。如在下面更详细地所述,操作器图132表示从一个或多个源处理单元(PE)开始到一个或多个终点(sink)PE的流计算应用。该从源至终点的流也在此一般被称为执行路径。通常,数据属性流入流计算应用的源PE,并且被该PE处理。通常,处理单元从流接收N元组(N-tuple)的数据属性,并且向流内发送N元组的数据属性(除了流终止的终点PE)。通常,“元组”是遵循模式(schema)的格式化的一组数据属性的单个实例,其中,该模式建立可以使用的一组类型化(typed)的数据属性。例如,元组可以是诸如数据类型(例如,字符串(string)、整型(int)、布尔(Boolean)等)或数据类型的组合的可划分数据的块或部分。在一个实施例中,“元组”可以包括具有赋值的一个或多个属性,例如,元组1:{sym=叩6”,110=26},其中,“87111”和“no”是该模式中的可能属性(S卩,分别是字符串和整数),并且“Fe”和“26”是值。当然,由处理单元接收的N元组不必是下游发送的同一 N元组。另外,PE可以被配置来以其他格式接收或发送元组(例如,PE或操作器可以交换被标注为XML文件的数据)。而且,PE内的每一个操作器可以被配置来对接收的元组执行任何形式的数据处理功能,包括例如,向数据库表格写入或执行诸如数据结合、分裂、读取等的其他数据库操作,以及执行其他数据分析功能或操作。流管理器134可以被配置来监视在计算节点130卜4上运行的流计算应用以及改变操作器图132的部署。流管理器134可以从一个计算节点130向另一个移动处理单元(PE),例如以管理在计算基础架构100中的计算节点130的处理负荷。而且,流管理器134可以通过下述方式来控制流计算应用:插入、去除、融合、解除融合或修改在计算节点130卜4上运行的处理单元和操作器(或者什么数据元组流向处理单元)。流计算应用的一个示例是IBM 的In foSphere (注意InfoSphere象是在世界上许多行政辖区注册的、国际商业机器公司的商标)。图1B图示了包括在计算节点130卜4上运行的10个处理单元(标注为PEl - PE10)的示例操作器图。处理单元由一个或多个操作器构成,该一个或多个一起融合为具有其本身的进程ID (PID)和存储空间的独立运行的进程。如果两个(或更多的)处理单元在独立地运行,则进程之间的通信可以使用“传输(transport)”(例如,网络套接字、TCP/IP套接字或共享存储器)进行。然而,当将操作器融合在一起时,融合的操作器可以使用更快速的通信技术用于在每一个处理单元中的操作器之间传递元组。如所示,操作器图在源135 (其流入被标注为PEl的处理单元)处开始,并且在终点140卜2 (其从被标注为PE6和PElO的处理单元流动)结束。计算节点130:包括处理单元PE1、PE2和PE3。源135流入处理单元PEl内,处理单元PEl继而发送被PE2和PE3接收的元组。例如,PEl可以分离在元组中接收的数据属性,并且向PE2传送一些数据属性,同时向PE3传送其他数据属性。流向PE2的数据被包含在PE2中的操作器处理,然后向在计算节点1302上的PE4发送结果元组。同样,由PE4发送的数据元组流入终点PE6140lt)类似地,从PE3至PE5流动的数据元组也到达终点PE6140lt)因此,除了作为用于这个示例操作器图的终点之外,PE6还可以被配置来执行结合操作,组合从PE4和PE5接收的元组。这个示例操作器图也示出从PE3向在计算节点1303上的PE7流动的数据元组,计算节点1303本身示出向PE8流动并且循环回PE7的数据元组。从PE8发送的数据元组流向在计算节点1304上的PE9,计算节点1304继而发送要被终点PE101402处理的元组。因为处理单元是融合操作器的集合,所以将操作器图描述为特定操作器之间的执行路径也同样正确,该执行路径可以包括到在同一处理单元内的不同操作器的执行路径。为了清楚,图1B图示了在处理单元之间的执行路径。而且,虽然在流计算应用的上下文内描述了本发明的实施例,但是这不仅仅是与本公开相关的上下文。相反,这样的描述是无限制的,并且仅用于说明的目的。当然,本领域内的普通技术人员可以认识到,本发明的实施例可以被配置来使用能够执行在此所述的功能的任何计算机系统或应用来运行。例如,本发明的实施例可以被配置来在具有标准数据库处理应用的集群(clustered)环境中运行。图2是根据本发明的一个实施例的、图1A-1B的计算节点130的更详细视图。如所示,计算节点130包括但不限于至少一个CPU205、网络接口 215、互连220、存储器225和储存器230。计算节点130也可以包括I/O装置接口 210,用于将I/O装置212 (例如,键盘、显示器和鼠标装置)连接到计算节点130。每一个CPU205检索和执行在存储器225中存储的程序指令。类似地,CPU205存储和检索在存储器225中驻留的应用数据。互连220用于在每一个CPU205、I/O装置接口210、储存器230、网络接口 215和存储器225之间传输程序指令和应用数据。CPU205被包括来表示单个CPU、多个CPU和具有多个处理核的单个CPU等。存储器225 —般被包括来表示随机存取存储器(例如,DRAM或闪存)。诸如硬盘驱动器、固态装置(SSD)或快闪存储器储存器驱动器的储存器230可以存储非易失性数据。在这个示例中,存储器225包括多个处理单元235。每一个PE235包括融合在一起的操作器240的集合。如上所述,每一个操作器240可以提供小块的可执行代码,该代码被配置来评估流入处理单元(例如,PE235 )内的数据,并且向在那个PE中的其他操作器240或在流计算应用中的其他PE发送数据。这样的处理单元可以在同一计算节点130上或在通过通信网络120可访问的其他计算节点上。PE235也包括窗口启动器255(软件模块、硬件模块或两者的组合),窗口启动器255可以使用窗口化参数257来确定是否在PE235中触发用于操作器240中的一个或多个的数据窗口。在其他实施例中,窗口启动器255可以独立于PE235,并且可以在存储器225中或作为计算节点130中的硬件单元执行。如在此使用的,“窗口”包括多个元组(即,被操作器240处理的多个块的可划分数据)。在一个实施例中,操作器240可以仅在触发窗口后评估接收的元组,并且即使在那时,操作器240仅处理包含在窗口内的元组。窗口化参数257可以例如包括窗口中预定义数量的元组、预定义时间段、用于评估元组速率的阈值、预定义数量的异常、用于评估异常率的阈值及其任何组合。窗口启动器255可以例如监视操作器240从不同的操作器240接收元组的速率。如果该速率小于或超过由窗口化参数257限定的阈值,则窗口启动器255可以触发窗口。如所示,储存器230包含存储数据元组265的缓冲器260。缓冲器260表示用于数据元组265的存储空间,该数据元组265从上游操作器、同一处理单元中的操作器、或从用于流计算应用的数据源流入计算节点105内。虽然被示出为在储存器中,但是缓冲器260可以位于计算节点130的存储器225中或两者的组合中。而且,储存器230可以包括在计算节点130外部的存储空间。图3是根据本发明的一个实施例的、图1的服务器管理系统105的更详细的视图。如所示,服务器管理系统105包括但不限于CPU305、网络接口 315、互连320、存储器325和储存器330。客户系统130也可以包括I/O装置接口 310,用于将I/O装置312 (例如,键盘、显示器和鼠标装置)连接到服务器管理系统105。如图2的CPU205那样,CPU305被配置来检索和执行在存储器325和储存器330中存储的程序指令。类似地,CPU305被配置来存储和检索在存储器325和储存器330中驻留的应用数据。互连320被配置来在CPU305、I/0装置接口 310、储存单元330、网络接口 315和存储器325之间移动诸如程序指令和应用数据的数据。如CPU205那样,CPU305被包括来表示单个CPU、多个CPU和具有多个处理核的单个CPU等。存储器325通常被包括来表示随机存取存储器。网络接口 315被配置来经由通信网络120发送数据。虽然被示出为单个单元,但是储存器330可以是固定和/或可移除存储装置的组合,诸如固定盘驱动器、可移除存储卡、光学存储器、SSD或快闪存储器装置、网络附接的储存器(NAS)或到存储区域网络(SAN)装置的连接。如所示,存储器325存储流管理器134。另外,存储器330包括主操作器图132。流管理器134可以使用主操作器图132来将元组路由到PE235以处理。图4是图示根据本发明的一个实施例的、在流计算应用中滚动和滑动窗口的表格。窗口启动器255可以以两种主要方式来管理数据窗口,但是本发明不限于该两种方法。第一种主要方式是滚动,而第二种是滑动。滚动窗口包括一个或多个元组(即,可划分数据的块),该一个或多个元组在被操作器240处理后被丢弃。相反,滑动窗口可以包括在先前触发的滑动窗口中处理的元组。图4图示了在这两种窗口类型之间的差别。时间线205图示了时间1-8,其中,操作器240从上游操作器接收到一个元组(即,T1-T7之一)。在表格200中的两行图示了使用该两个不同的窗口模式来在缓冲器260中存储相同的元组的结果。假定在时间1,缓冲器260是空的,但是在时间2-5,操作器240接收到T1-T4,其被存储在缓冲器260中。在一个实施例中,一旦缓冲器260达到四个元组的大小,则与操作器相关联的窗口化参数257指令窗口启动器255触发窗口。替代地,假定时间线205的时间段表示相等的时间段,则窗口化参数257可以使得在已经过去四个时间段后触发窗口。使用任一参数,在时间5,窗口启动器255确定满足该参数,并且触发窗口。在触发了窗口并且操作器240评估窗口内的元组之后,丢弃在滚动窗口内的元组。因此,在时间6,缓冲器260排除T1-T4,并且仅包含新接收的T5。对于要触发的新窗口,窗口启动器255等待直到缓冲器260再一次包含所需数量的元组或直到预定义的时间段已经期满。在表格200中,一旦接收到T8或时间9到达,则窗口启动器255触发新的窗口。在任何一种情况下,实现滚动窗口的缓冲器260再一次排除与新窗口相关联的元组(即,T5-T8)。相反,滑动窗口技术可能要求缓冲器260保存来自前一个窗口的旧元组中的一些。如滚动窗口那样,滑动窗口可以初始基于是否接收到所需数量的元组或预定义时间段是否已经期满来触发。在表格200中,窗口化参数257进一步要求窗口启动器255在初始窗口被触发时的时间段之后的每一个时间段触发新的窗口,或者替代地,每次接收到新的元组时触发新的窗口。例如,如果流应用想要每分钟采样的证券报价机(stock ticker)的四分钟移动平均,则窗口启动器255等待四分钟(例如,时间2-5)直到等价四分钟的数据(例如,Tl至T4)到达缓冲器,然后每次接收到新的元组时或另一分钟过去时触发新的窗口。因此,在时间6,窗口启动器255触发包含T2-T5的新窗口,在时间17,窗口启动器255触发包含T3-T6的新窗口,等等。注意,对于这个窗口化模式,缓冲器260可能排除来自前一个窗口的元组中的一个或多个,但与滚动窗口不同,前一个窗口中的元组之一仍然可以被包括在新窗口中。虽然在表格200中未示出,但是窗口启动器255可以在触发新的滑动窗口前等待经过多个时间段或接收到多个元组。例如,窗口启动器255可以在触发第一窗口前等待四个时间段,但是其后每两个时间段触发新的滑动窗口。在该情况下,在时间7触发第二窗口,并且第二窗口将包含(丁6,丁5,丁4,丁3)——即,缓冲器260排除Tl和T2。在此,仅T4和T3被包含在第一和第二窗口中,因为滑动窗口保持四个元组的最大尺寸。使用元组速率或异常来触发窗口图5图示了根据本发明的一个实施例的、用于触发窗口的部分操作器图500。取代仅使用时间段或接收的元组的总数来触发窗口,窗口启动器255可以考虑接收元组的速率、被抛出的异常的数量、或特定操作器240抛出异常的速率。元组速率是根据预定义时间段的接收的元组的速率(例如,10元组/秒或2秒/元组)。图5图示了具有在操作器505和操作器510之间的执行路径515的部分操作器图500,其中,操作器510向操作器505发送元组。可以串行地(即,一次一个)或者以组为单位经由执行路径515发送元组。与操作器505相关联的窗口启动器255可以监视在与操作器505相关联的缓冲器260中接收元组的速率。在一个实施例中,窗口化参数257可以包括用于量化测量的元组速率的至少一个预定义阈值。流计算应用可以例如主要以慢速率在操作器505和510之间传送元组,但是偶尔将具有速率剧烈增大的短突发(burst)。取代等待接收到最大数量的元组,或等待经过预定义时间段,窗口启动器255可以检测突发(S卩,大于阈值的速率)并且触发窗口。替代地,如果测量的速率小于阈值,则窗口启动器255可以触发窗口。即,慢速率可以指示需要操作器505立即开始处理在窗口内的元组的重要事件。异常也可以被用作可以要求触发窗口的重要事件的指示。本领域内的普通技术人员公知异常和异常处理。诸如 Actionscript、Ada、BlitzMax> C++、C#、D、ECMAScript、Eiffel、Java ML>Object Pascal (例如,Delphi 和 Free Pascal 等)、Objective-C、Ocaml、PHP (自版本 5 起)PL/1、Prolog、Python、REALbasic> Ruby、Visual Prolog 和大多数.NET语言的许多计算机语言内置了对异常和异常处理的支持。如上所述,操作器可以提供小块的可执行代码,该代码被配置来处理流入处理单元内的数据。可以以支持异常和异常处理的任何当前或未来的计算机语言来编写该可执行代码。通常,异常是改变程序执行的正常流的特殊条件。异常的非限定性示例可以包括数格式异常、空指针异常和未找到文件异常等。当与操作器510相关的可执行代码在处理元组的同时抛出异常时,在操作器510或505上的窗口启动器255可以检测该异常并且递增计数。窗口启动器255可以具有用于每一个特定异常的独立计数(例如,空点异常计数)或具有用于两个或更多个选择的异常的全局计数。窗口化参数257可以包括用于这些不同计数的阈值——即,一旦计数超过该阈值,则触发窗口。具体地说,如果与操作器510相关联的代码抛出超过阈值的足够异常时,则为操作器505触发窗口。在一个实施例中,异常可以指示上游操作器510有问题,以及下游操作器505应当前进并且评估它已经接收的元组。在另一个实施例中,如果与操作器510相关联的异常计数小于特定阈值,则窗口启动器255可以触发窗口。例如,如果异常计数在特定时间点或在特定数量的元组已经流过操作器后小于阈值,贝1J窗口启动器255可以触发窗口。
在一个实施例中,窗口启动器255可以考虑异常速率。类似于元组速率,窗口启动器255可以将测量的异常速率——即,在一个时间段内的异常的数量的比率——与阈值作比较。如果操作器510的异常速率超过或小于一个或多个阈值,则窗口启动器255可以触发用于操作器505的窗口。 而且,窗口启动器255可以将元组或异常速率与多个阈值作比较,例如,如果速率超过第一阈值,则触发窗口,并且如果速率小于第二较低阈值,则也触发窗口。在一个实施例中,窗口启动器255可以将当前元组或异常速率与历史速率作比较。在流应用在运行的同时,窗口启动器255可以持续地监视相应的速率。使用该数据,窗口启动器255可以通过例如平均历史数据而动态地更新历史速率。可以将该历史速率与当前速率作比较。例如,速率之间的差可以被表达为百分比——例如,当前速率是历史速率的50%。窗口化参数257可以存储与这个差相关联的一个或多个阈值。因此,如果当前速率超过或小于历史速率,则可以触发窗口。该特征允许流应用确定用于每一个执行路径的定制历史元组速率或用于每一个操作器的历史异常速率。在一个实施例中,流应用可以执行预定时间量以允许窗口启动器255有足够的数据点来开发历史速率一例如,平均速率。一旦检测到历史速率,则窗口启动器255可以将该历史速率与当前速率作比较以确定异常值——即,当与历史速率作比较时当前速率是否太高或太低。在任何一种情况下,窗口启动器255可以确定触发窗口。在另一个实施例中,流应用可以使用来自操作器图的前一个执行的数据。S卩,取代执行应用预定时间量以开发历史速率,窗口启动器255可以使用来自先前执行同一或类似流应用的数据来产生历史速率。以这种方式,窗口启动器255可以不在使用历史速率触发窗口之前将应用执行预定的时间量。图6图示了根据本发明的一个实施例的用于触发窗口的部分操作器图600。如所示,操作器610、615和620向操作器605传送元组。这些操作器可以被一起融合到一个PE内,被定位在两个或独立的PE中,或者在不同的计算节点上被执行。在一个实施例中,用于操作器605的窗口启动器255可以在触发窗口之前考虑执行路径625、630、635的元组速率的每一个。即,在操作器605中触发窗口前,元组速率中的至少两个必须超过至少一个预定阈值。替代地,如果元组速率中的至少一个超过第一阈值而元组速率中的另一个小于第二阈值,则窗口启动器255可以触发窗口。本领域内的技术人员可以意识到当比较多个元组速率以触发窗口时可以考虑许多不同的组合。可以通过监视操作器610、615和620中的异常来执行类似的处理。操作器605的窗口启动器255可以监视由操作器610、615和620的至少两个抛出的异常的数量。如果例如操作器610抛出满足第一阈值的足够的空指针异常,并且操作器615抛出满足第二阈值的足够的文件未找到异常,则窗口启动器255可以触发用于操作器605的窗口。再一次,本领域内的普通技术人员可以认识到当在不同的操作器上触发窗口时可以考虑在至少两个操作器上的许多不同异常。而且,当触发单个窗口时考虑到多个操作器的这个处理可以用于参考图5所述的异常速率。图7图示了根据本发明的一个实施例的用于触发窗口的部分操作器图700。具体地说,图7图示了元组速率、抛出的异常的总数、或与第一操作器相关联的异常速率可以用于在操作器图700中不在第一操作器的下游的第二操作器上触发窗口。操作器710、715、720和725从操作器730接收元组。继而,操作器710、715、720和725处理从操作器730接收的元组,并且向操作器705发送这些元组。然而,在该元组之一中的窗口启动器255可以监视元组速率、抛出的异常的数量、或与操作器710、715、720、725和730的一个或多个相关联的异常速率,以在图形700中的操作器的任何一个上触发窗口。例如,假定操作器730向操作器710、715、720和725传送与文本文件相关联的元组。一旦在操作器710处接收到元组,则操作器710开始通过处理元组来解析该文件,以查找特定文本串——例如,文本A。类似地,操作器715解析文本文件以查找文本B,并且操作器720解析文本文件以查找文本C。只有当操作器710、715和720找到相应的文本时,它们才向操作器705发送元组。然而,操作器725在接收到文本文件时可能不立即开始解析它。相反,应用程序员可能想要操作器725只有当操作器710、715和720找到小数量的文本A、B和C的存在(occurrence)时才执行(即,触发包括元组的窗口,该元组包括文本文件)。因此,用于操作器725的窗口启动器255可以监视用于执行路径750、755和760的元组速率,并且如果相关联的元组速率的每一个小于预定义阈值,则窗口启动器255在操作器725上触发窗口以使用其附加的分析处理文本文件。以这种方式,从操作器流动的元组速率可以用于在被监视的操作器的上游、同一级或下游的操作器上触发窗口。虽然这个示例讨论了评估来自多个操作器(S卩,元组710、715、720)的元组速率,但是操作器725的窗口启动器255可以考虑这些速率的子集或仅考虑速率之一以触发其窗口。例如,如果由操作器725执行的分析进一步评估文本A,则如果从操作器710流动的元组速率超过特定阈值,则窗口启动器255可以触发用于操作器725的窗口,而不论与其他操作器相关联的元组速率如何。而且,可以通过考虑由操作器710、715、720的一个或多个抛出的异常的总数或与一个或多个操作器710、715、720相关联的异常速率来执行前述的示例。例如,如果由操作器725执行的分析进一步评估文本B,则如果操作器715抛出空指针异常的速率小于特定阈值,则窗口启动器255可以触发用于操作器725的窗口(即,操作器以在文本文件中识别文本B为任务)。即,流应用可以被配置来只有当操作器715能够无故障(如由操作器715抛出异常的速率所示)地执行时才使用处理能力和能量来执行与操作器725相关联的代码。通常,也可以在参考图7所述的实施例中使用在图5和6中所述的功能的每一个。而且,在图5-7中所述的实施例可以用在两种类型的窗口化方案中:滚动窗口和滑动窗口。例如,取代依赖于接收的元组的数量来触发窗口,可以监视由特定操作器抛出的异常的数量。一旦例外计数达到最大,则触发窗口。替代地,可以通过等待直到时间段过去来触发第一滚动窗口,但是可以通过异常速率来触发第二滚动窗口。关于滑动窗口,可以使用接收的元组的总数或时间段来触发初始窗口,但是,可以根据例如元组速率来触发当触发后续窗口时的递增移位。即,用于触发滑动和滚动窗口的典型参数可以与元组速率、抛出的异常的数量或异常速率组合。当然,可以仅根据元组速率、检测的异常的数量或异常速率来触发滚动和滑动窗口。结论在流计算应用中,可以使用元组在操作器之间发送数据。然而,接收操作器可以在这些元组到达时不评估它们,而是等待评估一组元组一即,窗口。当与接收操作器相关联的缓冲器达到最大窗口大小时或当预定时间段已经期满时通常触发窗口。另外,可以通过监视元组速率一即,操作器接收元组的速率一来触发窗口。如果元组速率超过或小于阈值时,则可以触发窗口。而且,可以监视异常的数量、或操作器抛出异常的速率。如果这些参数的任何一个满足阈值,则可以触发窗口,由此指示操作器评估包含在窗口内的元组。在附图中的流程图和框示了根据本发明的各个实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。在这一点上,在流程图或框图中的每一个块可以表示模块、分段或代码的部分,模块、分段或代码的部分包括用于实现指定的逻辑功能的一个或多个可执行指令。也应当注意,在一些替代实现方式中,以框表示的功能可以不以在附图中所述的顺序出现。例如,根据所涉及的功能,连续示出的两个块可以事实上大体同时地被执行,或者,有时可以以逆序来执行块。也可以注意到,可以通过执行指定功能或行为的专用基于硬件的系统或专用硬件和计算机指令的组合来实现框图和/或流程示的每个块和在框图和/或流程示中的块的组合虽然上面涉及本发明的实施例,但是在不偏离其基本范围的情况下可以设计本发明的其他和另外的实施例,并且通过所附的权利要求来确定其范围。
权利要求
1.一种用于处理数据的计算机实现的方法,包括: 接收要被多个操作器处理的流数据元组,所述操作器通过一个或多个计算机处理器的操作处理所接收的数据元组的至少一部分; 建立所述多个操作器的操作器图,所述操作器图限定至少一个执行路径,其中,所述多个操作器的第一操作器被配置来从至少一个上游操作器接收数据元组,并且向至少一个下游操作器发送数据元组; 确定在所述上游操作器基于所述流数据元组的至少一个执行操作的同时出现的异常的当前数量;并且 基于所述异常的数量在所述多个操作器中与所述上游操作器不同的至少一个操作器中触发数据窗口,所述数据窗口包括多个数据元组。
2.根据权利要求1所述的方法,其中,在触发了所述数据窗口后,所述至少一个操作器使用所述数据窗口中的所述多个数据元组的至少一个来执行操作。
3.根据权利要求1所述的方法,其中,还基于所述异常的当前数量是否超过或小于预定义阈值来触发所述数据窗口。
4.根据权利要求1所述的方法,还包括: 确定从所述上游操作器抛出的异常的历史数量; 将所述异常的历史数量与所述异常的当前数量作比较,以确定是否满足阈值;并且 如果满足所述阈值,则触发所述数据窗口。
5.根据权利要求1所述 的方法,其中至少两个上游操作器抛出异常,还包括: 测量针对所述至少两个上游操作器的每一个的异常的当前数量;以及 基于针对所述至少两个上游操作器的每一个的异常的当前数量在所述至少一个操作器中触发所述数据窗口。
6.根据权利要求5所述的方法,其中,还基于针对所述至少两个上游操作器的每一个的异常的当前数量是否超过或小于一个或多个阈值触发所述数据窗口,所述阈值基于下述之一: 预定义阈值,以及 针对所述至少两个上游操作器的每一个的、异常的至少一个历史数量与异常的当前数量之间的差。
7.根据权利要求1所述的方法,其中,基于异常速率触发所述数据窗口,所述异常速率是在预定义时间段期间由所述上游操作器抛出的异常的数量的比率。
8.一种用于处理数据的系统,包括: 至少两个计算节点,每一个计算节点包括至少一个计算机处理器,其中,所述至少两个计算节点被配置为容纳处理流数据元组的多个操作器的至少一个,所述操作器处理所接收的数据元组的至少一部分, 其中,所述多个操作器建立操作器图,所述操作器图限定至少一个执行路径,其中,所述多个操作器的第一操作器被配置为从至少一个上游操作器接收数据元组,并且向至少一个下游操作器发送数据元组;以及 窗口启动器,所述窗口启动器被配置为确定在所述上游操作器基于所述流数据元组的至少一个执行操作的同时出现的异常的当前数量,并且基于所述异常的数量在所述多个操作器中与所述上游操作器不同的至少一个操作器中触发数据窗口,其中,所述数据窗口包括多个数据元组。
9.根据权利要求8所述的系统,其中,在触发了所述数据窗口后,所述至少一个操作器使用所述数据窗口中的所述多个数据元组的至少一个来执行操作。
10.根据权利要求8所述的系统,其中还基于所述异常的当前数量是否超过或小于预定义阈值来触发所述数据窗口。
11.根据权利要求8所述的系统,其中,所述窗口启动器被配置为: 确定从所述上游操作器抛出的异常的历史数量; 将所述异常的历史数量与所述异常的当前数量作比较,以确定是否满足阈值;并且 如果满足所述阈值,则触发所述数据窗口。
12.根据权利要求8所述的系统,其中至少两个上游操作器抛出异常,其中,所述窗口启动器被配置为: 测量针对所述至少两个上游操作器的每一个的异常的当前数量;以及 基于针对所述至少两个上游操作器的每一个的异常的当前数量在所述至少一个操作器中触发所述数据窗口。
13.根据权利要求12所述的系统,其中,还基于针对所述至少两个上游操作器的每一个的异常的当前数量是否超过或小于一个或多个阈值触发所述数据窗口,所述阈值基于下述之一: 预定义阈值,以及 针对所述至少两个上游操作器的每一个的、异常的至少一个历史数量与异常的当前数量之间的差。
14.根据权利要求8所述的系统,其中,基于异常速率触发所述数据窗口,所述异常速率是在预定义时间段期间由所述上游操作器抛出的异常的数量的比率。
全文摘要
本公开提出了一种用于处理数据的计算机实现的方法和系统。在流计算应用中,可以使用元组在操作器之间发送数据。然而,接收操作器可以在这些元组到达时不评估它们,而是等待评估一组元组——即窗口。通常当与接收操作器相关联的缓冲器达到最大窗口大小时或当预定时间段已经期满时触发窗口。另外,可以通过监视元组速率——即操作器接收到元组的速率——来触发窗口。如果元组速率超过或小于阈值,则可以触发窗口。而且,可以监视异常的数量或操作器抛出异常的速率。如果这些参数的任何一个满足阈值,则可以触发窗口,由此指示操作器评估包含在窗口内的元组。
文档编号G06F3/0481GK103207727SQ201310009009
公开日2013年7月17日 申请日期2013年1月10日 优先权日2012年1月11日
发明者M.J.布兰森, J.M.桑托苏索, B.W.舒尔茨 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1