在数据处理系统中提供对与运算器相关联的状态信息的访问的制作方法

文档序号:28272707发布日期:2021-12-31 20:07阅读:76来源:国知局
在数据处理系统中提供对与运算器相关联的状态信息的访问的制作方法
在数据处理系统中提供对与运算器相关联的状态信息的访问


背景技术:

1.一般而言,数据处理是指收集和操纵数据项以产生有意义的信息。数据处理系统包括运算器(operator),运算器对从一个或多个数据源接收的数据执行计算,从而产生一个或多个输出。
2.数据处理系统的一个示例是事件处理系统。事件处理(也可以被称为事件流处理)涉及快速分析基于时间的数据,诸如时间序列数据。在事件处理的上下文中,术语“事件”是指在定义时间发生且可以使用一个或多个数据字段记录的任何事件。用传统的方法,数据通常在其被存储之后进行处理。有利地,事件处理允许在数据被创建时并且在其被存储在非易失性介质中之前对其进行分析。例如,可以在数据从一个设备被流式传输到另一个设备时对其进行分析。这允许更快的反应时间,甚至可以为要采取的主动措施提供机会。事件处理可以被利用来标识事件流中有意义的模式或关系,以便检测像事件相关性、因果关系或时序之类的关系。
3.诸如事件处理系统之类的数据处理系统中的运算器可以包含对用户观察或访问有用的信息。该信息可以被称为状态信息。然而,与运算器相关联的状态信息通常是不可访问的。例如,考虑“平均”(average)运算器(即,计算一组值的平均值的运算器)。与这类运算器相关联的状态信息可以包括(i)这组值的总和,以及(ii)这组值的计数(即,该组中有多少个值)。尽管总和与计数在某些情况下可能是有用的,但是也可以配置“平均”运算器以使得总和与计数不可访问并且仅提供平均值作为输出。
4.在有值的时间排序的事件处理系统中,运算器的中间值可以提供有意义的信息。换言之,即使运算器可能被设计为在序列结束时(或在发生指定事件时,例如,“窗口”在时间范围内关闭)返回值,序列结束前(或在发生指定事件发生之前)在计算期间产生的中间值本身也可能包含有意义的信息。例如,假设“平均”运算器被设计为在输入值的序列结束时返回输入这组值的平均值。即使在这个示例中,“平均”运算器会在序列结束时(例如,下午3:00)返回输入值的平均值,“平均”运算器也会在序列结束之前产生有意义的信息。例如,在序列结束之前的一个或多个较早时间点(例如,下午2:00、下午2:05)的输入值的平均值也会是有意义且潜在有用的。在下午2:00的平均值总结了下午2:00之前的所有事件,在下午2:05的平均值总结了下午2:05之前的所有事件,依此类推。因此,与传统数据处理系统相比,在事件处理系统中有更多机会从运算器中提取有意义的信息。
5.事件处理系统中的状态信息在本质上可能是时间性的,并且在状态信息和计算的输入之间可能存在因果关系。这种数据的时间维度使得在事件处理系统中解决状态信息具有挑战性。
6.为了确定状态信息,可以用与将状态信息写入存储器有关的显式操作来注释计算。然而,这种方法的价值有限,因为它需要运算器状态被复制。换言之,这种方法需要由计算本身拥有的内部存储器分配,以及显式创建的存储器分配来保存运算器状态的副本。这种方法的优点是可以在计算意图中得以明确表达,但它会导致诸如编码模式模糊、输入/输出成本大幅增加之类的问题。此外,一些运算器状态信息被很好地封装,并且替代运算器需
要提供某种形式的访问,以便用户能够“链入(chain in)”与将状态信息写入存储器有关的显式操作。一个示例是反应式计算中的“求和”聚合运算器。虽然它在内部保存运行求和,但它不会向用户提供(或“泄漏”)中间值。因此,必须使用这种运算器的变体来“泄漏”计算状态。例如,可以使用提供每个中间值的运算器(例如,“扫描”运算器),而不是仅使用提供最终值的运算器(例如,“聚合”运算器)。
7.调试器通常具有检查与运算器相关联的状态信息的能力。然而,使用调试器访问运算器状态信息并不适合其中状态信息有用的大多数场景。例如,通常希望能够访问运算器状态信息而不必暂停(多个)运算器正在执行的(多个)计算。然而,调试器通常被离线使用(即,它们需要暂停计算)。此外,调试器不会强制执行必须保持稳定的内部状态组织。换言之,状态信息是可以随时更改的运算器的实现细节。


技术实现要素:

8.根据本公开的一个方面,公开了一种数据处理系统。该数据处理系统被配置为提供对运算器状态信息的访问。该数据处理系统包括多个运算器,多个运算器由一个或多个处理器可执行以执行关于从数据源接收的数据的计算。状态信息可以与多个运算器中的至少一个运算器相关联。计算可以产生至少一个输出,并且至少一个输出中可以不包括状态信息。数据处理系统还包括提供对状态信息的访问的接口,以及由一个或多个处理器可执行以处理查询以经由接口取回状态信息的查询管理器。
9.数据处理系统可以包括事件处理系统。可以关于由多个事件源所产生的事件来执行计算,每个事件与时间戳相关联。
10.数据处理系统还可以包括对象图,对象图包括计算的表示。接口可以通过对象图来提供对状态信息的访问。
11.多个运算器可以被配置为存储多个不同时间点的状态信息。查询可以指定时间约束。状态信息可以包括时间维度。
12.计算可以动态地改变,使得该计算涉及在第一时间点处的第一组一个或多个运算器和在第二时间点处的第二组一个或多个运算器。该接口可以经由对象图来提供对该状态信息的访问。对象图也可以动态地改变,使得该对象图包括与在第一时间点处的第一组一个或多个运算器相对应的第一组一个或多个节点和与在第二时间点处的第二组一个或多个运算器的相对应的第二组一个或多个节点。
13.查询可以包括对前一时间点的引用。数据处理系统还可包括数据存储库、存储在数据存储库中的多个系统检查点、存储在数据存储库中的事件和状态信息管理器。状态信息管理器由一个或多个处理器可执行以使用系统检查点和后续事件来确定对应于前一时间点的该状态信息,该后续事件具有在系统检查点之后且不迟于由查询指定的前一时间点的时间戳。
14.数据处理系统还可以包括配置管理器,配置管理器将多个运算器配置为存储针对超过定义的故障转移时间段的时间段的状态信息。
15.接口可以经由对象图来提供对状态信息的访问。对象图中的多个节点对应于多个运算器。
16.根据本公开的另一方面,公开了一种用于提供对与数据处理系统内的运算器相关
联的状态信息的访问的方法。该方法可以包括从查询实体接收图查询以确定与运算器相关联的状态信息。该方法还可以包括处理该图查询以确定该状态信息,其中处理该图查询包括经由为该数据处理系统定义的接口来访问对象图并且遍历该对象图中的多个节点。对象图可以表示包括运算器的计算。该方法还可以包括将状态信息返回给查询实体。
17.数据处理系统可以包括事件处理系统。可以关于由至少一个事件源所产生的事件来执行计算,每个事件与时间戳相关联。
18.该方法还可以包括导航到对象图中的节点,选择节点的属性,以及关于节点的属性来创建事件处理查询。
19.计算可以动态地改变,使得该计算涉及在第一时间点处的第一组一个或多个运算器和在第二时间点处的第二组一个或多个运算器。对象图也可以动态地改变,使得该对象图包括与在第一时间点处的第一组一个或多个运算器相对应的第一组一个或多个节点和与在第二时间点处的第二组一个或多个运算器的相对应的第二组一个或多个节点。
20.运算器可以存储针对多个不同时间点的该状态信息。图查询可以指定时间约束。状态信息可以包括时间维度。
21.该方法还可以包括:接收指定用于存储该状态信息的时间段的用户输入;和将该运算器配置为存储针对该指定时间段的状态信息。
22.该方法还可以包括:该运算器配置为存储针对超过定义的故障转移时间段的时间段的状态信息。
23.该方法还可以包括存储事件和存储包括在第一时间点处的状态信息的系统检查点。图查询可以请求在第一时间点之后发生的第二时间点处的状态信息。处理图查询可以包括访问系统检查点并重新播放具有在第一时间点之后但不晚于第二时间点的时间戳的事件。
24.可以响应于查询来执行计算。该方法还可以包括使用状态信息来优化查询。
25.根据本公开的另一方面,公开了一种用于访问与数据处理系统内的运算器相关联的状态信息的方法。该方法包括创建第一图查询,第一图查询包括通过遍历对象图中的多个节点来确定与运算器相关联的状态信息的请求。对象图可以表示包括运算器的计算。运算器可以被表示为对象图中的节点。状态信息可以被表示为节点的属性。该方法还可以包括从查询管理器接收状态信息。
26.数据处理系统可以包括事件处理系统。可以关于由至少一个事件源所产生的事件来执行计算,每个事件与时间戳相关联。
27.计算可以产生至少一个输出。状态信息可以用于生成至少一个输出。
28.本发明内容被提供来以简化的形式介绍在下面的具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识要求保护的主题的关键特征或必要特征,也不旨在被用作确定要求保护的主题范围的帮助。
29.附加的特征和优点将在以下描述中阐述。本公开的特征和优点可以通过所附权利要求中特别指出的系统和方法来实现和获得。本公开的特征将从以下描述和所附权利要求中变得更加明显,或者可以通过下文阐述的公开主题的实践而被获悉。
附图说明
30.为了描述可以获得本公开的上述和其他特征的方式,将参考在附图中图示的其具体实施例来进行更具体的描述。为了更好地理解,在各个附图中,相同的元件由相同的附图标记指定。应当理解,附图描绘了一些示例实施例,这些实施例将通过使用附图以附加的具体性和细节进行描述和解释,其中:
31.图1图示了在其中可以利用本文公开的技术的数据处理系统的示例。
32.图2图示了对象图的示例,该对象图可以被创建以表示涉及多个运算器的计算。
33.图3a图示了其中查询实体订阅某些信息的示例,该信息与温度传感器输出的数据流有关。
34.图3b图示了对象图的示例,该对象图表示图3a中所示的计算。
35.图4图示了对象图的示例,该对象图表示涉及使用“获取”(take)运算器、“组合最新的”(combinelatest)运算器的两个实例、和三个输入源的计算。
36.图5a图示了示例,该示例示出了可以如何实现涉及take运算器、“略过”(skip)运算器和“合并”(concat)运算器的动态改变查询。
37.图5b图示了对象图的示例,该对象图表示在take运算器完成之前的时间点在图5a中所示的查询中表达的计算。
38.图5c图示了对象图的示例,该对象图表示在take运算器完成之后的时间点在图5a中所示的查询中表达的计算。
39.图6图示了支持时间查询的数据处理系统的示例。
40.图7图示了数据处理系统的示例,该数据处理系统被配置为利用存储的事件和周期性的系统检查点来确定对应于过去时间点的状态信息。
41.图8图示了一种方法,该方法用于提供对与数据处理系统内的运算器相关联的状态信息的访问。
42.图9图示了计算系统内可以包括的某些组件,该计算系统可以由根据本公开的数据处理系统和/或查询实体利用。
具体实施方式
43.本公开一般涉及诸如事件处理系统之类的数据处理系统中的运算器。在此上下文中,术语“运算器”可以指数据处理系统中的任何实体,其对数据执行操作并产生可以被另一实体观察到的一个或多个输出。运算器可以执行计算,该计算采用一组或多组输入并产生一组或多组输出的计算。数据处理系统中的运算器的一些示例包括计算一组值的平均值的平均运算器,计算一组值的总和的求和运算器,以及组合多条数据的聚合运算器。当然,这些特定示例不应被解释为限制本公开的范围。本文公开的技术适用于可以在丰富多样的数据处理系统中利用的丰富多样的运算器。
44.本公开一般涉及与运算器相关联的状态信息。在这个上下文中,术语“状态信息”可以指与运算器相关联但不包括在运算器产生的(多个)最终输出中的任何信息。状态信息可以包括作为执行计算的一部分由运算器计算的信息或值。再次参考先前讨论的示例,与平均运算器(即,计算一组值的平均值的运算器)相关联的状态信息可以包括该组值的总和以及存在多少个值的计数。
45.在数据处理系统中,许多运算器被配置为“黑匣子”运算器,其对状态信息进行封装以使其不可访问。继续前面的示例,可以配置平均运算器以使总和与计数不可访问。本公开涉及用于使“黑匣子”运算器成为支持感兴趣实体访问状态信息的“白匣子”运算器的技术。
46.根据本公开的一方面,可以使用对象图来支持对状态信息的访问。一般而言,对象图是对象集合的表示。对象可以被表示为对象图内的节点(或顶点),它们可以通过链接(或边)结合在一起。每个链接可以表示对象之间的关系。对象图内的节点可以包括各种属性。
47.根据本公开,可以定义对象图来表示由数据处理系统执行的计算。在此上下文中,术语“对象图”可以指具有以下效果的一组或多组程序指令和/或数据结构:(i)将计算中涉及的运算器定义为对象,以及(ii)定义对象之间的关系(例如,对象之间的链接)。在此上下文中,术语“对象”可以指面向对象编程中的结构,其定义了实体(例如,运算器、数据源)和可以用于与该实体交互的程序。在表示由数据处理系统执行的计算的对象图中,执行计算的运算器可以表示为对象图内的节点。运算器之间的关系可以表示为对象图内节点之间的链接。与特定运算器相关联的状态信息可以被定义为对应于该运算器的节点的属性。替代地,状态信息本身可以被表示为节点。
48.表示由数据处理系统执行的计算的对象图可以被包括作为到数据处理系统的接口的一部分,诸如应用编程接口(api)。例如,定义对象图的程序指令和/或数据结构可以是api的一部分。换言之,到数据处理系统的接口(例如,api)可以定义表示计算的对象图,并且该接口可以提供对状态信息的访问,状态信息是经由对象图定义与计算有关地产生的。
49.对象图可以以如下方式来定义:对象图内的对象(以及那些对象的属性)可经由图查询语言访问。图查询语言的一些示例包括cypher、sparql、graphql和gremlin。因此,可以经由图查询来访问与特定运算器相关联的状态信息。在此上下文中,术语“图查询”指的是根据图查询语言构造的查询。图查询可以被构造为返回关于一个或多个已定义对象的信息。
50.图查询可以用于访问与特定计算中涉及的特定运算器相关联的状态信息。如上面所讨论的,可以创建表示计算的对象图。为了访问状态信息,图查询可以包括遍历对象图内的多个节点的指令。例如,图查询可以包括对表示计算本身的对象图中的对象的引用。该对象可以(直接或经由一个或多个其他对象)被链接到包括所期望的状态信息(例如,作为属性)的另一个对象。图查询可以包括指令,当该指令被处理时使得对象图内的多个节点(例如,对象)被遍历,直到获得期望的状态信息为止。
51.在该上下文中,术语“遍历”可以指经由一个或多个其他节点来访问对象图中的期望节点,这一个或多个其他节点被链接到期望的节点。考虑包括三个节点的简单对象图:a

b

c(其中a、b和c表示节点,并且其中箭头表示节点之间的链接或指针)。遍历节点a、b和c的查询可以包括对这些节点中的每一个节点的引用。
52.本公开的另一个特征是能够导航到对象图中的节点、选择该节点的属性(例如,平均运算器中的sum(求和)属性),以及在该节点的属性上创建事件处理查询(例如,在sum属性上创建事件处理查询)。因此,替代于现在查询单个值或过去的多个值(例如,具有当前时间上限的过去的时间范围),这个特征允许创建从未来的事件返回结果的查询。
53.换言之,以其他方式成为运算器所产生的不可访问的副产品的状态信息在事件处
理系统中被设为“第一类”,使得它变得可寻址(通过图查询)并且表现得像事件处理系统中的任何其他流一样。也就是说,事件流处理系统中运算器的副产品本身变成第一类的流。对这些流的查询又可以使用封装了状态信息的运算器,这些状态信息可以使用本文公开的技术进行访问,从而再次使对它们运行常设查询成为可能。这个过程可以无限期地持续下去,从而显著扩大可以访问和查询的信息量。
54.本文公开的用于访问状态信息的技术比当前方法更有效。如上面所讨论,可以用与将状态信息写入存储器有关的显式操作对计算进行注释。然而,这种方法需要复制运算器状态。在此公开的技术支持对状态信息的访问而无需复制状态信息。因此,本文公开的技术减少了与访问状态信息相关联的存储器需求。
55.图1图示了在其中可以利用本文公开的技术的数据处理系统100的示例。数据处理系统100对由数据源104产生的数据102执行计算。系统100包括对数据102执行计算的多个运算器106,从而产生输出108。可以存在与至少一些运算器106相关联的状态信息110。状态信息110可以用于生成(多个)输出108。(多个)输出108可以响应于一个或多个查询而产生。图1示出了查询实体122向数据处理系统100提供查询120以及响应于查询120从运算器106执行的计算接收输出108。
56.如上面所讨论,用当前已知的数据处理系统可能难以访问状态信息110。为了使状态信息110可访问,参与执行特定计算的运算器106可以被表示为对象图112。执行计算的运算器106可以被表示为对象图112内的节点116。运算器106之间的关系可以表示为对象图112中节点116之间的链接。与特定运算器106相关联的状态信息110可以被表示为与对象图112中的那个运算器106相对应的节点116的一个或多个属性118。
57.可以使用图查询语言来访问或查询对象图112中的信息(包括节点116的属性118,对应于与运算器106相关联的状态信息110)。数据处理系统100可以包括提供对对象图112的访问的接口124。对象图112可以被定义为接口124的一部分。接口124可以被实现为应用编程接口(api)。数据处理系统100还包括查询管理器126,查询管理器126接收、处理和响应对关于运算器106的信息的查询。查询管理器126可以经由接口124访问关于运算器106的信息(包括关于表示由运算器106执行的计算的对象图112的信息)。
58.对与对象图112有关的信息的查询可以被构造为使用合适的图查询语言编写的图查询。图1示出了查询实体122向查询管理器126发送图查询128。图查询128可以包括通过访问和遍历对象图112来确定与一个或多个运算器106相关联的状态信息110的指令。查询管理器图126处理图查询128以确定状态信息110,并将状态信息110返回给查询实体122。
59.可以关于对象图112中的节点116的属性118来创建图查询128。换言之,用当前的方法,可以查询由运算器106提供的某些信息,而某些其他信息(例如,状态信息110)不可访问且无法查询。本文公开的技术使得能够经由图查询128来查询状态信息110,图查询128关于对象图112被处理。与特定运算器106相关联的状态信息110可以作为对应于运算器106的节点116的属性118而被查询。根据本公开的图查询128可以具有时间维度。换言之,除了确定与运算器106相关联的状态信息110的当前值之外,还可以使用图查询128来确定过去的一个或多个值。另外,图查询128可以被视为返回对应于未来事件的状态信息110的常设查询。
60.状态信息110可以用于各种各样的目的。在一些实施例中,状态信息110可以用于
查询优化。例如,响应于图查询128而被确定的状态信息110可以用于优化查询120,查询120构造了由运算器106执行的计算。状态信息110可以指示查询120的问题或低效并建议可以重构查询120以便提高性能的方式。
61.图1示出了提供查询120的相同的查询实体122和图查询128,查询120从运算器106执行的计算返回(多个)输出108,图查询128返回与运算器106相关联的状态信息110。然而,这不应被解释为限制本公开的范围,因为不同的查询实体可能涉及不同类型的查询。
62.图2图示了对象图212的示例,对象图212可以被创建以表示涉及多个运算器的计算。为了简单和清楚起见,将假设在所描绘的示例中只有两个运算器。当然,本文公开的技术可以结合涉及不同数量的运算器的计算被利用,包括涉及多于两个运算器的计算。
63.所描绘示例中的运算器将被称为运算器a 206a和运算器b 206b。存在与运算器a 206a相关联的状态信息210a,以及与运算器b 206b相关联的状态信息210b。状态信息210a

b可以用于产生计算的(多个)输出。计算可以作为查询220的结果来执行。
64.在对象图212中,运算器a 206a被表示为节点a 216a,而运算器b 206b被表示为节点b 216b。与运算器a 206a相关联的状态信息210a被表示为对象图212中的节点a 216a的属性(属性a 218a)。类似地,与运算器b 206b相关联的状态信息210b被表示为对象图212中的节点b 216b的属性(属性b 218b)。对象图还可以包括表示查询220的节点216c和表示查询实体的节点216d,该查询实体接收通过处理查询220和执行计算而产生的输出。对象图212包括节点之间的链接,这些链接表示各个节点之间的相互关系。
65.如上面所讨论,对象图212可以是经由接口224可访问的。查询实体可以向查询管理器226提交图查询228,以便访问与运算器206a

b相关联的状态信息210a

b。图查询228可以包括对对象图内的节点以及对那些节点的属性的引用。例如,为了访问与运算器b 206b相关联的状态信息210b,图查询228可以包括对查询节点216c的引用和导致对象图212被遍历到节点b 216b的各种指令。这些指令可以包括遍历查询节点216c和节点a 216a之间的链接的指令232a,遍历节点a 216a和节点b 216b之间的链接的指令232b,以及返回与节点b 216b相关联的属性(属性b 218b)的指令232c。
66.现在将讨论可以被创建以赢得对状态信息的访问的计算和图查询的几个示例。考虑第一个示例计算:
67.subscription=weather.take(1*hour).average(w=>w.temperature).subscribe(print)
68.这个表达式是查询(诸如上述查询120、220)的示例,该查询可以被创建以便使得数据处理系统中的运算器执行计算。在这个示例中,计算订阅到天气流并计算一小时事件(相对于计算开始的时间)的平均温度。
69.图3a图示了与这个示例相关的数据处理系统300内的组件。温度传感器304输出包括温度值302的数据流。查询实体322订阅与数据流有关的某些信息。特别地,查询实体322提供请求平均温度308的查询320,平均温度308是在指定时间段(在这个示例中为一小时)内计算的。平均运算器306包含两条状态信息:运行求和310a和事件计数310b,这两者在传统实现中会作为运算器实现细节被封装。
70.根据本文公开的技术,对应于查询320的计算可以被表示为对象图。图3b图示了表示图3a中所示的计算的对象图312的示例。对象图312包括对应于平均运算器306的平均节
点316a,对应于温度传感器304的温度节点318b,以及对应于查询实体322的输出节点316d。对象图312还包括表示查询320的订阅节点316c。平均节点316a包括对应于由平均运算器306维护的状态信息(总和310a和计数310b)的总和属性318a和计数属性318b。
71.以下是可利用来访问与平均运算器306相关联的状态信息310a

