CN107820611B - 事件处理系统调页 - Google Patents
事件处理系统调页 Download PDFInfo
- Publication number
- CN107820611B CN107820611B CN201680031224.6A CN201680031224A CN107820611B CN 107820611 B CN107820611 B CN 107820611B CN 201680031224 A CN201680031224 A CN 201680031224A CN 107820611 B CN107820611 B CN 107820611B
- Authority
- CN
- China
- Prior art keywords
- event processing
- query
- page
- memory
- processing query
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4443—Inlining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Stored Programmes (AREA)
- Hardware Redundancy (AREA)
Abstract
可以基于事件处理查询生成可调页查询。可调页查询是以将支持将事件处理查询交换到存储器中以及将其交换出存储器的事件处理查询的形式。例如,可以插入调入页面触发和调出页面触发。在检测到调入页面触发之后,事件处理查询可以被加载到存储器中,并且在检测到调出页面触发之后,事件处理查询可以被从存储器中卸载。
Description
背景技术
事件处理系统在接收到事件时持续地处理事件。事件是包括数据有效载荷和相关联的时间的数据项。事件处理关于异步事件序列或事件流进行操作,异步事件序列或事件流是随时间发生的事件的序列。事件序列的示例包括识别股票价格改变的股票价格涨跌(stock ticks)和社交媒体消息。例如,对具有查询的事件序列指定处理,以支持投影、过滤和聚合。与传统的数据库查询不同,不通过所存储的数据一次评估事件处理查询。相反,在事件发生时持续地通过事件评估事件处理查询。为了支持实质上实时处理,当事件到达事件处理系统时,系统在存储器中存储查询并且评估查询。
发明内容
以下呈现简化的发明内容以便提供对所公开主题的一些方面的基本理解。本发明内容不是广泛的概述。其不旨在标识关键/紧要要素或描画所要求保护的主题的范围。其唯一目的是以简化形式呈现一些概念,作为稍后呈现的更详细描述的序言。
简要描述,本公开涉及事件处理系统调页。生成支持事件处理查询交换到存储器中并交换出存储器的事件处理查询的可调页形式。例如,可以重写事件处理查询以包括调入页面(page-in)触发和调出页面(page-out)触发以及用于支持在调出页面上的查询的延迟加载和保留的功能。在操作中,在观察到调入页面触发后,事件处理查询被加载到存储器中,并且在观察到调出页面触发之后将其从存储器卸载到持久存储。
为了前述和相关目的的实现,本文结合以下描述和附图描述了要求保护的主题的某些示意性方面。这些方面指示可以实践主题的各种方式,所有这些方式都旨在在所要求保护的主题的范围内。当结合附图考虑时,从下面的详细描述中,其他优点和新颖特征可以变得明显。
附图说明
图1是事件处理系统的框图。
图2是代表性调页组件的框图。
图3是代表性重写组件的框图。
图4是基于历史数据的具有统计收集和调页功能的重写的图形说明。
图5是在事件处理系统中生成可调页查询的方法的流程图。
图6是对查询进行调页的方法的流程图。
图7是使查询调入页面的方法的流程图。
图8是使查询调出页面的方法的流程图。
图9是示出了本公开的各方面的合适的操作环境的示意性框图。
具体实施方式
事件处理系统可以涉及托管和服务大量订阅或长期事件查询。例如,许多查询可以针对单个用户存在,例如与日常通勤交通通知、天气更新、关于喜爱的主题的新闻、运动得分更新、和航空公司航班通知以及其他事物相关联的那些查询。此外,在大规模事件处理系统或服务的上下文中,这可以对应于数百万或更大的数量级的用于处理的查询。除了大量订阅之外,事件处理也可能涉及大量的事件。
为了实现接近实时的处理,涉及将与事件处理查询相关联的代码尽可能多地存储在存储器中。因此,当事件发生时,将代码加载到存储器来处理事件不会招致延迟。然而,事件处理系统可能具有小且又不那么小的长期有效(standing)查询,当保持驻留在存储器中时占用并非少量的存储器。鉴于有限存储器和大规模处理,挑战是如何将事件处理代码智能地交换进存储器和交换出存储器。
操作系统采用调页技术通过从次级存储设备(诸如盘)读取数据调页并且向次级存储设备写入数据调页以在诸如存储器的主存储设备中使用来管理存储器。然而,操作系统调页是域独立的,因此可能会对何时以及将什么调入页面和调出页面做出非最优决策。此外,与通用操作系统相关的调页技术对于高吞吐量事件处理不能很好地扩展,并导致过度的盘和存储器访问。
下面的细节通常涉及事件处理系统调页。生成可调页的事件处理查询以支持将查询或其部分交换到存储器中以及从存储器中交换出。根据一个实施例,可以通过重写事件处理查询来提供对调页的支持。例如,查询表达式可以通过调入页面触发、调出页面触发以及延迟加载和查询保存的功能而被自动地重写。此外,可以针对事件序列或流指定触发,以支持事件处理系统的域特定特征的利用。还可以插入功能来收集关于查询执行的数据。随后,可以分析所收集的数据,以用于在指定调入页面触发和调出页面触发中有用的模式。此外,调页功能可以利用例如包括查询运算符和检查点操作(checkpointing)的事件处理系统的特征。
现在参考附图更详细地描述本发明公开的各个方面,其中贯穿全文类似的附图标记通常指代类似或对应的元件。然而,应当理解,与其有关的附图和详细描述并不旨在将所要求保护的主题限制于所公开的特定形式。相反,意图是覆盖落入所要求保护的主题的精神和范围内的所有修改、等同物和替代物。
首先参考图1,示出了事件处理系统100。根据观察者设计模式,事件处理系统100被配置为接受来自一个或多个观察者的对一个或多个可观察事件序列或流的订阅,并且按照根据对应的订阅向一个或多个观察者提供通知。订阅可以对应于或包括对于订阅的长度在数据到达时持续地执行处理数据的长期有效查询,而不是旨在运行一次的adhoc查询。通知的类型可以从简单警报到也可以接受订阅的一系列事件而变化。
事件处理系统100包括评估组件110、优化器组件120和调页组件130。评估组件110被配置为评估事件处理查询或更简单的查询。查询可以根据查询表达式来指定,查询表达式包括由事件处理系统支持的用于执行投影、过滤和聚合以及其他事物的多个查询运算符。查询可以被加载到存储器中,并且在接收到数据后,评估组件110可以评估对数据的查询并产生通知。
优化器组件120被配置为优化所接收的查询以改善评估性能。优化器组件120可以利用关于系统资源负载和处理能力以及其他事物的查询和数据的代数特性,以生成用于由评估组件110进行评估的修改查询。作为非限制性示例,优化器组件120可以将一系列的过滤器合并为单个过滤器、移动过滤器、或拆分查询以进行并发处理。
调页组件130被配置为将查询交换到存储器中和从存储器中交换出。更具体地,调页组件130被配置为将与查询相关联的代码和数据加载到存储器中或者从存储器中卸载与查询相关联的代码和数据。本文中,将查询加载到存储器中被称为将查询调入页面,并且从存储器中卸载查询被称为将查询调出页面。尽管本文使用了调出页面和调出页面,但并不一定意味着被称为页面的存储块被加载到存储器中或者从存储器卸载,如常规地由操作系统完成的那样。相反,存储块可以具有与特定查询代码和数据相关联的基本上任何大小。
根据一个实施例,调页组件130可以重新使用事件处理系统的特征和功能来执行调页。一种方式是将调页构建到特定查询执行引擎或者本文所描述的评估组件110中。然而,这涉及到产生具有例如涉及调度器、存储器管理器、和输入/输出管理器的少量抽象的低级别的调页系统。本文描述的第二种方式是建立在事件-事件处理的能力之上,并利用查询运算符实现调页。如下面进一步描述的,包括一个或多个查询运算符的查询表达式可以被重写以包括对调页的支持。此外,可以针对调页利用事件处理系统的高级别域特定特性,其对低级别操作系统调页机制是不可用的。
例如,考虑航班跟踪查询,其通知个人该个人的航班是否将晚点。该查询可以在机票的预订时提交,但只需要在航班出发前一天有效。这种长期有效查询是在查询提交的时间和查询是活动的时间之间长时间存活的,可能是几个月。由于与查询相对应的代码不会对一段时间内的任何事件做出反应,因此代码可以被调出页面,并随后在航班出发前一天被调入页面。这是一个非常微小的示例,因为它处理查询中的显式时间。然而,此示例突出显示了使用查询域和事件空间的知识来做出关于何时将查询调入页面和调出页面的智能决策。
将注意力转向图2,描绘了代表性调页组件130。调页组件130包括重写组件210、统计存储220、处理组件230和更新组件240。重写组件210被配置为以添加对调页的支持的方式重写查询表达式。换句话说,重写将查询转换为可调页查询。重写可以基于事件序列中的事件到达来触发调页。尽管不限于此,可以基于定时器事件或记号(tick)的序列来触发调页。重写还可以涉及添加用于触发调出页面的机制。进一步的重写可以关于延迟加载以及收集和利用执行数据来进行调页决策。具体地,查询或其部分可以注入具有收集关于查询执行的数据并将数据保存在统计存储220中的功能。这样的数据可以捕获事件的数目以及何时发生事件以及其他事物。处理组件230被配置为分析和处理数据以检测在指定可调页查询中可能有用的模式。例如,如果事件处理活动每天在上午8点进行(例如,由于事件在查询的输入之一上到达),则处理组件230可以检测或推断该模式。因此,调入页面触发可以是每天上午8点之前,并且调出页面触发是在上午8点之后的某个时间。在关于模式的这样的数据或信息可用于查询或类似查询的情况下,重写组件210可以利用信息来发起将查询重写到可调页表单中。然而,重写组件也可以以允许后续更新的方式指定查询。更新组件240被配置为基于由处理组件230标识的模式来更新可调页查询。具体地,可以变更调入页面触发和调出页面触发,以反映关于查询和相关事件的当前知识。
将注意力转向图3,更详细地示出了示例性重写组件210。如图所示,重写组件210包括调入页面组件310、计算组件320和调出页面组件330。调入页面组件310被配置为将功能注入到查询表达式中以触发调入页面功能,其利用代码以及潜在的与查询操作相关联的状态数据加载存储器。可以基于诸如定时器记号或某些其他消息的事件的发生来触发调入页面功能。此外,组件310中的页面被配置为插入功能,该功能支持例如基于过去的执行统计来更新何时触发调入页面。计算组件320被配置为注入功能,该功能支持查询表达式或与之相关联的计算的至少一部分被交换到存储器中以及交换出存储器。在一个实施方式中,这可以通过使用事件处理系统的延迟加载功能以及以检查点功能的形式的运算符状态持久性来实现。计算组件320还被配置为注入用以收集关于执行的数据并将其保存到统计存储220的功能。调出页面组件330被配置为注入触发调出页面操作的功能。这可以至少部分地通过利用事件处理系统的检查点功能来将查询代码和状态保存到持久存储中并且例如通过将指针设置为空并允许空间由垃圾收集机制回收来发起代码从存储器的卸载来完成。调出页面组件320也可以添加功能,以支持基于执行统计来更新关于何时触发调出页面操作。
以下是与本公开的方面的一个示例性实施方式相关联的细节。描述开始于用定时器来将查询代码和数据调入页面。之后是对调入页面代码的激活模式的描述。最后,提供了将代码和数据调出页面的描述。
各种长期有效查询可以在它们变为活动之前的很长时间提交。这些查询中的一些可以是长期存活的。考虑航班跟踪查询。跟踪航班的长期有效查询通常只需要持续二十四小时,开始于入住之前的一段时间,例如以建议奔赴机场或取消,并持续直到降落之后的某个时间,例如以建议在机场接到某人。然而,用于航班跟踪的长期有效查询可能会在预定航班时提交给事件处理系统以用于处理。此外,可能有对航班感兴趣的几个人的查询。
为了描述这种查询,经常使用基于时间的运算符来对查询的执行进行时间限制(time-box)。对于航班查询示例,可以使用“DelaySubscription”或“SkipUntil”运算符来延迟处理事件,直到航班出发前某个时间,并且可以使用“TakeUntil”运算符来实现与在处置飞机已经降落之后的查询方面相似的效果。例如:
flights.DelaySubscription(departure-12hr)
.Where(f=>f.Id==“BA49”)
.TakeUntil(landing+12hr)
.Subscribe(…)
可以重写上述查询表达式以支持基于查询的代数属性的调页。首先,“DelaySubscription”运算符通常可以与其他查询运算符兑换(例如,由于订阅而不存在副作用的一些属性可能需要保留)。换句话说,“DelaySubscription”运算符的顺序相对于其他运算符不重要。因此,“DelaySubscription”运算符可以被下推靠近消费方。事实上,运算符可以如下正好移动到“Subscribe”调用的前面:
flights.Where(f=>f.Id==“BA49”)
.TakeUntil(landing+12hr)
.DelaySubscription(departure-12hr)
.Subscribe(…)
接下来,可以使用以下代数标识来将“DelaySubscription”运算符扩展为更原始的形式:
xs.DelaySubscription(t)==Timer(t).SelectMany(_=>xs)
这里,“DelaySubscription”运算符的源“xs”在“SelectMany”运算符的选择器函数的lambda主体中终止。此时,可以采用与事件处理系统相关联的检查点功能,特别是对诸如“SelectMany”的高阶运算符的检查点。直到事件从“SelectMany”运算符的源(在这种情况下为定时器脉冲)到达,选择器函数的主体才必须被加载到存储器中。运行示例可以写成如下:
Timer(departure-12hr).SelectMany(_=>flights.Where(f=>f.Id==“BA49”)
.TakeUntil(landing+12hr))
.Subscribe(…)
通过插入“trap”表达式,查询的斜体部分可以从查询中解除。通过使用用以将被观察者(observable)(斜体部分的类型)定义为命名工件(artifact)的能力,可以移除代码部分。新的工件可以定义如下:
ctx.DefineObservable(someId,flights.Where(f=>f.Id==“BA49”)
.TakeUntil(landing+12hr));
工件“someId”是不包含代码而仅是标识符的被观察者(例如,类型IObservable)。该标识符可以用作代替查询的被移除部分,从而插入间接的等级。这允许将原始查询重写为最终形式:
Timer(departure-12hr).SelectMany(_=>someId)
.Subscribe(…)
这意味着具有特定查询的订阅将延迟到出发前十二个小时。在那时,“SelectMany”运算符将会收到事件,并且查询代码将例如通过从盘读取代码、编译代码以及将代码加载到存储器中而被交换进来。结果是查询逻辑的常驻代码显着减少。上述最终形式假设评估组件110不执行在查询中所引用的工件的热切内联,特别是如果这些发生在内部位置(例如,lambda表达式)中,而是通过延迟内联直到需要来延迟而怠惰地进行。这种行为可以是系统固有的或者由重写器组件210如下进行添加:
Timer(departure-12hr).SelectMany(_=>Defer(someId))
.Subscribe(…)
在其本身,“SelectMany”运算符将外部“源”被观察者和订阅去耦合为一个或多个“内部”被观察者。内部部分可以与外部部分分离地检查点操作,并且仅在从外部源订阅接收到事件(诸如本示例中的定时器序列)时进行实例化。然而,如果在资源利用方面证明是有益的,则可以通过将模式减少到特定运算符来进一步优化。例如,可以如下采用“ContinueWith”运算符:
Timer(departure-12hr).ContinueWith(someId)
.Subscribe(…)
可以通过利用定时器属性来进行进一步的优化,例如通过将多个定时器合并成较粗粒度的主定时器,其可以用于触发下一级别的定时器的实例化。这可以是有益的,因为引用定时器资源的对象可以被重用,而不是跨越不同的长期有效查询来实例化多个定时器对象。这些对象可以与消耗O(n)空间的处理程序(handler)列表合并。考虑以下查询:
Timer(t1).SelectMany(_=>xs.Bar().Foo()).Subscribe(…)
Timer(t2).SelectMany(_=>ys.Qux().Baz()).Subscribe(…)
使用上述技术,“SelectMany”运算符的内部部分可以被调出页面。然而,常驻“SelectMany”运算符可以通过合并定时器进一步被优化。定时器的代数重写如下:
Timer(t)==Timer(N*(t/N)).SelectMany(_=>Timer(t%N))
这里,具有到期时间“t”的定时器到分辨率为“N”的较粗粒度的定时器。采用公共子表达式消除,定时器资源现在可以得以合并。例如,如果“N”设置为二十四小时,那么直到到期日的午夜才将剩余定时器实例化。因此,每天只需要驻留一天的定时器。假设在示例中的定时器“t1”和“t2”导致同一天“d”,则:
此外,SelectMany运算符可以使用以下标识被转为“由内至外(inside out)”(如果某些关于副作用的前提条件成立):
xs.SelectMany(_=>ys).SelectMany(_=>zs)
==
xs.SelectMany(_=>ys.SelectMany(_=>zs))
因此,产生以下查询计划:
不仅“Timer(d)”可以被重复使用,还可以将“SelectMany”运算符的主体调出页面。重写器组件210还可以递归地重新应用该技术以获得下一级别的粗粒度定时器(例如,具有分辨率M<N,诸如1小时)。
注意,上述调页方案具有提前取回所需表达式的优点,因此调入页面的成本不会不利地影响定时器的精度。该参数可以例如基于传递给查询的时间容差参数进行调整。例如,可以将定时器四舍五入为一分钟分辨率,以提高重用的可能性。
虽然代码加载的基于定时器的延迟可以经常被使用,如上所述,但是代码的基于定时器的延迟需要查询具有特定的形状。然而,查询可以有任意形状。例如,除定时器之外的一些事件序列或流可以被用作查询源。在这种情况下,仅代数重写可能不够。
相反,可以用代码重写查询,以收集与查询执行有关的统计,这可以保存到统计存储220中。统计存储220因此可以保存与查询执行有关的历史统计。处理组件230被配置为相对于历史统计进行操作,并且确定和/或推断对于调页有用的信息,诸如事件发生的时间和频率。重写组件210或更新组件240可以在指定用于调页的查询(即,调入页面触发和调出页面触发)中采用来自处理组件230的数据或信息。
考虑不频繁地产生事件的源。这里,剩余的查询可以被延迟加载。更一般地,查询可以具有许多源,但是本文描述的技术同样适用。为了简单起见,考虑了单源查询。例如,考虑以下查询表达式:
weather(“SEA”).Where(w=>w.Temperature>30C).Bar().Foo()
虽然用于西雅图天气的参数化流可能会频繁地产生事件,但事件通过判断式(predicate)(温度超过30摄氏度)的机会相当小。这样的信息可以由查询仪器来获得,以便获取在重写查询时可以考虑的基数(或者是在给定事件处理系统中的时间维度的重要性的情况下的速度)估计,
let xs=weather(“SEA”).Where(w=>w.Temperature>30C)in
xs.Measure().Bar().Foo()
在这里,“Measure”运算符将“xs”作为源,以不仅订阅它还将测量与该子表达式相关联。例如,“Measure”运算符可以存储子表达式产生的事件的速率的历史记录。如果“weather(“SEA”)”以类似的方式进行装配,也可以计算子表达式的入口和出口的比率。应当理解,可以从其中获得许多统计,其具有衍生物的各种顺序(事件计数、速度、加速度、加速度变化率;处理时间等)。
应注意,“weather”流的参数化还提供过滤,但是如果流是要使用“Where”运算符需要过滤的大规模“firehose”,则相同的观察将适用:
weather.Where(w=>w.City==“SEA”&&w.Temperature>
30C).Bar().Foo()
在这种情况下,可以将查询归一化,例如利用几个连续“Where”运算符子句,以将最限制性的判断式放在首位。接下来,假设温度条件导致事件的不常触发,或者更常见的是:
xs.Where(f).Select(p)....
由处理组件230确定,源“xs”不频繁地产生事件。在这一点上,使得“xs”的事件流触发在查询逻辑的其余部分的调入页面是有意义的。为此,可以使用类似于定时器的技术,但是请记住,“xs”可能具有多于一个的基数,所以期望将计算调入页面一次而不是针对每个消息。在一般形式中,可以进行以下重写:
xs.F()==xs.Publish(ys=>ys.First().SelectMany(y=>ys.StartWith(y).F()))
这可能看起来很复杂,但是在可能发生副作用的一般情况下是必需的。具体地,由于订阅的创建可能具有诸如联系外部服务的副作用,因此可能不期望多次订阅“xs”。这就是使用“Publish”运算符之处。如果“xs”是一个热流,这意味着与响应于订阅而开始产生通知不同,不管订阅如何均产生通知,则“Publish”运算符可以被移除。为了简化上面的代码,假设“xs”是热流,则可以根据需要订阅多次:
xs.F()==xs.First().SelectMany(x=>xs.StartWith(x).F())
现在,更清楚的是,对于可能是任意大的表达式“F”(例如,Where(f).Select(p)),加载被延迟,直到“xs”上的第一个事件到达为止。对于不错过该事件的原始查询表达式“F”,重写器组件210可以将新订阅前面的表达式重新插入到“xs”。这假定“StartWith”运算符的实现是同步的,并且将不会错过在“x”被得到时与在进行对“xs”的内部订阅时之间的在“xs”上接收到的事件。如果此保证不存在,则可以编织进其他运算符以保留消息缓冲。
无论哪种方式,从这里开始,与针对定时器所描述的技术相同的技术适用。“SelectMany”运算符的内部部分可以在消息到达时(对于定时器而言这是一个记号)怠惰地调入页面。可以构建执行所有这些操作的专门的运算符“PageWhenFirstEventArrives”:
xs.PageWhenFirstEventArrives(ys=>ys.F())
这样的运算符可以被构建为如上所示的运算符的组合,或者被构建为使用与“SelectMany”运算符相同的高阶运算符基类的其自身的原语来重用现有的怠惰加载和检查点机制。也就是说,在第一个事件到达之前,没有为“ys.F()”支付检查点和存储器驻留的开销。此外,该运算符的参数可以被抽象为延迟加载的工件,如下:
ctx.DefineObservable(someId,ys=>ys.F());
xs.PageWhenFirstEventArrives(someId)
触发调页的事件到达可以导致由于加载时间而造成的消息处理延迟。与收集统计合作,如果可以例如根据历史数据来预测下一个消息到达,则可以减轻这种情况。然后可以使用该信息来创建提前时间信号。无论如何,在预测错误的情况下,仍然需要基于事件的触发。使用这一观察,调页技术可以被一般化,以允许超出“xs.First()”或定时器的调入页面事件。也就是说,考虑以下运算符:
xs.PageIn(ys=>pageInEvent,ys=>ys.F())
这里,“xs”被馈送到两个lambda表达式中,它们具有别名为“ys”。如前所述,第二个lambda是其中插入可调页代码之处。第一个lambda提供信号,其可以是可以使用源“xs”的任意被观察者表达式(别名为“ys”)。例如,如果希望在第一个事件到达时或者当预测定时器期满时将计算调入页面,则“xs.F()”可以被重写如下:
xs.PageIn(ys=>Merge(ys.First(),Timer(t)),ys=>ys.F())
通过重新使用事件处理运算符的丰富组合,提供了非常灵活的手段来构建调页系统。
给定上述描述的用于将代表事件处理计算的代码调入页面的机制,两个运行时工件产生,即被调入页面的代码和由新开始的计算累积的状态。当所得到的计算不经常地被馈送以新的传入事件时(并且假设定时器也被建模为事件流时),有利的是能够将计算(包括代码和状态)调出页面。
事件处理系统可以包括用于检查点操作状态的机制。因此,现有的对检查点操作状态的运算符支持可以用于支持调页以用于有效地将运行中计算调出页面。
为了提供灵活性,上述“PageIn”运算符可以被并入也接收调出页面信号的示例性“Page”运算符中:
IObservable<T>Page<T,I,R,O>(IObservable<T>source,
Func<IObservable<T>,IObservable<I>>pageIn,
Func<IObservable<T>,IObservable<R>>compute,
Func<IObservable<T>,IObservable<O>>pageOut);
运算符的功能可以以组合方式构建,如前面针对调入页面部分所述。在操作上,“Page”运算符在生命周期期间执行几件事情。运算符订阅引入主题的源以向所提供的功能广播消息,而不重复订阅源的副作用并且不通过使用锁定方案或有界缓冲而丢失消息。此外,“Page”运算符重复执行几个操作。首先,将所广播的源馈送给“pageIn”功能并订阅其结果。在收到通知后,将所广播的源馈送给“compute”功能,将所得到的事件馈送给下游的观察者,并将所广播的源馈送给“pageOut”功能。“pageOut”功能也可以被馈送更多的数据来作出决策,通过举例而非限制,计算结果可以传递给“pageOut”运算符,以支持事件率的测量,并在该比率已经对于预定的延长的时段处于零时调出页面。当接收到与“pageOut”功能相关联的通知时,检查点操作当前计算状态、将运行时工件调出页面、并重复生命周期。
示例使用如下所示:
Page(source:xs,
pageIn:ys=>Merge(ys.First(),Timer(t1)),
compute:ys=>ys.F(),
pageOut:ys=>ys.Throttle(t2))
甚至“pageOut”功能可以被调出页面,直到“pageIn”功能已经产生消息。也就是说,重写组件210可以将延迟加载的参数如下放置:
Page(source:xs,
pageIn:ys=>Merge(ys.First(),Timer(t1)),
compute:Defer(someId1),
pageOut:Defer(someId2))
这里,如前所述定义“someId1”和“someId2”。在操作上,该运算符订阅“xs”,并且在接收到第一个事件或预测事件的到达后将计算调入页面。当节流输入序列接收到事件时,计算被调出页面;也就是说,如果输入事件在时间“t2”内没有被另一事件跟随,则其传播到调出页面功能,并且由于超过“t2”的不活动时间而导致调出页面。
更新组件240被配置为基于响应于所捕获的历史查询执行数据而从处理组件230获得的当前数据或信息来更新或改变调页的操作。所定义的工件或标识符的使用提供了可以动态地改变与“Page”运算符相关联的调页功能的间接级别。
Page(source:xs,
pageIn:Defer(someId3),
compute:Defer(someId1),
pageOut:Defer(someId2))
在上面的片段中,还插入了用于“pageIn”的延迟加载。虽然这对于初始订阅可能是浪费的,但如果查询重复地调出页面并移入回调页,则其可以得到好处。在这一点上,重写组件210或被指定用于更新的分离的更新组件240可以在某些时候重新定义“someId3”和“someId2”,使调出页面行为更不积极和/或使调入页面行为更主动。为了能够实现更新,表示这些调页功能的表达式不应该被急切地内联,因此使用“Defer”运算符。
图4是基于历史数据的具有统计收集和调页功能的重写的图形说明。从左侧开始,接收初始的地理围栏(geo-fencing)查询400。地理围栏查询400基于参数“巴特”、“离开”和“家”设置虚拟障碍并在“巴特离开家”时生成事件。可以重写地理围栏查询400以产生地理围栏查询的可调页版本410。调页功能可以是“SelectMany”运算符的一般化。这里,地理围栏查询400被重写为两部分,第一部分420表示需要驻留在存储器中的代码,第二部分430表示除了在调入页面事件的发生和调出页面事件的发生之间以外不必驻留在存储器中的代码。统计采集代码也被添加到查询的第二部分430中,其收集关于查询执行的统计数据,并将数据保存到历史统计存储440中。重写还注入调入页面功能450和调出页面功能460,其控制查询的第二部分430何时被交换入存储器和交换出存储器。此外,基于统计数据确定调入页面功能450和调出页面功能460。如历史统计存储所示,统计可以根据当对于参数“巴特”、“离开”和“家”通常会破坏地理围栏时先前的查询执行标记进行收集。可以基于数据确定或推断出地理围栏通常在上午8点左右被破坏。因此,调入页面功能450可以设置为在上午8点之前(例如,上午7:45)触发,并且可以将调出页面功能设置为在8点后(例如8:15)触发。利用诸如机器学习的更先进的分析,可以推测查询的触发是工作日上午8点左右和周末上午10点左右。因此,调入页面和调出页面事件的事件序列可以从二十四小时周期性定时器(例如,每天在7:45调入页面)改变为考虑所发现的模式的更复杂的序列。
简略地回到图1,注意优化器组件120和调页组件130被示为分离的实体。可能的是,优化器组件120可以建议基本上被调页组件130撤销的查询优化。换句话说,调页组件130可以对优化的查询进行去优化或反向优化以使查询可调页。例如,优化器组件120可以勾画双“SelectMany”运算符,但是调页组件130可以反转该运算符并将其内联。根据另一个实施例,调页组件130的功能可以嵌入在优化器组件120内,使得优化器组件的结果是优化的可调页查询。
已经关于若干组件之间的交互描述了上述系统、架构、环境等。应当理解,这样的系统和组件可以包括其中指定的组件或子组件、一些指定组件或子组件、和/或附加组件。子组件也可以实现为通信地耦合到其他组件而不是包括在父组件内的组件。此外,一个或多个组件和/或子组件可以组合成单个组件以提供聚合功能。系统、组件和/或子组件之间的通信可以根据推模型和/或拉模型来实现。为了简洁起见,组件也可以与本文中未具体描述的、但本领域技术人员已知的一个或多个其它组件相互作用。
此外,上述公开的系统的各个部分以及下面的方法可以包括或采用人工智能、机器学习或者基于知识或基于规则的组件、子组件、过程、手段、方法或机制(例如,支持矢量机器、神经网络、专家系统、贝叶斯置信网络、模糊逻辑、数据融合引擎、分类器...)。这样的组件尤其可以使由其执行的某些机制或过程自动化,以使得系统和方法的一部分更具自适应性以及高效和智能。作为示例而非限制,处理组件230可以采用这样的机制来推断长期有效查询的活跃时间段,以促进确定何时进行调入页面和调出页面。
鉴于上述示例性系统,可以参考图5-8的流程图更好地理解可以根据所公开的主题实现的方法。虽然为了简化说明的目的,将方法示出和描述为一系列方框,但是要懂得和理解,所要求保护的主题不受框的顺序的限制,因为一些框可以以与本文所描绘和描述的顺序不同的顺序发生和/或其他框同时发生。此外,可以不需要所有图示的框来实现下文描述的方法。
参考图5,示出了在事件处理系统中生成可调页查询的方法500。在附图标记510处,接收、得到或以其他方式获得或获取长期有效事件处理查询。长期有效事件处理查询随着时间通过事件序列或流而持续地被评估。
在附图标记520处,将调入页面触发注入到查询中。调入页面触发标识何时将查询或其部分加载到存储器中。虽然可以在出现由查询处理的事件之后定义调入页面触发,但优选地在查询处理的事件发生之前指定调入页面触发。这可以基于查询运算符的参数和代数特性来确定。另外地或替代地,与查询的执行有关的所收集的数据可以用于确定和更新调入页面触发。
在附图标记530处,插入将查询或其部分调入页面或换言之加载到存储器中的功能。根据一个实施方式,调入页面功能可以利用事件处理系统设施,包括“SelectMany”运算符的内部序列的怠惰加载或延迟加载,以及用于加载查询或其部分的检查点操作机制,其包括代码和数据捕获状态。此外,可以注入用以获取关于查询的执行的数据的功能。除其他之外,活跃时间可以从该数据预测,并可以用于设置或更新调入页面触发和调出页面触发。
在附图标记540处,注入调出页面触发。调出页面触发指示何时可以从存储器移除或卸载查询。例如,这可以在预定时间之后或在预定的不活跃时间之后等等。此外,可以基于所收集的执行数据(诸如预测活跃时间或处理时间)来生成和更新调出页面触发。
在附图标记550处,可以插入将查询调出页面的功能。根据一个实施方式,调出页面功能可以利用与由事件处理系统提供的检查点操作相关联的状态持久性。例如,代码和代码的状态可以保存到持久数据存储。随后可以从存储器中移除或卸载查询。这可以如下完成:直接地例如通过重新分配(deallocate)存储器,或者间接地例如通过设置空指针或将引用计数器递减为零来发起垃圾回收。
图6描绘了将查询调页移入存储器和将查询调页移出存储器的方法600。在附图标记610处,检测到调入页面触发。在附图标记620处,包括代码和潜在的数据捕获状态的长期有效事件处理查询或其一部分被调入页面。换句话说,通过先前不在存储器中的数据评估查询所需的代码被加载到存储器中。根据一个实施方式,可以采用与代码的延迟加载有关的查询处理系统的功能来将查询调入页面。在附图标记630处,可以检测到调出页面触发。接下来,在640处,查询或其一部分可以被调出页面。在一个实施方式中,可以利用查询处理系统的检查点操作功能来将代码和状态保存到持久数据存储中。随后,可以直接地通过重新分配存储器或者间接地通过将指针设置为空或递减引用计数器而发起垃圾回收来从存储器中移除查询。根据一个实施例,整个查询或其部分不需要被调出页面,而是可以只将查询的子集调出页面。例如,在存在嵌套查询的情况下,可以采用策略来选择性地以任何级别将部分调出页面,诸如将最高存储器消耗子树调出页面。
图7示出了将查询调入页面的方法700。在附图标记710处,读取标识符。根据所公开的主题的一个方面,可以采用一个间接级别,其中仅对查询的引用(即标识符)驻留在存储器中。这提供了一种延迟查询加载的机制。在附图标记720处,与标识符相关联的查询或其部分被定位。例如,字典存储结构或键值存储可以存储查询。在这种情况下,使用标识符作为获取存储为数据的查询的键值。在730处,查询或其部分被编译成可执行代码。在附图标记740处,可执行代码在存储器中被内联。换句话说,可执行代码被加载到存储器中替换标识符。最后,在附图标记750处,从永久存储中获取并恢复与查询有关的状态。当然,如果是这个查询第一次被调入页面,则状态可以是某个初始状态或者根本没有状态。
图8是将查询调出页面的方法800的流程图。在附图标记810处,对查询或其部分进行检查点操作。这可以对应于向持久存储保存链接到查询的标识符、查询本身以及查询的状态。根据一个实施例,该检查点操作功能可以由事件处理系统提供,并且仅被调用以用于将查询调出页面。在附图标记820处,标识从存储器移除的查询的部分。根据一个实施例,除了用于将查询调入页面的任何所需的钩子(hook)之外,基本上整个查询或所有部分可以从存储器中移除。根据另一个实施例,只有诸如最高存储器消耗部分的查询的子集从存储器中移除。在一个实例中,可以嵌套查询,并且可以实现策略以选择性地移除任何级别的部分。在附图标记830处,从存储器中移除所标识的查询的部分。例如,查询可以直接地从存储器重新分配或通过将引用指针设置为空或将引用计数器递减为零来间接地收集垃圾。
可以表示为事件序列或事件流的任何数据都可以用作调入页面和调出页面能力的决策过程的一部分。在一个特定实例中,例如与物理存储器和中央处理单元相关联的系统事件可以被表示为事件流。传统上,基于操作系统的调页机构专门处理这些类型的系统度量。这些度量是本文描述的域特定决策过程的次要因素。实际上,域的知识减少了利用系统级别度量来将查询页面调入存储器和页面调出存储器的边缘情况。然而,对于作为在相对较短的时间段内发生大量事件的情况的事件风暴,或者当预测能力不佳时的时间,事件处理系统可以基于系统事件而回退到调页以避免过度使用。此外,在分布式环境中,基于系统事件的事件处理可以用于通过将计算迁移到不同的机器来提升负载的自平衡。
本公开文献的方面适用于作为小规模设备处理的大规模分布式处理。例如,本公开的方面可以结合分布式事件处理系统来实现,或者被服务于处理许多用户的许多查询。在这种场景中,调页可以增加存储器密度,以辅助处理大量的查询。方面也适用于诸如电话的单个计算设备。这里,例如,可以采用调页来从存储器中移除一个或多个用户查询和后台处理以节省电池电力。
本公开支持在事件处理系统中执行或被配置为执行关于调页的各种动作的各种产品和过程。接下来是一个或多个示例性系统和方法
系统包括耦合到存储器的处理器,处理器被配置为执行在存储器中存储的以下计算机可执行组件:第一组件,被配置为接收事件处理查询;以及第二组件,被配置为以可调页的形式重写所述事件处理查询,其支持将所述查询的至少一部分交换入所述存储器以及将其交换出所述存储器。要求保护的系统还可以包括:第三组件,被配置为注入调入页面触发,所述调入页面触发发起将事件处理查询的至少一部分加载到存储器中。在一个实例中,调入页面触发是基于与事件处理查询的执行有关的历史数据而生成的。系统还可以包括:第三组件,被配置为注入调出页面触发,所述调出页面触发发起从存储器中移除事件处理查询的至少一部分。在一个实例中,调出页面触发是基于与事件处理查询的执行有关的历史数据而生成的。系统还可以包括:第三组件,被配置为收集与事件处理查询的执行有关的数据。
一种方法包括采用被配置为执行存储在存储器中的计算机可执行指令的至少一个处理器来执行以下动作:接收事件处理查询;以及基于所述事件处理查询来生成可调页查询,其中所述可调页查询支持将所述事件处理查询的至少一部分交换到存储器中以及将其交换出所述存储器。所述方法还包括注入调入页面触发,以发起将所述事件处理查询的所述至少一部分加载到所述存储器中。该方法还包括注入调出页面触发,以发起从存储器中移除事件处理查询的至少一部分。该方法还包括插入用以延迟将事件处理查询的至少一部分加载到存储器中直到被触发的机构。该方法还包括插入用以收集与事件处理查询的执行有关的数据的机构。该方法还包括采用关于数据的机器学习来推断调入页面触发或调出页面触发中的至少一个。该方法还包括插入用以与将事件处理查询交换出存储器有关地保存事件处理查询的至少一部分的状态的机构。该方法还包括插入用以与将事件处理查询交换到存储器中有关地恢复事件处理查询的至少一部分的状态的机构。该方法还包括插入用以将事件处理查询的至少一部分的子集交换出存储器的机构。
一种具有存储在其上的指令的计算机可读存储介质,其使得至少一个处理器能够在所述指令的执行时执行一种方法,所述方法包括:关于事件序列检测调入页面触发;以及响应于检测到所述调入页面触发而将事件处理查询的至少一部分加载到存储器中。加载事件处理查询的方法可以包括:基于标识符来定位事件处理查询的至少一部分的数据表示;以及将数据表示编译成可执行代码。该方法还可以包括关于事件序列检测调出页面触发;以及响应于检测到所述调出页面触发来从所述存储器卸载所述事件处理查询的所述至少一部分。卸载事件处理查询的方法可以包括发起捕获事件处理查询的当前状态的状态捕获操作。卸载事件处理查询的方法可以包括仅卸载事件处理查询的至少一部分的子集。
所要求保护的公开的各方面涉及结合处理常规查询的计算机存储器的管理的技术问题。与解决此问题相关联的技术特征包括采用事件处理系统来通过重写查询以支持移入存储器调页和移出存储器调页来管理存储器。因此,本公开的各方面在资源的高效使用方面(包括但不限于存储器节省和增加的处理速度)展现技术效果。
词语“示例性”或其各种形式在本文中用于表示用作示例、实例或说明。本文描述为“示例性”的任何方面或设计不一定被解释为比其他方面或设计优选或有利。此外,示例仅为了清楚和理解的目的而提供,并不意图以任何方式限制或约束所要求保护的主题或本公开的相关部分。应当理解,可以提出各种范围的无数附加或替代示例,但是为了简洁起见其已被省略。
如本文所使用的术语“组件”和“系统”及其各种形式(例如,组件、系统、子系统...)旨在表示计算机相关实体,硬件、硬件和软件的组合、软件或执行中的软件。例如,组件可以是但不限于在处理器上运行的进程、处理器、对象、实例、可执行文件、执行线程、程序和/或计算机。作为说明,在计算机上运行的应用程序和计算机两者均可以是组件。一个或多个组件可以驻留在执行的进程和/或线程内,并且组件可以被本地化在一个计算机上和/或分布在两个或更多个计算机之间。
在本说明书和所附权利要求书中使用的连词“或”旨在意味着包含性“或”而不是排他的“或”,除非另有说明或者从上下文中是清楚的。换句话说,“X”或“Y”旨在表示“X”和“Y”的任何包含性的排列。例如,如果“‘A’采用‘X’”、“‘A’采用‘Y’”、“‘A’采用‘X’和‘Y’两者”,则在任何上述实例中满足“‘A’采用‘X’或‘Y’”。
此外,在详细描述或权利要求书中使用术语“包括”、“包含”、“具有(has)”、“具有(have)”或其形式的变体的意义上,这些术语旨在以与术语“包括”如当“包括”在权利要求中用作过渡词时所解释的类似方式作为包括性的。
为了提供所要求保护的主题的上下文,图9以及下面的讨论旨在提供可以实现主题的各个方面的适当环境的简要的、一般的描述。然而,合适的环境仅仅是一个示例,并不旨在建议对使用范围或功能的任何限制。
虽然上述公开的系统和方法可以在一个或多个计算机上运行的程序的计算机可执行指令的一般上下文中描述,但是本领域技术人员将认识到,各方面也可以与其他程序模块等结合实现。通常,程序模块包括执行特定任务和/或实现特定抽象数据类型的例程、程序、组件、数据结构等等。此外,本领域技术人员将理解,上述系统和方法可以用各种计算机系统配置来实施,包括单处理器、多处理器或多核处理器计算机系统、微型计算设备、大型计算机、以及个人计算机、手持计算设备(例如,个人数字助理(PDA)、电话、手表...)、基于微处理器或可编程的消费者或工业电子设备等。各方面也可以在分布式计算环境中实施,其中任务由通过通信网络链接的远程处理设备执行。然而,所要求保护的主题的一些(如果不是全部)方面可以在独立的计算机上实现。在分布式计算环境中,程序模块可以位于本地和远程存储器设备中的一者或两者中。
参考图9,示出了示例性通用计算机或计算设备902(例如,台式计算机、笔记本计算机、平板计算机、手表、服务器、手持式、可编程消费者或工业电子设备、机顶盒、游戏系统、计算节点...)。计算机902包括一个或多个处理器920、存储器930、系统总线940、大容量存储设备950和一个或多个接口组件970。系统总线940至少通信地耦合上述系统组成部分。然而,应当理解,在其最简单的形式中,计算机902可以包括耦合到存储器930的一个或多个处理器920,其执行在存储器930中存储的各种计算机可执行动作、指令和组件。
处理器920可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑器件、离散的门或晶体管逻辑、离散硬件组件或其被设计用于执行本文所描述的功能的任何组合来实现。通用处理器可以是微处理器,但是替代地,处理器可以是任何处理器、控制器、微控制器或状态机。处理器920还可以被实现为计算设备的组合,例如DSP和微处理器的组合、多个微处理器、多核处理器、一个或多个微处理器结合DSP核、或任何其他这样的配置。在一个实施例中,处理器可以是图形处理器。
计算机902可以包括或以其他方式与各种计算机可读介质交互,以促进控制计算机902以实现所要求保护的主题的一个或多个方面。计算机可读介质可以是可由计算机902访问的任何可用介质,并且包括易失性和非易失性介质以及可移除和不可移除介质。计算机可读介质可以包括两种不同和相互排斥的类型,即计算机存储介质和通信介质。
计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术实现的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括诸如存储器设备(例如,随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)…)的存储设备、磁存储设备(例如硬盘、软盘、磁带盒、磁带...)、光盘(例如、光盘(CD)、数字通用盘(DVD)...)和固态设备(例如,固态硬盘(SSD)、闪存驱动器(例如卡、棒、钥匙驱动器…)…)、或任何其他类似的介质,其存储而不是发送或传送由计算机902可访问的所需信息。因此,计算机存储介质排除调制的数据信号以及关于到通信介质描述的信号。
通信介质体现计算机可读指令、数据结构、程序模块或诸如载波或其他传输机制的调制数据信号中的其他数据,并且包括任何信息传递介质。术语“调制数据信号”是指以对信号中的信息进行编码的方式设置或改变其特征中的一个或多个的信号。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接的有线介质以及诸如声学、RF、红外和其它无线介质的无线介质。
存储器930和大容量存储设备950是计算机可读存储介质的示例。取决于计算设备的确切配置和类型,存储器930可以是易失性的(例如,RAM)、非易失性(例如,ROM、闪存...)或两者的某种组合。作为示例,基本输入/输出系统(BIOS)(包括诸如在启动期间在计算机902内的元件之间传送信息的基本例程)可以存储在非易失性存储器中,而易失性存储器可以用作外部高速缓存存储器以促进处理器920的处理等等。
大容量存储设备950包括用于关于存储器930存储大量数据的可移除/不可移除的、易失性/非易失性计算机存储介质。例如,大容量存储设备950包括但不限于一个或多个设备,例如磁盘或光盘驱动器、软盘驱动器、闪存、固态驱动器或记忆棒。
存储器930和大容量存储设备950可以包括操作系统960、一个或多个应用962、一个或多个程序模块964和数据966,或具有操作系统960、一个或多个应用962、一个或多个程序模块964和数据966存储在其中。操作系统960用于控制和分配计算机902的资源。应用962包括系统和应用软件中的一个或两个,并且可以通过存储在存储器930和/或大容量存储设备950中的、用于执行一个或多个动作的程序模块964和数据966来利用操作系统960对资源的管理。因此,应用程序962可以根据由此提供的逻辑将通用计算机902转换成专用机器。
所要求保护的主题的全部或部分可以使用用于产生软件、固件、硬件或其任何组合的标准编程和/或工程技术来实现,以控制计算机来实现所公开的功能。作为示例而非限制,事件处理系统100或其部分可以是应用程序962的一部分或形成应用程序962的一部分,并且包括存储在存储器和/或大容量存储设备950中的一个或多个模块964和数据966,其功能可以由一个或多个处理器920执行时实现。
根据一个特定实施例,处理器920可以对应于片上系统(SOC)或类似架构,将硬件和软件两者包括或者换言之集成在单个集成电路基板上。这里,处理器920可以包括至少类似于处理器920和存储器930的一个或多个处理器以及存储器等等。传统的处理器包括最少量的硬件和软件,并且广泛依赖于外部硬件和软件。相比之下,处理器的SOC实现更加强大,因为它在其中嵌入了硬件和软件,能够以最小或不依赖于外部硬件和软件实现特定功能。例如,事件处理系统100和/或相关联的功能可以嵌入在SOC架构的硬件内。
计算机902还包括通信地耦合到系统总线940并且促进与计算机902的交互的一个或多个接口组件970。作为示例,接口组件970可以是端口(例如,串行、并行、PCMCIA、USB、FireWire...)或接口卡(例如,声音、视频...)等。在一个示例实现中,接口组件970可以被实现为用户输入/输出接口,以使用户能够通过一个或多个输入设备(例如,诸如鼠标、轨迹球、触控笔、触摸板、键盘、麦克风、操纵杆、游戏垫、卫星天线、扫描仪、照相机、其他计算机…的指示设备)例如通过一个或多个手势或语音输入将命令和信息输入到计算机902中。在另一示例实现中,接口组件970可被实现为输出外围接口,用于向显示器(例如LCD、LED、等离子体…)、扬声器、打印机和/或其他计算机等等提供输出。此外,接口组件970可以被实现为网络接口,以能够实现诸如通过有线通信链路或无线通信链路与其他计算设备(未示出)的通信。
上面描述的内容包括所要求保护的主题的方面的示例。为了描述所要求保护的主题的目的,当然不可能描述组件或方法的每个可想到的组合,但是本领域普通技术人员可以认识到所公开的主题的许多进一步的组合和排列是可能的。因此,所公开的主题旨在涵盖落在所附权利要求的精神和范围内的所有这样的改变、修改和变型。
Claims (20)
1.一种电子系统,包括:
处理器,耦合到存储器,所述处理器被配置为执行被存储于所述存储器中的计算机可执行指令,所述计算机可执行指令在执行时执行以下动作:
接收事件处理查询作为订阅的一部分,以用于继续评估,直至所述订阅被取消;以及
以可调页形式自动重写所述事件处理查询,其中所述可调页形式支持基于在所述事件处理查询或者所述事件处理查询在其上操作的事件序列中的一项或多项的至少一个特征方面指定的一个或者多个注入的触发来将所述事件处理查询的至少一部分交换到所述存储器中以及将其交换出所述存储器。
2.根据权利要求1所述的系统,还包括:将调入页面触发注入到所述可调页形式,所述调入页面触发发起将所述事件处理查询的所述至少一部分加载到所述存储器中。
3.根据权利要求2所述的系统,所述调入页面触发基于与所述事件处理查询的执行有关的历史数据而被生成。
4.根据权利要求1所述的系统,还包括:将调出页面触发注入到所述可调页形式,所述调出页面触发发起将所述事件处理查询的所述至少一部分从所述存储器移除。
5.根据权利要求4所述的系统,所述调出页面触发基于与所述事件处理查询的执行有关的历史数据而被生成。
6.根据权利要求1所述的系统,还包括:收集与所述事件处理查询的执行有关的数据。
7.一种用于事件处理的方法,包括:
采用被配置为执行被存储于存储器中的计算机可执行指令的至少一个处理器来执行以下动作:
接收事件处理查询作为订阅的一部分,以用于继续评估,直至所述订阅被取消;以及
基于所述事件处理查询来生成可调页查询,其中所述可调页查询支持基于所述事件处理查询或者所述事件处理查询在其上操作的事件序列中的一项或多项的至少一个特征来将所述事件处理查询的至少一部分交换到所述存储器中以及将其交换出所述存储器。
8.根据权利要求7所述的方法,还包括将调入页面触发注入到所述可调页查询,所述调入页面触发发起将所述事件处理查询的所述至少一部分加载到所述存储器中。
9.根据权利要求7所述的方法,还包括将调出页面触发注入到所述可调页查询,所述调出页面触发发起将所述事件处理查询的所述至少一部分从所述存储器中移除。
10.根据权利要求7所述的方法,还包括插入用以延迟将所述事件处理查询的所述至少一部分加载到存储器中直到被触发的机构。
11.根据权利要求7所述的方法,还包括插入用以收集与所述事件处理查询的执行有关的数据的机构。
12.根据权利要求11所述的方法,还包括采用关于所述数据的机器学习来推断调入页面触发或者调出页面触发中的至少一个。
13.根据权利要求7所述的方法,还包括插入用以与将所述事件处理查询交换出所述存储器有关地保存所述事件处理查询的所述至少一部分的状态的机构。
14.根据权利要求7所述的方法,还包括插入用以与将所述事件处理查询交换到所述存储器中有关地恢复所述事件处理查询的所述至少一部分的状态的机构。
15.根据权利要求7所述的方法,还包括插入用以将所述事件处理查询的所述至少一部分的子集交换出所述存储器的机构。
16.一种计算机可读存储介质,具有存储于其上的指令,所述指令使得至少一个处理器在执行所述指令期间执行方法,所述方法包括:
检测以支持将事件处理查询的至少一部分交换到所述存储器中以及将其交换出所述存储器的可调页形式指定的所述事件处理查询的页面调入触发,其中所述页面调入触发基于所述事件处理查询或者所述事件处理查询在其上操作的事件序列中的一项或多项的至少一个特征;以及
响应于检测到所述页面调入触发,将位于存储器外部的事件处理查询的至少一部分加载到所述存储器中。
17.根据权利要求16所述的计算机可读存储介质,所述加载所述事件处理查询的方法包括:
基于标识符加载事件处理查询的所述至少一部分的数据表示;以及
将所述数据表示编译成可执行代码。
18.根据权利要求16所述的计算机可读存储介质,所述方法还包括:
关于所述事件序列检测页面调出触发;以及
响应于检测到所述页面调出触发,将所述事件处理查询的所述至少一部分从所述存储器卸载。
19.根据权利要求18所述的计算机可读存储介质,所述卸载所述事件处理查询的方法包括发起捕获所述事件处理查询的当前状态的状态捕获操作。
20.根据权利要求18所述的计算机可读存储介质,所述卸载所述事件处理查询的方法包括仅卸载所述事件处理查询的所述至少一部分的子集。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/684,094 | 2015-04-10 | ||
US14/684,094 US9952916B2 (en) | 2015-04-10 | 2015-04-10 | Event processing system paging |
PCT/US2016/026579 WO2016164678A1 (en) | 2015-04-10 | 2016-04-08 | Event processing system paging |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107820611A CN107820611A (zh) | 2018-03-20 |
CN107820611B true CN107820611B (zh) | 2021-08-13 |
Family
ID=55809214
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680031224.6A Active CN107820611B (zh) | 2015-04-10 | 2016-04-08 | 事件处理系统调页 |
Country Status (16)
Country | Link |
---|---|
US (1) | US9952916B2 (zh) |
EP (1) | EP3281125B1 (zh) |
JP (1) | JP2018517202A (zh) |
KR (1) | KR102548642B1 (zh) |
CN (1) | CN107820611B (zh) |
AU (1) | AU2016245866A1 (zh) |
BR (1) | BR112017020432A2 (zh) |
CA (1) | CA2981728A1 (zh) |
CL (1) | CL2017002521A1 (zh) |
CO (1) | CO2017010173A2 (zh) |
IL (1) | IL254506A0 (zh) |
MX (1) | MX2017013042A (zh) |
PH (1) | PH12017550102A1 (zh) |
RU (1) | RU2017135418A (zh) |
SG (1) | SG11201708133WA (zh) |
WO (1) | WO2016164678A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10303558B2 (en) * | 2015-04-17 | 2019-05-28 | Microsoft Technology Licensing, Llc | Checkpointing higher order query operators |
US20170255949A1 (en) * | 2016-03-04 | 2017-09-07 | Neural Insight Inc. | Process to extract, compare and distill chain-of-events to determine the actionable state of mind of an individual |
US10860568B2 (en) | 2016-04-01 | 2020-12-08 | Arista Networks, Inc. | External data source linking to queries in memory |
US10817512B2 (en) * | 2016-04-01 | 2020-10-27 | Arista Networks, Inc. | Standing queries in memory |
US10783144B2 (en) | 2016-04-01 | 2020-09-22 | Arista Networks, Inc. | Use of null rows to indicate the end of a one-shot query in network switch |
US11609934B2 (en) * | 2018-04-24 | 2023-03-21 | Sap Se | Notification framework for document store |
US11138213B2 (en) | 2019-04-10 | 2021-10-05 | Snowflake Inc. | Internal resource provisioning in database systems |
US10871950B2 (en) | 2019-05-16 | 2020-12-22 | Microsoft Technology Licensing, Llc | Persistent annotation of syntax graphs for code optimization |
CN111973985B (zh) * | 2020-08-26 | 2024-02-09 | 网易(杭州)网络有限公司 | 基于序列的事件处理方法、装置、电子设备及存储介质 |
KR102499488B1 (ko) * | 2022-04-13 | 2023-02-14 | 주식회사 비투엔 | 마이크로 서비스 아키텍처 기반의 쿼리 오케스트레이션 처리 장치 및 방법 |
US20230342143A1 (en) * | 2022-04-22 | 2023-10-26 | Sap Se | High-performance computer system and method for improved software event management |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043826A (zh) * | 2009-10-14 | 2011-05-04 | 国际商业机器公司 | 事件处理的方法和装置 |
CN102713908A (zh) * | 2009-11-19 | 2012-10-03 | 厦姆技术有限公司 | 用于自适应提问和推荐的装置和方法 |
CN103020150A (zh) * | 2011-11-22 | 2013-04-03 | 微软公司 | 多维分组运算符 |
CN103765820A (zh) * | 2011-09-09 | 2014-04-30 | 惠普发展公司,有限责任合伙企业 | 基于依照事件序列中时间位置的参考基线评估事件的系统和方法 |
CN104067274A (zh) * | 2012-01-19 | 2014-09-24 | 谷歌公司 | 用于改进对搜索结果的访问的系统和方法 |
CN104094305A (zh) * | 2012-02-14 | 2014-10-08 | 微软公司 | 针对搜索结果的实时广告发布 |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7062452B1 (en) * | 2000-05-10 | 2006-06-13 | Mikhail Lotvin | Methods and systems for electronic transactions |
GB0108354D0 (en) * | 2001-04-03 | 2001-05-23 | Thirdspace Living Ltd | System and method for providing a user with access to a plurality of sevices and content from a broadband television service |
EP1430420A2 (en) * | 2001-05-31 | 2004-06-23 | Lixto Software GmbH | Visual and interactive wrapper generation, automated information extraction from web pages, and translation into xml |
WO2004077217A2 (en) | 2003-01-30 | 2004-09-10 | Vaman Technologies (R & D) Limited | System and method of object query analysis, optimization and execution irrespective of server functionality |
US7653636B2 (en) * | 2003-02-28 | 2010-01-26 | Bea Systems, Inc. | Systems and methods for streaming XPath query |
US7447680B2 (en) | 2004-07-29 | 2008-11-04 | International Business Machines Corporation | Method and apparatus for optimizing execution of database queries containing user-defined functions |
JP4687253B2 (ja) | 2005-06-03 | 2011-05-25 | 株式会社日立製作所 | ストリームデータ処理システムのクエリ処理方法 |
US20070067305A1 (en) * | 2005-09-21 | 2007-03-22 | Stephen Ives | Display of search results on mobile device browser with background process |
US8117600B1 (en) * | 2005-12-29 | 2012-02-14 | Symantec Operating Corporation | System and method for detecting in-line synchronization primitives in binary applications |
US7979431B2 (en) | 2006-06-30 | 2011-07-12 | Teradata Us, Inc. | System and method for automatically modifying a query within a web based database system |
TWI337715B (en) | 2006-11-08 | 2011-02-21 | Inst Information Industry | Method and system for complex event processing |
US7822729B2 (en) * | 2007-08-15 | 2010-10-26 | International Business Machines Corporation | Swapping multiple object aliases in a database system |
US8244954B2 (en) * | 2008-10-10 | 2012-08-14 | International Business Machines Corporation | On-demand paging-in of pages with read-only file system |
US8356026B2 (en) | 2009-08-31 | 2013-01-15 | Microsoft Corporation | Predictive data caching |
US8413169B2 (en) | 2009-10-21 | 2013-04-02 | Microsoft Corporation | Time-based event processing using punctuation events |
US20110246223A1 (en) | 2010-03-31 | 2011-10-06 | Umass Medical School | Active complex event processing or infection control and hygiene monitoring |
US20120072411A1 (en) | 2010-09-16 | 2012-03-22 | Microsoft Corporation | Data representation for push-based queries |
US20120072442A1 (en) * | 2010-09-22 | 2012-03-22 | Microsoft Corporation | Monadic type preservation for query operators |
US8788484B2 (en) | 2010-12-27 | 2014-07-22 | Software Ag | Systems and/or methods for user feedback driven dynamic query rewriting in complex event processing environments |
US20130031567A1 (en) | 2011-07-25 | 2013-01-31 | Microsoft Corporation | Local event processing |
US20130160024A1 (en) | 2011-12-20 | 2013-06-20 | Sybase, Inc. | Dynamic Load Balancing for Complex Event Processing |
US9201810B2 (en) * | 2012-01-26 | 2015-12-01 | Microsoft Technology Licensing, Llc | Memory page eviction priority in mobile computing devices |
US8812489B2 (en) * | 2012-10-08 | 2014-08-19 | International Business Machines Corporation | Swapping expected and candidate affinities in a query plan cache |
US20140237487A1 (en) | 2013-02-15 | 2014-08-21 | University Of Southern California | Complex event processing for dynamic data |
US9720974B1 (en) * | 2014-03-17 | 2017-08-01 | Amazon Technologies, Inc. | Modifying user experience using query fingerprints |
-
2015
- 2015-04-10 US US14/684,094 patent/US9952916B2/en active Active
-
2016
- 2016-04-08 SG SG11201708133WA patent/SG11201708133WA/en unknown
- 2016-04-08 KR KR1020177032379A patent/KR102548642B1/ko active IP Right Grant
- 2016-04-08 WO PCT/US2016/026579 patent/WO2016164678A1/en active Application Filing
- 2016-04-08 AU AU2016245866A patent/AU2016245866A1/en not_active Abandoned
- 2016-04-08 CN CN201680031224.6A patent/CN107820611B/zh active Active
- 2016-04-08 JP JP2017552878A patent/JP2018517202A/ja active Pending
- 2016-04-08 EP EP16718793.9A patent/EP3281125B1/en active Active
- 2016-04-08 BR BR112017020432A patent/BR112017020432A2/pt not_active Application Discontinuation
- 2016-04-08 RU RU2017135418A patent/RU2017135418A/ru not_active Application Discontinuation
- 2016-04-08 CA CA2981728A patent/CA2981728A1/en not_active Abandoned
- 2016-04-08 MX MX2017013042A patent/MX2017013042A/es unknown
-
2017
- 2017-09-14 IL IL254506A patent/IL254506A0/en unknown
- 2017-09-15 PH PH12017550102A patent/PH12017550102A1/en unknown
- 2017-10-06 CO CONC2017/0010173A patent/CO2017010173A2/es unknown
- 2017-10-06 CL CL2017002521A patent/CL2017002521A1/es unknown
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043826A (zh) * | 2009-10-14 | 2011-05-04 | 国际商业机器公司 | 事件处理的方法和装置 |
CN102713908A (zh) * | 2009-11-19 | 2012-10-03 | 厦姆技术有限公司 | 用于自适应提问和推荐的装置和方法 |
CN103765820A (zh) * | 2011-09-09 | 2014-04-30 | 惠普发展公司,有限责任合伙企业 | 基于依照事件序列中时间位置的参考基线评估事件的系统和方法 |
CN103020150A (zh) * | 2011-11-22 | 2013-04-03 | 微软公司 | 多维分组运算符 |
CN104067274A (zh) * | 2012-01-19 | 2014-09-24 | 谷歌公司 | 用于改进对搜索结果的访问的系统和方法 |
CN104094305A (zh) * | 2012-02-14 | 2014-10-08 | 微软公司 | 针对搜索结果的实时广告发布 |
Also Published As
Publication number | Publication date |
---|---|
JP2018517202A (ja) | 2018-06-28 |
PH12017550102A1 (en) | 2018-02-26 |
MX2017013042A (es) | 2017-12-08 |
AU2016245866A1 (en) | 2017-10-05 |
EP3281125B1 (en) | 2019-07-31 |
CA2981728A1 (en) | 2016-10-13 |
EP3281125A1 (en) | 2018-02-14 |
CL2017002521A1 (es) | 2018-03-16 |
SG11201708133WA (en) | 2017-11-29 |
WO2016164678A1 (en) | 2016-10-13 |
KR102548642B1 (ko) | 2023-06-27 |
RU2017135418A (ru) | 2019-04-05 |
US20160299799A1 (en) | 2016-10-13 |
US9952916B2 (en) | 2018-04-24 |
CO2017010173A2 (es) | 2018-01-16 |
CN107820611A (zh) | 2018-03-20 |
BR112017020432A2 (pt) | 2018-07-03 |
KR20170134723A (ko) | 2017-12-06 |
IL254506A0 (en) | 2017-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107820611B (zh) | 事件处理系统调页 | |
US11683396B2 (en) | Efficient context monitoring | |
Mayer et al. | Predictable low-latency event detection with parallel complex event processing | |
Zhang et al. | A comparison of parallel large-scale knowledge acquisition using rough set theory on different MapReduce runtime systems | |
US8037096B2 (en) | Memory efficient data processing | |
Mayer et al. | SPECTRE: Supporting consumption policies in window-based parallel complex event processing | |
Zdravevski et al. | Cluster-size optimization within a cloud-based ETL framework for Big Data | |
Fernandez et al. | Scalable stateful stream processing for smart grids | |
Becker et al. | Scheduling multi-rate real-time applications on clustered many-core architectures with memory constraints | |
CN113886382A (zh) | 数据库任务处理方法、设备及存储介质 | |
US10896130B2 (en) | Response times in asynchronous I/O-based software using thread pairing and co-execution | |
US10558502B2 (en) | Software application runtime having dynamic evaluation functions and parameters | |
Gupta et al. | AcT: Accuracy-aware crawling techniques for cloud-crawler | |
Reimann et al. | Design, implementation, and evaluation of a tight integration of database and workflow engines | |
CN115098232A (zh) | 任务调度的方法、装置和设备 | |
US20240020169A1 (en) | Conserving computing resources for machine learning pipelines with a feature service | |
Nelissen et al. | The SRP resource sharing protocol for self-suspending tasks | |
Watanabe et al. | Query result caching for multiple event-driven continuous queries | |
Dashora et al. | ParaRMS algorithm: A parallel implementation of rate monotonic scheduling algorithm using OpenMP | |
Zha | State Management for Efficient Event Pattern Detection | |
Wan et al. | Diting: A real-time distributed feature serving system for machine learning | |
Mao et al. | MorphStream: Scalable Processing of Transactions over Streams on Multicores | |
Joseph Victor Raj | Design and implementation of highly-efficient data structures for parallel complex event processing framework on multicore shared memory architecture | |
Adekoya | Understanding Spark System Performance for Image Processing in a Heterogeneous Commodity Cluster | |
CN117519939A (zh) | 混部集群中基于二阶段干扰感知离线任务调度方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |