专利名称:用于批处理来自多种资源的半结构化结果流的系统和方法
技术领域:
本发明一般地涉及用于处理来自多种资源的输入或输出数据流的系统和方法,具体涉及计算资源,例如数据库、服务器等类似资源。更具体地,本发明涉及使用少数线程以交织方式来处理几个并行的半结构化数据输入流。
背景技术:
利用大型分布式计算系统的客户机程序或用户通常发出询问、搜索请求、数据选择请求等,并从分布式计算系统中的很多服务器收集结果。大型分布式计算系统可以是包括在许多服务器上被水平分割的数据的任何环境。一直在努力使从服务器收集信息的过程对于时间和资源两者来说都尽可能地有效率。随着更多的系统采用网络服务方法与客户机进行接口交流,从大型分布式计算系统有效率收集信息的这种需要变得更加紧急。
发出询问和收集结果的一种传统方法是由图6图示的顺序处理方法600。客户机605顺序向服务器1,610,服务器2,615,服务器3,620和服务器4,625(统称为服务器630)发出询问,并接收来自它们的结果。例如,客户机605向服务器1,610发出询问635,并接收结果640。然后,客户机605向服务器2,615发出询问645,并接收结果650等。这种顺序处理一直重复,直到所有的询问都已发出并且所有的结果都已返回。虽然已经证明该技术是有用的,但是提出额外的改进将更好。
顺序处理方法600具有需要单线程来处理结果的优点。利用单线程对于资源来说是有效率的,但是对于时间却不是。顺序处理方法600比较慢;服务器630中一个的延迟将延迟对询问的总响应。服务器630中每一个可以用合理长的时间例如10ms来对询问做出响应。但是,对于大量的服务器630,对询问的总响应时间就慢得不能令人接受了。对询问做出响应所需的时间变为每一个远程呼叫所需时间的总和。
发出询问和收集结果的一种传统方法是由图7图示的并行处理方法700。客户机705包括线程1,710,线程2,715,线程3,720和线程4,725(统称为线程730)。客户机705向服务器1,735,服务器2,740,服务器3,745和服务器4,750(统称为服务器755)并行发出询问并接收来自它们的结果。并行处理方法700为服务器755中的每一个使用线程730中的一个来管理与服务器755中每一个的输入/输出通信。例如,线程1,710专用于与服务器1,735进行输入/输出通信。线程2,715专用于与服务器2,740进行输入/输出通信,等等。虽然已经证明该技术是有用的,但是提出额外的改进将更好。
并行处理方法700具有快速处理结果的优点。为服务器755中的每一个使用线程730中的一个对于时间是有效率的,但是对资源却不是。线程730中每一个耗用大量的计算资源。此外,网络包一般为1.5千字节。如果询问的结果比1.5千字节大很多,那么在已准备好读数据时,线程730中每一个都变为活动的,引起大量的情境转换。随着服务器755的数量增加,并行处理方法700的效率变得更低。
就顺序处理方法600和并行处理方法700两者来说,客户机605和客户机705都需要等待,直到积累了足够的信息来提供结果。已经开发了几种有用的技术用于管理来自大型分布式计算系统的以结构化格式提供的结果的收集。
但是,在互联网上以及在基于网络服务模式的其他网络上对半结构格式例如XML的使用增长很快,需要新的方法来管理批XML询问和半结构化结果流。结构化数据预先通知客户机可以期望多少数据,这样客户机就可以知道何时所有信息都已到达,然后处理信息。半结构化只是作为字节流到达客户机。因此客户机必须在字节流到达时通过分析字节流来解释字节流。因此,难以使用一个线程来处理并行的半结构化数据流。
因此所需要的是用于批处理来自许多不同资源的半结构化结果流的系统、计算机程序产品以及相关方法。对这种解决方案的需求迄今没有被满足。
发明内容
本发明满足这一需要,并且给出了用于批处理来自许多不同资源例如数据库、服务器等的半结构化结果流的系统、计算机程序产品以及相关方法(在本文中统称为“系统”或“本系统”)。半结构化结果流在本文中称为结果;结果包括许多信息包。
本系统可以吸收任意数量的字节,分析如实际所需那么多的字节,并返回。与传统方法不同,本系统在包从资源出发时就对包进行处理,产生中间结果。中间结果被保留在寄存器或堆栈中,直到已累积了足够的信息。然后,本系统合并中间结果,从而形成文档模型。
当网络包在一个连接被本系统耗用时,本系统可以选择另一个连接,在该连接包等待处理。在一个连接的结果处理可以被中断,而同时本系统在另一个连接处理结果。在这种方式下,本系统能够利用一个线程来并行处理许多输入结果。因为本系统的运行比结果的到来快,所以本系统能够在与对每一个输入结果应用专用线程的传统系统的时间帧可比的时间帧中提供文档模型。如果数据到达得更快,那么可以通过使用少量线程来处理各种连接而容易地加以解决。
本系统利用下推确定性自动机和有限状态模型。因为输入结果是流,所以本系统需要非常少的状态用于对输入结果的每一个分析。因此,本系统能够使用单线程来从连接库中进行选择,并将询问传送到每一个所选的连接。然后,本系统等待询问的结果,在其变得可用时对来自结果的数据进行分析。
与传统方法中利用多线程并行模型不同,本系统利用并行询问资源网的单线程。询问一般较小(在1或2千字节或更少的数量级上)。询问的结果一般较大,有几百个字节或更大。本系统顺序地发出询问,并且并行地从资源接收结果。为了处理结果,本系统利用单结果线程,该单结果线程保持本系统已询问的每一个资源的状态。
在一个实施例中,系统10可以用来利用基于流的处理器来处理XML。基于流的处理器产生回叫,而不是产生文档模型。一个常见的回叫接口是SAX(simpleAPI forXML)。在该实施例中,系统10根据XML流产生合适的SAX回叫和SAX事件。将事件应用编程接口(API)基于SAX事件的用户可以利用系统10用一个线程而不是并行的许多线程来产生那些SAX事件。此外,系统10可以增量处理XML流,通过事件API提供对SAX事件的更快访问。
将参照下面的说明、权利要求和附图更详细地描述本发明的各种特征和获得这些特征的方式,其中,在适当的地方重新使用标号来指示所引用项之间的对应关系,在附图中图1是实例性操作环境的示意图,在该操作环境中可以使用本发明的半结构化结果流处理系统;图2是图1中半结构化结果流处理系统的高级体系结构的框图;图3是图1和图2中半结构化结果流处理系统的分析状态的高级体系结构的框图;图4由图4A和图4B组成,代表图示图1中半结构化结果流处理系统的操作方法的流程图;图5是图示图1和图2中半结构化结果流处理系统在处理信息包时的操作方法的流程图;图6是图示顺序处理询问结果的传统方法的图;以及图7是图示并行处理询问结果的传统方法的图。
具体实施例方式
下面的定义和解释提供了属于本发明技术领域的背景信息,并且旨在帮助对本发明的理解而不限制其范围
API(应用程序接口),应用程序使用的用于与操作系统或某些其他系统或控制程序例如数据库管理系统(DBMS)或通信协议通信的语言和消息格式。API通过在程序中写函数调用来实现,其提供到所需子程序的链接用于执行。因此,API暗示计算机中存在某种程序模块可用来执行操作,或者暗示必须将其链接到现有的程序以执行任务。
自动机自动遵循预定指令顺序的机器、系统或子系统。
文档模型例如程序可以检查和询问的XML数据的半结构化数据的表示。
互联网互连的公共和私人计算机网络的集合,它们按照一组标准协议通过路由器彼此链接在一起以形成全球分布的网络。
下推确定性自动机(PDA)管理堆栈的简单机器、系统或子系统。
SAX(simpleAPI forXML)基于事件的API,其允许对XML文档内容的编程访问。
半结构化具有比传统柱形数据库更松散定义的格式的数据,例如XML。
XML可扩展标记语言。用于网络文档的标准、半结构化语言。在文档编写阶段,XML“标签”嵌入在文档的信息内容内。当网络服务器将网络文档(或“XML文档”)顺序传送到网络浏览器时,标签被浏览器解释并被用于分析和显示文档。除了用于指定网络浏览器如何显示文档外,XML标签还可以用于建立到其他网络文档的超链接。
XtalkXML的二进制编码。在高速XML-RPC系统中用来减少串行化/解串行化步骤的复杂度和计算负荷而不限制询问/响应的格式。
万维网(WWW,也称为网络)互联网客户机-服务器超文本分布式信息检索系统。
图1描绘了实例性总环境,在该环境中可以使用根据本发明的、用于批处理来自许多不同资源的半结构化结果流的系统和相关方法。系统10包括一般嵌入在客户机15内或安装在其上的软件程序码或计算机程序产品。客户机15可以包括计算机、工作站、服务器或类似设备。或者,系统10可以保存在合适的存储介质上,所述存储介质例如为磁盘、CD、硬盘或类似设备。
分布式计算系统20包括计算资源,例如资源1,25,资源2,30,资源3,35到资源N,40(在本文中统称为资源45)。客户机15可以通过网络50访问分布式计算系统20。客户机15经由通信链路55例如电话、电缆或卫星链路而被连接到网络50。资源1,25,资源2,30,资源3,35到资源N,40可以分别经由通信链路60、65、70、75而被连接到网络50。虽然系统10是根据网络50进行描述的,但是客户机15还可以局域地而非远程地访问资源45。
图2图示了系统10的高级分层结构。系统10包括内核205。内核205是设定用于选择的内核文档描述符,这在领域中是众所周知的。内核205提供到客户机15的操作系统的接口。
系统10还包括单结果线程210。单结果线程210管理系统10的操作,包括检索来自资源45的结果(半结构化结果流)以及结合分析状态215来处理结果。从资源1,25,资源2,30,资源3,35直到资源N,40到系统10的通信通过连接1,220,连接2,225,连接3,230直到连接N,235(统称为连接240)而发生。应该清楚,结果线程210代表单线程或少量的线程。
分析状态215包括正与客户机15通信的资源45中的每一个的分析状态。分析状态215包括分析状态1,245,分析状态2,250,分析状态3,255直到分析状态N,260。在图2的实例中,系统10使用分析状态1,245来处理从资源1,25来处理从资源1,25收到的信息,使用分析状态2,250来处理从资源2,30收到的信息,等等。
系统10包括状态子程序265。状态子程序265由单结果线程210调用,以在从资源45接收的结果到达时处理这些结果。在状态子程序265中被单结果线程210调用的具体子程序取决于结果的状态。单结果线程210对来自每一个连接240的结果的检索比结果可能到达快很多。因此,系统10能够在结果到达时对它们进行处理,而不是等待所有结果都到达,然后才处理结果和建立文档模型。
图3图示了实例性分析状态,分析状态1,245和相应连接1,220的高级分层结构,其中,结果示为包1,305,包2,310,包3,315直到包N,320(统称为包325)。连接240还包括连接1,220。分析状态1,245包括状态堆栈330、处理堆栈335和分派循环(dispatchloop)340。状态堆栈330是用于存储与包305相关联的状态的堆栈或寄存器。对于可以放在状态堆栈330中的状态数量没有限制。与包305相关联的状态向单结果线程210提供正确处理包305所需的所有信息。单结果线程210使用分析状态1,245来进行包325中每一个的工作,将从资源45中一个接收的包325转换成文档模型。
在一个实施例中,处理堆栈335包括字符串堆栈、整数堆栈和帧堆栈。处理堆栈335暂时存储中间数据,已经被处理但是还没准备好组合成文档模型的数据。例如,当系统10从连接器310得到字符串时,该字符串被存储在字符串堆栈中直到它被处理。帧堆栈保留中间结果,即部分完成的结果。在朝向对来自资源45中一个的结果的处理末尾遇到的状态耗用存储在帧堆栈中的所有中间结果,以产生最终结果,即文档模型。整数堆栈通过保存包305剩余子单元的数量内容来控制处理堆栈335。
分析状态1,245是下推确定性自动机。分析状态1,245将处理包305所需的工作推到状态堆栈330上;不管状态堆栈330顶上的状态是什么,其都定义了包305所需的工作。当包305通过内核220从连接1,220检索时,单结果线程210确定包305的状态,从状态子程序265中选择对应于所确定的包305状态的相应子程序,并指导相应的子程序处理包305。
处理包305的结果存储在字符串堆栈中;包305的当前状态存储在状态堆栈330中。当单结果线程210处理包305时,代表包305所需未来处理的任何额外状态通过将这些额外状态推到状态堆栈330上而被“排队”。当来自状态子程序265的每一个相应子程序都完成时,单结果线程210检查状态堆栈330,以确定是否仍留有对包305的任何额外的处理。如果有,单结果线程210将最上面的状态弹出状态堆栈330(将最上面的状态从状态堆栈330中移走),进行来自状态子程序265的相应子程序,并丢弃最上面的状态。
除了弹出状态堆栈330中最上面的状态之外,状态子程序265中的相应子程序可以取决于对包305进行的处理,而从状态堆栈330中移走额外的状态,或者向状态堆栈330中添加状态。特定状态可以在状态堆栈330中出现多次。状态子程序265中的任何一个都可以按需进行任意次,以将包325转变成文档模型。
结果线程210继续处理包305,直到状态堆栈330为空。系统10然后检索包2,310,包3,315直到包N,320,直到所有的包325都已经以类似方式被处理过。包325代表由资源45之一返回的结果的一部分。当在连接1,220处没有发现包325时,系统10进行到连接240中具有等待处理的包例如包305的任何其他连接240。在这种方式下,系统10利用单结果线程210来处理并行到达客户机15的结果。
图4(图4A,4B)图示了系统10的操作方法400。客户机15希望与许多不同的资源和数据库连接,例如与在分布式计算系统20中的资源45连接(步骤405)。客户机15建立对资源45的问题或请求列表,并请求从资源45返回结果(步骤410)。客户机15将问题或请求列表广播给资源45(步骤415)。到资源45的问题或请求列表可以例如顺序地、并行地或者通过将询问或请求传送到资源45的任何其他方法而被广播。资源45以包例如包325的形式将许多结果返回给客户机15(步骤420)。分布式计算系统20中资源45的一些在它们不具有匹配询问或请求的结果时,将不能返回结果。
来自资源45的结果以块的形式被返回到客户机15;每一块就是例如包305的包。典型地,例如包305的包在典型以太网上约为1.5千字节。在一个实施例中,来自资源45的结果作为以XML编码的字节流被返回。在另一个实施例中,来自资源45的结果以二进制编码的字节流如Xtalk返回。系统10的方法400将字节流转换成文档模型。
系统10在包325到达客户机15时通过执行下面的伪码来处理包325中的每一个(步骤425),下面的伪码只是为了示例的目的。单结果线程210与内核205进行检查来确定连接240中哪个具有对于处理可用的数据(步骤430),这是使用当前可得到的且本领域中公知的“选择”方法完成的。如果在连接240的任何一个上都没有包(判断步骤435),那么在步骤440系统10等待包到达连接240中任何一个。如果在连接240中例如连接1,220的任何一个上发现例如包305的包(判断步骤435),那么单结果线程210利用分派循环340来进行分派循环程序。分派循环程序检查包的相关状态,并执行状态子程序265的相应子程序,产生中间结果(步骤445)。
如果累积的中间结果不足以形成文档模型(判断步骤450),那么系统10返回步骤430,并继续处理包325。否则,文档模型可以形成,那么系统10将中间结果合并成文档模型(步骤455)。方法400递归进行,持续地将被并行传送到客户机15的半结构化结果转换成文档模型。
图5更详细地图示了分派循环程序(步骤445)。在步骤445中,系统10处理包325,形成中间结果,并以交织方式合并中间结果以产生文档模型。在步骤505,分派循环340从相应连接1,220读包305。在判断步骤510,分派循环340判断状态堆栈330是否为空。如果是,那么不需要对包305进行任何处理,分派循环返回步骤505。在步骤510如果状态堆栈330非空,分派循环将最上面的状态弹出状态堆栈330(步骤515)。然后,分派循环340从状态子程序265中为被弹出的状态识别相应的子程序(步骤520)。然后,分派循环执行该相应的子程序(步骤525),并将中间结果存储在帧堆栈中(步骤530)。
系统10递归地重复步骤505到530,直到在连接器310的所有包325都已被处理。系统10对包325的处理比包325到达客户机15更快,从而允许一个线程即单结果线程210处理许多并行的结果流。结果以随机方式从资源45被返回到客户机15。资源45中每一个只是在结果可用时将结果发送到客户机15,并不以任何特殊的顺序进行。单结果线程210从一个连接器跳到另一个连接器,在包到达时处理包,在连接器240中每一个处合并中间结果,直到来自资源45的所有包都已被检索、处理并格式化成文档模型。
在下面的说明性伪码中,示出了由系统10选择执行的十七个状态或子程序。下面是在本发明优选实施例中使用的四个示例堆栈;应该理解也可以使用其他堆栈状态堆栈整数堆栈帧堆栈字符串堆栈从INIT状态开始分析INITmake sure there are 2 bytesconsume themcheck if the first is‘X’push PINITPINITmake sure there are 4 bytesthese are the # of processing instructionspush PI this number of timesPImake sure there is 1 byteif it is a p get rid of the processing instruction bypush DROPSTRINGpush GETSTRINGif it is an E this is the element we want sopush MAKERETURN
push GETFRAMEelse CORRUPTDROPSTRINGpop the top element off the string stackGETSTRINGmake sure we have 4 bytesthis is the size of the stringallocate it and set the position pointer to 0push GS1GS1need at least 1 bytedo we have enough bytes to finish the string?if so,finish the string(copying it into the string buffer)set the pointer forward that many byteselsetake as much as we can(copying it into the string buffer)set the pointer forward that many bytespush GS1GETFRAMEwe need the key,then to go on w/the frame,sopush F1push PUSHSTRINGpush GETSTRINGPUSHSTRINGtake the string out of the string buffer and push it on thestring stackF1make sure we have 4 bytes
this is the number of attributeswe need to get them,then go on with the frameeach attribute has a key and value,sopush F2pushint count(this pushes to the int stack)and then for each attributespush PUSHSTRINGpush GETSTRINGpush PUSHSTRINGpush GETSTRINGF2make sure we have 4 bytesthis is the number of childrenpushint countpushint F3F3we need 1 bytethis is the type of the childget the number of children by popintif it is‘s’then this whole frame is a leafpush MAKELEAFpush PUSHSTRINGpush GETSTRINGelse,it is an‘E’and there are subframespushint countpush MAKENODEpush PUSHFRAMEpush GETFRAMEfor each childpush EATEpush PUSHFRAMEpush GETFRAME
MAKELEAFgather the value of the leaf(via popstring)the number of attributes(via popint)all of those attributes(via multiple popstring)the key(via popstring)create a leaf and assign it to the frame bufferPUSHFRAMEtake the value of the frame buffer and push it on the framestackEATEmake sure we have at least one byte,then check that is an‘E’andconsume itMAKENODEgather the number of children(via popint)the number of attributes(via popint)the children(via multiple popframe)the attributes(via multiple popstring)the key(via popstring)create a node and assign it to the frame bufferMAKERETURNtake the value of the frame buffer,move it to the returnvalue and exit the parse应该理解,已经描述的本发明的具体实施例只是对本发明原理的某些应用的说明。可以对这里描述的用于批处理来自许多不同资源的半结构化结果流的系统和方法做出大量的改变,而不脱离本发明的精神和范围。此外,虽然为了说明目的仅对于XML网络服务而描述了本发明,但是本发明可以应用于计算机互连且可以彼此通信的任何网络中。本系统还可以应用于具有许多数据库的一个计算机。此外,本发明应用于询问结果或请求只是为了说明目的而给出的。本发明还可以应用于半结构化数据流的任何并行处理。
权利要求
1.一种用于批处理来自多个不同资源的半结构化结果流的方法,包括使用结果线程来询问在来自多个不同资源的多个输入连接中的任何一个上是否可得到数据;以包括分派循环的分析状态来处理在一个输入连接上可得到的数据;其中,结果线程为在其上发现存在数据的一个输入连接调用分派循环;并且其中,结果线程还以交织形式对数据执行分派循环程序,来批处理来自多个不同资源的半结构化结果流。
2.根据权利要求1的方法,其中,不同资源响应于询问返回半结构化结果。
3.根据权利要求1的方法,其中,不同资源包括多个数据存储。
4.根据权利要求1的方法,其中,不同资源驻留在多个计算机上。
5.根据权利要求1的方法,其中,分析状态包括用于存储与数据相关联的状态的状态堆栈。
6.根据权利要求1的方法,其中,分析状态包括用于存储中间结果的处理堆栈。
7.根据权利要求1的方法,还包括客户机计算机将询问广播到不同资源以获得最终结果。
8.根据权利要求1的方法,还包括确定与数据相关联的状态用于处理数据。
9.根据权利要求8的方法,还包括识别与数据相关联的子程序,分派循环利用该子程序来处理数据。
10.根据权利要求9的方法,还包括执行与分析状态相应的子程序,以产生多个中间结果。
11.根据权利要求10的方法,还包括存储中间结果,直到可以从中间结果形成文档模型。
12.根据权利要求11的方法,还包括将中间结果合并成供客户机使用的文档模型。
13.根据权利要求11的方法,还包括将中间结果合并成供事件应用编程接口使用的多个回叫。
14.根据权利要求11的方法,还包括存储中间结果,直到根据对于给定状态来说是局部的信息产生事件。
15.根据权利要求1的方法,其中,结果线程包括多个线程。
16.根据权利要求1的方法,其中,结果线程包括单结果线程。
17.根据权利要求1的方法,其中,处理在一个输入连接上可得到的数据包括实现下推确定性自动机和有限状态模型。
18.一种用于批处理来自多个不同资源的半结构化结果流的系统,包括结果线程,其询问在来自多个不同资源的多个输入连接中的任何一个上是否可得到数据;分析状态,其处理在一个输入连接上可得到的数据,其中,分析状态包括分派循环;其中,结果线程为在其上发现存在数据的一个输入连接调用分派循环;并且其中,结果线程还以交织形式对数据执行分派循环,来批处理来自多个不同资源的半结构化结果流。
19.根据权利要求18的系统,其中,多个不同资源响应于询问返回半结构化结果。
20.根据权利要求18的系统,其中,多个不同资源包括多个数据存储。
21.根据权利要求18的系统,其中,多个不同资源驻留在多个不同计算机上。
22.根据权利要求18的系统,其中,分析状态包括用于存储与数据相关联的状态的状态堆栈。
23.根据权利要求18的系统,其中,分析状态包括用于存储中间结果的处理堆栈。
24.根据权利要求18的系统,还包括将询问广播到不同资源以获得最终结果的客户机计算机。
25.根据权利要求18的系统,还包括与分析状态相应的子程序,其被执行用来产生多个中间结果。
26.一种计算机程序产品,其具有用于批处理来自多个不同资源的半结构化结果流的指令码集,包括第一指令码集,其询问在来自多个不同资源的多个输入连接中的任何一个上是否可得到数据;第二指令码集,其处理在一个输入连接上可得到的数据,并且包括分派循环;其中,第一指令码集为在其上发现存在数据的一个输入连接调用分派循环;并且其中,第二指令码集还以交织形式对数据执行分派循环,来批处理来自多个不同资源的半结构化结果流。
27.根据权利要求26的计算机程序产品,其中,多个不同资源响应于询问返回半结构化结果。
28.根据权利要求26的计算机程序产品,其中,多个不同资源包括多个数据存储。
29.根据权利要求26的计算机程序产品,其中,多个不同资源驻留在多个不同计算机上。
30.根据权利要求26的计算机程序产品,其中,第二指令码集包括用于存储与数据相关联的状态的状态堆栈。
31.根据权利要求26的计算机程序产品,其中,第二指令码集包括用于存储中间结果的处理堆栈。
32.根据权利要求26的计算机程序产品,还包括将询问广播到不同资源以获得最终结果的客户机计算机。
33.根据权利要求26的计算机程序产品,还包括被执行用来产生多个中间结果的第三指令码集。
全文摘要
用于批处理来自多个不同资源的半结构化结果流的系统和相关方法吸收字节,分析如实际那么多的字节,并返回以处理额外的字节。本系统在网络包从计算资源出发时就对包进行处理,产生中间结果。中间结果被保留在堆栈中,直到已累积了足够的信息。然后,系统合并中间结果,从而形成单文档模型。当网络包在一个连接处由系统耗用时,系统可以选择另一个连接,在该连接包等待处理。在一个连接的结果处理可以被中断,而同时本系统在另一个连接处理结果。在这种方式下,本系统能够利用一个线程来并行处理许多输入结果。
文档编号G06F15/16GK1690969SQ200510065299
公开日2005年11月2日 申请日期2005年4月19日 优先权日2004年4月23日
发明者罗伯托·加维尔·巴亚多, 丹尼尔·F.·格拉尔 申请人:国际商业机器公司