b的图查询的示例:
72.subscription.state.select(sub=>(average)state.observable).select(avg=>new{sum=avg.state.sum,count=avg.state.count})
73.在这个表达式中,顶层状态对象表示订阅的状态,它由可观察侧(订阅的左侧)和观察者侧(订阅的右侧,即,打印)组成。上面的图查询遍历到可观察状态中,将其转换为“平均”(这是一种公开平均运算器的运算器状态的类型),以便取回总和和计数值。
74.状态空间上的图查询可以返回许多运算器节点。例如,可以构造图查询以找到计算中所有“平均”运算器的状态。结合枚举所有工件(类似于传统数据库中的目录)的能力,还有可能创建跨越数个工件的查询。
75.下面示出了更复杂的示例来说明这些遍历:
76.subscription=xs.take(n).combinelatest(ys,f).combinelatest(zs,g).subscribe(out)
77.这个查询表示涉及使用take运算器、combinelatest运算器的两个实例和三个输入源(xs、ys和zs)的计算。图4图示了对象图412的示例,其表示在这个查询中表达的计算。对象图412包括对应于两个combinelatest运算器的第一combinelatest节点416a和第二combinelatest节点416b以及对应于take运算器的take节点416c。对象图412还包括对应于三个输入源的三个输入节点416d

