问题标签 [complex-event-processing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1261 浏览

expert-system - CEP 引擎与专家系统

复杂事件处理引擎和专家系统引擎之间的主要区别是什么?

我什么时候应该使用一种或另一种?

0 投票
1 回答
497 浏览

esper - Nesper 模式的 EPL 错误

我正在试验 Nesper(Esper 的 .NET 版本)并遇到了一些我无法理解的麻烦。以下简单的 EPL(根据本教程建模)失败并出现错误:

我得到的错误是:

我的第一个怀疑是 ID 可能没有在派生自 Observation 类的 SeenEvent 类中正确公开。但我确认在 Observation 类中,属性 ID 被定义为 Public。

这是 EPL 的一个已知问题吗?Nesper 与 Esper(它是 Java 表亲)不同吗?

0 投票
1 回答
2379 浏览

java - Drools Fusion 支持持久的、长时间运行的事件

我正在考虑使用Drools Fusion来实现以下示例性规则:

  • 如果客户在一年内购买了两个相同的产品,她将免费获得第三个
  • 最多连续三笔消费超过 200 美元的客户可获得折扣
  • 当客户超过一年不活动时,会生成提醒
  • 当单个订单大于过去 6 个月内的平均订单价值时,会通知主管
  • ...等等,这些只是我脑海中的例子

所有这些规则都可以使用 Drools Fusion 轻松表达。然而,在创建原型并查看文档后,该产品似乎更适合短期、瞬态事件(股票市场、实时决策)。

问题是:是否需要将所有事件存储在内存中?(可能是数百万非常古老的购买)。此外,Drools Fusion 是否可以存储事件以便它们在服务器重启后仍然存在?(理想情况下在数据库中)。

我知道 Drools Fusion 事件只是Drools Expert中的事实,所以也许问题可以扩展为:Drools Expert 可以坚持并延迟加载事实吗?

0 投票
2 回答
3687 浏览

java - esper引擎的示例代码

我想开始学习 ESPER 引擎,我发现酯类原生示例有点复杂。

有没有人有一个很好的简单示例java代码,关于使用esper?

0 投票
0 回答
196 浏览

c# - 如何从 Nesper (C# .NET) 配置对 Oracle 11g 模式的访问

我正在尝试从 Nesper(在 C# 中)配置对 Oracle 实例的访问。

该文档涵盖了如何以编程方式和通过 XML 配置文件在 Java 中执行此操作 - 但这些倾向于引用将用于执行连接的 JDBC 驱动程序,因此我不知道 .NET 等效项是什么。

如何使用 ConfigurationDBRef::SetDatabaseDriver() 方法在 .NET 中以编程方式配置访问?我收到以下代码错误:

Yields: EPException "Unable to resolve type for driver 'Oracle.DataAccess.Client'" - 即使在我的项目中引用了 Oracle 客户端。

.NET 示例的文档非常少,所以我希望这个问题的答案将成为其他人的一个很好的资源。

0 投票
2 回答
5813 浏览

amazon-ec2 - 如何使用 esper 进行横向扩展?

我一直在关注 Esper(和 Storm)的流处理。Esper 似乎完全符合我的要求。即滚动意味着、中位数、复杂查询等......但有一件事让我想知道。

如何使用 Esper 扩展到多个实例?

据我了解,Storm 处理分布式处理,但使用 Esper,您就得靠自己了。

在可预见的未来,我不需要这样做,但随着我们的增长,我们的数据量也会随之增长,然后也需要向外扩展。我们很可能会部署在 Amazon EC2 中。

在将它们发送到我的 Esper 应用程序之前,我是否需要运行多个服务器和分片数据?

有没有更优雅的处理方式?

-萨哈尔

0 投票
1 回答
247 浏览

java - 匹配序列的高效算法

我正在寻找一种有效的算法来匹配 [大] 数据列表中的模式/序列。给定某种类型:

我想匹配以下情况。

我已经实现了一个非常基本的状态机来匹配这种模式,它工作得很好并且具有非常可接受的吞吐量。但是,如果我想添加额外的时间限制,例如第二个模式必须在第一个之后发生 X 秒

状态机概念似乎不再合适,因为有必要评估(并重新评估已经匹配的条件)并将状态存储在内存中,然后尝试将它们关联起来。系统中将有大约 1000 条这种类型的“规则”。

** 编辑 **

澄清一下,如果我试图匹配如下序列:

并给出输入数据:

我希望这会在 t=7 时达到它的最终状态。但是,我能看到的唯一方法是存储所有其他状态转换?

** 结束编辑 **

我以前使用过支持 CEP 的规则引擎来匹配这些条件,它工作得相当好,但无法处理所需的大量数据(每秒数十万个事件)。

有没有解决这个问题的有效方法?我正在使用 Java。

谢谢

0 投票
5 回答
4325 浏览

database - 哪些分页方案可以处理快速变化的内容列表?

当您的内容排名可以快速变化时,分页很难,当每个用户的排名不同时,分页就更难了。(让我们将无限滚动视为一种链接不可见的分页。)有两个难题:顶部的新添加内容和重新排序的内容。

让我们忘记新添加的内容,并接受您必须刷新第 1 页才能看到它。让我们也假装我们在做 pure ORDER BY position; 如果您通过其他方式订购,则可能必须使用窗口功能。我们的页面每页有 4 行动物。他们开始:

在我们获取第 1 页之后,在我们获取第 2 页之前,很多项目都在移动。数据库现在是:

常见的方法有以下三种:

偏移/限制方法

这是典型的幼稚方法;在 Rails 中,这就是will_paginateKaminari的工作方式。如果我想获取第 2 页,我会这样做

得到第 5-8 行。我永远不会看到大象,我会看到两次奶牛。

上次看到的 ID 方法

Reddit 采取了不同的方法。客户端不会根据页面大小计算第一行,而是跟踪您看到的最后一项的 ID,例如书签。当您点击“下一步”时,他们会从该书签开始查找:

在某些情况下,这比页面/偏移量更好。但在我们的案例中,最后一次看到的帖子 Dogs 向右放大到 #1。所以客户发送了?last_seen_id=4,我的第 2 页是蝙蝠、羊驼、大象和狐狸。我没有错过任何动物,但我两次看到蝙蝠和羊驼。

服务器端状态

HackerNews(和我们的网站,现在)通过服务器端的延续解决了这个问题;他们为您存储整个结果集(或至少提前几页?),并且“更多”链接引用该延续。当我获取第 2 页时,我要求“原始查询的第 2 页”。它使用相同的偏移量/限制计算,但由于它与原始查询相反,我根本不在乎事情现在已经发生了变化。我看到大象、狐狸、长颈鹿和马。没有重复,没有遗漏的项目。

缺点是我们必须在服务器上存储大量状态。在 HN 上,它存储在 RAM 中,实际上这些延续通常在您按下“更多”按钮之前就过期,迫使您一直返回第 1 页以找到有效链接。在大多数应用程序中,您可以将其存储在 memcached 中,甚至可以存储在数据库本身中(使用您自己的表,或者在 Oracle 或 PostgreSQL 中,使用可保持游标)。根据您的应用程序,可能会影响性能;至少在 PostgreSQL 中,您必须找到一种方法来再次访问正确的数据库连接,这需要大量的粘性状态或一些巧妙的后端路由。

这是仅有的三种可能的方法吗?如果没有,是否有计算机科学概念可以让我在谷歌上阅读相关内容?有没有办法在不存储整个结果集的情况下近似延续方法?从长远来看,存在复杂的事件流/时间点系统,其中“在我获取第 1 页时的结果集”是永远可推导出的。还不够……?

0 投票
1 回答
650 浏览

events - 如何使用 Drools Fusion 处理延迟事件

事件 A然后是事件B。如果A 的 5 分钟后没有事件 B,则触发规则。

对于运行良好的实时事件,但在现实生活中,您会遇到延迟的事件,例如。从一个界面。

示例:事件 A 时间:01:00 (mm:ss) 但在 02:00 收到 上述规则将在 07:00 触发,但业务逻辑要求它在 06:00 触发

我该如何处理这种要求?

0 投票
1 回答
1148 浏览

c# - 如何组合两个按时间戳排序然后分组的流?

我有两个对象流,每个对象都有一个Timestamp值。两个流都是有序的,因此例如时间戳可能是一个流中的 T a =1,3,6,6,7和另一个流中的 T b = 1,2,5,5,6,8。两个流中的对象属于同一类型。

我想做的是将这些事件中的每一个按时间戳顺序放置在总线上,即放置 A 1,然后放置 B 1、 B 2、 A 3等等。此外,由于某些流具有多个具有相同时间戳的(顺序)元素,因此我希望将这些元素分组,以便每个新事件都是一个数组。所以我们将 [A 3 ] 放在总线上,然后是 [A 1 5 ,A 2 5 ] 等等。

我试图通过创建两个ConcurrentQueue结构来实现这一点,将每个事件放在队列的后面,然后查看队列的每个前面,首先选择较早的事件,然后遍历队列,以便存在具有此时间戳的所有事件.

但是,我遇到了两个问题:

  • 如果我让这些队列不受限制,我很快就会耗尽内存,因为读取操作比接收事件的处理程序快得多。(我有几千兆字节的数据)。
  • 我有时会遇到这样一种情况,即我在 A 2 5到达之前处理事件,例如 A 1 5 。我不知何故需要提防这一点。

我认为 Rx 可以在这方面提供帮助,但我没有看到明显的组合器可以使这成为可能。因此,非常感谢任何建议。