f(对应于xs输入源的输入节点416d,对应于ys输入源的输入节点416e,以及对应于zs输入源的输入节点416f输入源)。对象图412还包括将计算(或查询)作为整体表示的订阅节点416g。此外,对象图412包括查询实体节点416h,查询实体节点416h表示将接收对应于计算的(多个)输出的查询实体。
78.为了访问与take运算器相关联的状态信息,可以创建图查询,该图查询包括遍历三层深的对象图形412的指令。以下是这种图查询的示例:
79.subscription.state.select(sub=>(combinelatest)sub.observable)select(cl1=>(combinelatest)cl1.left).select(cl2=>(take)cl1.left).select(take>take.remainingcount)
80.在已经讨论到这一点的示例中,在计算中涉及的运算器以及这些运算器之间的关系不随时间改变的意义上,计算的对象图是静态的。例如,在图4中所示的示例中,combinelatest和take运算器在查询的整个生命周期中都处于“固定”位置。然而,本文公开的技术也可以结合动态改变的计算来被利用。在动态改变的计算中,计算中涉及的运算器以及这些运算器之间的关系可以随时间改变。
81.以下是产生动态改变的计算的查询的示例:
82.subscription=xs.concat(ys)
83.在这个示例中,concat运算器具有与查询左侧(xs输入源)相关联的状态对象以及与查询右侧(ys输入源)相关联的状态对象。这些状态对象中的任何一个都可以设置为“null”,指示运算器执行的阶段。如果右侧的状态对象为null,则这指示尚未关于左侧的状
态对象接收到最终事件。如果左侧的状态对象为null,则这指示已经关于左侧的状态对象接收到最终事件。
84.考虑与前一示例类似但包括附加运算器的另一个示例:
85.subscription=xs.take(5).concat(ys.skip(3))
86.在这个查询中有三个运算器:take、skip和concat。图5a图示了如何实现这个查询。特别地,图5a示出了来自xs输入源的输出流和来自ys输入源的输出流。图5a还示出了take、skip和concat运算器在它们执行由查询指定的计算时所产生的输出。在这个示例中,concat运算器的输出等于xs输入源输出的前五个事件的xs输入源。然后,对于ys输入源输出的接下来的三个事件,concat运算器的输出保持不变。然后,concat运算器的输出等于ys输入源的输出。因此,在计算涉及不同时间点的不同运算器的意义上,该计算是动态改变的。
87.图5b和图5c图示了对象图的示例,该对象图表示在这个查询中表达的计算。因为计算本身在动态改变,所以表示该计算的对象图也动态改变。图5b图示了在take运算器完成之前(即,在从xs输入源接收到五个事件之前)的对象图512a。图5c图示了在take运算器完成之后(即,在从xs输入源接收到五个事件之后)的对象图512b。在由图5a中所示的对象图512a所示的时间点,对象图512a包括对应于concat运算器的concat节点516a,对应于take运算器的take节点516b,以及对应于xs的输入节点516c输入源。take节点516b和xs输入节点516c对应于查询的“左侧”,此时查询的“右侧”为null。在图5b汇总所示的对象图512b所图示的时间点,对象图512b包括concat节点516a,对应于skip运算器的skip节点516d,以及对应于ys输入源的输入节点516e。skip节点516d和ys输入节点516e对应于查询的“右侧”,此时查询的“左侧”为null。
88.前一示例说明了数据处理系统(例如,事件处理系统)的时间性质。替代于使用“null”值在特定时间点及时检测系统的状态,可以执行时间查询。在前一示例中,在concat运算器的左侧输入“xs”接收到oncompleted事件后,查询实体可以对“ys”中的某个状态感兴趣。为了支持这一点,可以扩展状态遍历查询语言以支持时间查询。
89.图6图示了数据处理系统的示例,其支持根据本公开的时间查询。在所描绘的示例中,数据处理系统是事件处理系统600,其执行关于由事件源604产生的事件602的计算。
90.在一些实施例中,可能存在与每个输入(事件源604)相关联的逻辑时钟。例如,事件源604发出的事件602可以是时间序列数据,并且每个事件602可以与时间戳638相关联。替代地,替代于时间戳638,事件602可以各自与按顺序排列的序列标识符(id)而不是时间戳638相关联,以使序列id指定事件602发生的顺序。可以组合与各种事件源604相关联的逻辑时钟,以对查询与一个或多个运算器606相关联的状态信息610的时间点进行唯一标识。
91.在系统内执行计算的运算器606可以被配置为存储与不同时间点相关联的状态信息610。例如,状态信息610的每个实例可以与特定时间632相关联。与状态信息610的特定实例相关联的时间632可以从产生状态信息610的(多个)事件602的(多个)时间戳638导出。运算器606可以被配置为存储状态信息610中的一些或全部,状态信息610在预定义的时间段由运算器606计算(或以其他方式与之相关联)。
92.在图6中所示的示例中,表示由运算器606执行的计算的对象图612也包括时间维度。如前所述,执行计算的运算器606可以被表示为对象图612内的节点616。与特定运算器
606相关联的状态信息610可以被表示为节点616的一个或多个属性618。然而,在所描绘的示例中,对象图612可以被构造为使得它表示由运算器606存储的状态信息610的各种实例。换言之,可以存在与特定节点616相关联的属性618的多个实例,属性618的每个实例都与特定时间636相关联。
93.如前所述,图查询628可以用于通过访问和遍历对象图612来确定与一个或多个运算器606相关联的状态信息610。图6示出了查询实体622向查询管理器626提供图查询628。然而,在所描绘的示例中,图查询628可以包括时间约束634。时间约束634可以指定应该为其提供状态信息610的特定时间和/或特定时间范围。响应于图查询628提供的状态信息610可以包括时间维度640。换言之,状态信息610可以对应于在图查询628中指定的时间约束634(例如,时间和/或时间范围)。
94.通过存储针对特定时间段的状态信息610,事件处理系统600可以被提供历史数据库的特性。换言之,不仅有可能访问与当前时间相关联的状态信息610,还有可能访问与先前时间点相关联的状态信息610。
95.应该由事件处理系统600中的运算器606存储的状态信息610的量可以是可配置的。数据处理系统600被示为具有配置管理器642。配置管理器642可以负责指定运算器606应该在系统600中存储多少状态信息610。要被存储的状态信息610的量可以经由用户输入644指定。更具体地,用户输入644可以指定用于存储状态信息610的时间段,并且配置管理器642可以配置系统600中的运算器606以存储针对指定时间段的状态信息610。例如,如果指定的时间段是一分钟,这意味着运算器606存储针对前一分钟(即,从当前时间前一分钟直到当前时间)的状态信息610(即,关于已经发生的状态转换的信息)。
96.事件处理系统600通常被配置为为了故障转移的目的而存储一定量的状态信息610。如果事件处理系统600内的一个或多个组件(例如,主机、虚拟机)发生故障,则该存储的状态信息610可以用于从故障中恢复。在一些实施例中,由系统600中的运算器606存储的状态信息610的量可以超过故障转移目的所需的量。例如,配置管理器642可以定义存储时间段646,存储时间段646指示系统600中的运算器606应该存储多少状态信息610。配置管理器642还可以定义故障转移时间段648,故障转移时间段648指示系统600中的运算器606在故障转移的情况下应该存储的状态信息610的最小量。在一些实施例中,存储时间段646可以被定义为超过故障转移时间段648。
97.在一些实施例中,有可能提供对特定时间段的所有运算器状态信息的访问,而不必存储与该时间段相关的所有状态信息。例如,事件处理系统可以被配置为周期性地存储包括特定时间点的所有运算器状态信息的系统检查点。该系统还可以被配置为存储所有接收到的事件。当接收到请求处于系统检查点之间的过去时间点的状态信息的查询时,可以使用下列项来确定该状态信息:(i)在相关时间点之前发生的最近的系统检查点,以及(ii)在具有系统检查点之后且不晚于该查询中指定的相关时间点的时间戳的事件。
98.图7图示了以此方式配置的数据处理系统700的示例。在所描绘的示例中,将假设系统700被配置为每分钟存储一次系统检查点750。在特定时间存储的系统检查点750包括在该时间点与系统700中的运算器706相关联的所有状态信息。图7示出了12:36:00的系统检查点750a、12:37:00的另一个系统检查点750b和12:38:00的另一个系统检查点750c。系统检查点750a

c包括与检查点750a

c被创建的时间相对应的状态信息710a

c(例如,12:
36:00的系统检查点750a包括12:36:00的状态信息710a).
99.假设接收到图查询728,其请求与过去出现的特定时间点相关联的状态信息710。在这个示例中,将假设图查询728在时间12:37:45请求状态信息710。在所描绘的示例中,没有对应于这个特定时间点的系统检查点。为了提供对应于请求时间的状态信息710,系统700可以选择最相关的系统检查点,然后从事件存储754重新播放事件以填补任何缺失的间隙。系统700被示为具有用于提供此功能性的状态信息管理器754。当事件702被重新播放时,基于与事件702相关联的时间戳或序列id,它们可以由系统700中的运算器706按照它们发生的顺序来处理。
100.更具体地,状态信息管理器754可以从在相关时间点之前发生的最近的系统检查点开始,这在所描绘的示例中是12:37:00的系统检查点750b。然后,状态信息管理器754可以重新播放具有时间戳的任何事件,该时间戳晚于相关的系统检查点且不晚于在查询728中指定的时间。在所描绘的示例中,这包括有时间戳12:37:03的事件702a、有时间戳12:37:05的事件702b,等等。运算器706可以使用系统检查点750b和相关事件702在查询728中指定的时间来重新创建状态信息710。查询管理器726可以向查询实体722提供这个状态信息710。
101.系统700可以包括用于存储系统检查点750和事件702的数据存储库。图7示出了两个数据存储库752a

b,包括用于存储系统检查点750的数据存储库752a和用于存储事件702的另一个数据存储库752b。在替代实施例中,系统检查点750和事件702可以被存储在相同的数据存储库中。
102.现在将讨论包括时间维度的图查询的几个示例。再次考虑以下示例,该示例之前已讨论过:
103.subscription=xs.concat(ys)
104.假设“xs”在时间t0接收到“oncompleted”事件,导致“concat”运算器订阅到右侧输入“ys”。查询管理器可以被配置为遍历时间轴到时间“t0”并随后运行状态遍历查询。为了实现这一点,在前面的示例中使用的订阅上的“state”属性可以被认为是“subscription[time:null].state”的简写,其中存在到当前时间的订阅所建立的时间空间中的索引(使用哨兵值“null”表示)。为了导航到时间点,可以构建跨越到计算的所有输入的逻辑时钟,并且可以将这个逻辑时钟传递给索引器。例如:
[0105]
subscription[new clock{{xs,t0}}].state
[0106]
这个表达式使查询管理器导航到其中“xs”根据其逻辑时钟在时间“t0”接收事件(例如,“oncompleted”事件)并且其中“ys”未指定的时间点,导致查询管理器导航到系统中“xs”已超过“t0”的第一状态。如果查询实体对“ys”也已经取得进展(例如,在时间“t2”接收到事件)时的计算的状态感兴趣,则可以指定更多时钟约束:
[0107]
subscription[new clock{{xs,t0},{ys,t2}}].state
[0108]
上面讨论的示例可以被扩展如下:
[0109]
xs.concat(ys).average()
[0110]
以下是获得平均运算器在指定时间的状态的图查询示例:
[0111]
subscription[new clock{{xs,t0},{ys,t2}}].state.select(sub=>(average)sub.observable).select(avg=>new{sum=avgstate.sum,count=
avg.state.count})
[0112]
可以支持附加构造以在时间空间中导航。不是指定时间点(如上所做的),而是可以指定两个时钟值以建立包含范围。结果是指定时间范围内的状态序列:
[0113]
subscription[new clock{{xs,t0},{ys,t2}},new clock{{xs,t0},{ys,t4}}].states.selectmany(sub=>...)
[0114]
在这个表达式中,“sub”的每个值表示在落在指定时钟值之间的时间的订阅状态的时间快照。请注意,“sub”还公开了名为“time”的属性,该属性反映了与时间快照相关联的时钟值。事实上,时钟本身有一种查询语言,该查询语言可以用于将相同的查询重新制订如下:
[0115]
new clock{...}.until(new clock{...}).selectmany(time=>subscription[time].state.select(sub=>...))
[0116]
当前时间点的时间查询简单地查询实际的运行时状态。导航到过去的时间查询可以检查被查询的状态是否还没有超出请求的时间点,如果是,则返回当前值。如果取得了进展,在请求的时间之前的第一个检查点(除了最近的检查点之外,还取决于检查点的保留策略)可以恢复到计算的被动副本中并且可以重新播放输入(取决于到计算的输入的保留策略,例如,在入口系统中),以将时钟提前到所请求时间。请求在未来时间点的状态的时间查询充当断点,该断点被连接到与计算相关联的时钟管理器;在处理将逻辑时钟移动到所请求时间或更长时间的输入事件之后,可以捕获所请求状态并将其返回给查询。请注意,后一种情况本身实际上是一个常设计算,实际上订阅了逻辑时钟值的事件流(系统“计时器”)并在计时器触发时执行状态查询。
[0117]
在本文讨论的示例中,对“xs”和“ys”的引用唯一地标识了相应的来源。替代地,可以改为使用表示这种源的代理的对象。可以使用标识符(类似于数据库系统中的表的名称)来唯一地标识该对象。
[0118]
图8图示了方法800,方法800用于提供对与数据处理系统100内的运算器106相关联的状态信息110的访问。将关于先前结合图1描述的数据处理系统100来描述方法800。方法800可以由数据处理系统100中的查询管理器126执行。
[0119]
方法800的步骤802包括接收诸如图查询128之类的查询,该查询包括确定与运算器106相关联的状态信息110的指令。运算器106可以参与由数据处理系统100执行的计算。可以从查询实体122接收查询。
[0120]
方法800的步骤804包括访问对象图112,对象图112表示包括运算器106的计算。查询管理器126可以经由为数据处理系统100定义的接口124来访问对象图112。
[0121]
方法800的步骤806包括遍历对象图112内的多个节点以便确定状态信息110。之前描述了几个示例,这些示例说明了如何遍历多个节点以便确定状态信息110。例如,图2中所示的示例涉及遍历数个节点(查询节点216c、节点a 216a和节点b 216b)以便确定状态信息110(在图2中所示的示例中,状态信息被表示为节点b 216b的属性218b)。
[0122]
方法800的步骤808包括将状态信息110返回给查询实体122。以这种方式提供状态信息110可以使数据处理系统100免于不得不执行另一个计算(使用一组相同的运算器106或一组不同的运算器106)来确定状态信息110。
[0123]
本公开的一些方面可以由数据处理系统来实现。本公开的其他方面可以由查询数
据处理系统的实体来实现。图9图示了可以被包括在根据本公开的数据处理系统和/或查询实体可以利用的计算系统900内的某些组件。
[0124]
计算系统900包括处理器901。处理器901可以是通用单芯片或多芯片微处理器(例如,高级risc(精简指令集计算机)机器(arm))、专用微处理器(例如,数字信号处理器(dsp))、微控制器、可编程门阵列等。处理器901可以被称为中央处理单元(cpu)。尽管在图9的计算系统900中仅示出了单个处理器901,但是在替代配置中,可以使用处理器的组合(例如,arm和dsp)。
[0125]
计算系统900还包括与处理器901进行电子通信的存储器903。存储器903可以是能够存储电子信息的任何电子组件。例如,存储器903可以被体现为随机存取存储器(ram)、只读存储器(rom)、磁盘存储介质、光学存储介质、ram中的闪存设备、处理器901所包括的板载存储器、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)存储器、寄存器等,包括它们的组合。
[0126]
指令905和数据907可以被存储在存储器903中。指令905可以由处理器901执行以实现本文公开的方法、步骤、操作、动作或其他功能性中的一些或全部。执行指令905可以涉及使用被存储在存储器903中的数据907。除非另有说明,否则本文描述的模块和组件的各种示例中的任一个可以部分或全部被实现为被存储在存储器903中并且由处理器901执行的指令905。本文描述的数据的各种示例中的任一个可以在被存储在存储器903中并且在处理器901执行指令905期间使用的数据907之中。
[0127]
计算系统900还可以包括用于与其他电子设备通信的一个或多个通信接口909。(多个)通信接口909可以基于有线通信技术、无线通信技术或两者。通信接口909的一些示例包括通用串行总线(usb)、以太网适配器、根据电气和电子工程师协会(ieee)802.11无线通信协议来操作的无线适配器、无线通信适配器以及红外(ir)通信端口。
[0128]
计算系统900还可以包括一个或多个输入设备911和一个或多个输出设备913。输入设备911的一些示例包括键盘、鼠标、麦克风、远程控制设备、按钮、操纵杆、轨迹球、触摸板、和光笔。通常被包括在计算系统900中的一种特定类型的输出设备913是显示设备915。与本文公开的实施例一起使用的显示设备915可以利用任何合适的图像投影技术,诸如液晶显示器(lcd)、发光二极管(led)、气体等离子体、电致发光等。还可以提供显示控制器917,用于将存储在存储器903中的数据907转换成显示设备915上示出的文本、图形和/或运动图像(视情况而定)。计算系统900还可以包括其他类型的输出设备913,诸如扬声器、打印机等。
[0129]
计算系统900的各种组件可以通过一个或多个总线而被耦合在一起,总线可以包括电源总线、控制信号总线、状态信号总线、数据总线等。为了清楚起见,各种总线在图9中被图示为总线系统919。
[0130]
在一些实施例中,本文公开的技术可以经由分布式计算系统来实现。分布式计算系统是一种计算系统,其组件位于多个计算设备上。例如,分布式计算系统可以包括通过一个或多个通信网络连接的多个分立的处理、存储器、存储和通信组件。分布式计算系统的各个组件可以相互通信以协调它们的动作。
[0131]
在一些实施例中,本文公开的技术可以经由云计算系统来实现。从广义上讲,云计算是通过互联网来递送计算服务(例如,服务器、存储、数据库、网络、软件、分析)。云计算系
统是使用分布式系统的原理来构建的。
[0132]
本文描述的技术可以以硬件、软件、固件或其任何组合来实现,除非被具体描述为以特定方式实现。被描述为模块、组件等的任何特征也可以在集成逻辑设备中被一起实现或被单独实现为分立但可互操作的逻辑设备。如果以软件实现,则这些技术可以至少部分地通过具有存储在其上的计算机可执行指令的非暂时性计算机可读介质来实现,所述计算机可执行指令在由至少一个处理器执行时,执行本文公开的步骤、操作、动作或其他功能性。指令可以被组织成例程、程序、对象、组件、数据结构等,其可以执行特定任务和/或实现特定数据类型,并且可以在各种实施例中根据需要进行而被组合或分布。
[0133]
在不脱离权利要求的范围的情况下,本文描述的方法的步骤、操作和/或动作可以彼此互换。换言之,除非正确操作所描述的方法需要特定的步骤、操作和/或动作的顺序,否则在不脱离权利要求的范围的情况下,可以修改特定步骤、操作和/或动作的顺序和/或使用。
[0134]
术语“确定”(及其语法变体)涵盖各种动作,并且因此,“确定”可以包括计算(calculating)、计算(computing)、处理、推导、调查、查找(例如,在表格、数据库或其他数据结构中查找)、查明等。此外,“确定”可以包括接收(例如,接收信息)、访问(例如,访问存储器中的数据)等。此外,“确定”可以包括解析、选择、挑选、建立等。
[0135]
术语“包括”、“包含”和“具有”旨在是包括性的,并且意味着除了所列出的元件之外可,还可以存在附加元件。此外,应当理解,本公开中对“一个实施例”或“实施例”的引用并不旨在被解释为排除也并入了所述特征的附加实施例的存在。例如,在兼容的情况下,关于本文的实施例描述的任何元件或特征可以与本文描述的任何其他实施例的任何元件或特征组合。
[0136]
本公开可以在不脱离其精神或特征的情况下以其他特定形式来体现。所描述的实施例被认为是说明性的而非限制性的。因此,本公开的范围由所附权利要求而不是由前述说明来指示。在权利要求的等效含义和范围内的改变应被包含在其范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1