java批量加入约束_处理大量规则(条件和约束)CEP系统

我正在开发一个接受100k独特输入的应用程序 - 为简单起见假设每个输入都是一个浮点值(a,b,c ......等) - 尽管它们也可以是字符串等 . 应用程序有很多规则/与这些输入相关的事件/触发器 .

Example1:

Rule[(a > b) and (c <= d)] --> [execute EventX]

Definition1: 上述规则说:当输入'a'的值大于'b'的值且输入'c'的值小于或等于'd'的值时,执行EventX

Example2:

Rule[x != x.prev] --> [execute EventZ]

Definition2: 上述规则说明:如果值更新后,如果输入'x'的当前值不等于其先前值(值已更改) . 执行EventZ

我发现,随着输入数量的增加,以及规则数量的增加,评估“特定”规则并确定是否应该触发事件所需的总计算量正在失控 - 投掷该问题的速度越来越快,而且没有按预期进行扩展 .

目前,在每次新的输入更新时,相关的输入/变量在哈希表中查找,该哈希表将变量映射到包含它的规则 . 随后评估每个规则,如果结果为真或可操作,则异步触发相关事件 .

这个问题出现在复杂事件处理领域,遗憾的是,这个领域中的大多数架构使用了上面描述的相同的死角方法 - 可能还有一些与评估/重新评估事物的频率有关的改进 . 我们的想法是拥有一个能够近乎实时地做出反应的系统 . 在多个节点上分配规则和输入似乎也不能很好地工作,因为在某些情况下,超过95%的活动规则中存在少数输入 .

我希望是否有任何其他SO'ers,知道更好的方法来解决这个问题,数据/结构或算法 .

我想到的一个简单的想法是,可以构建一个依赖逻辑推理的列表 .

如果有两个规则是这样的:

Rule[a < b] --> [exec E1]

Rule[b >= a] --> [exec E2]

然后对'a'或'b'的更新不应该要求对两者等进行评估,但我发现构建这样的逻辑推理结构非常复杂且容易出错,并且难以完全和严格地测试 .

输入可以代表股票价格,温度传感器等 .

还要注意,一些输入在时间上受到限制,这意味着规则可能要求变量的状态在特定位置/状态下持续一段时间(例如:MSFT的价格>最后30秒的20美元),目前,这是通过使用值为0或1 / false或true的'代表变量'(facade)来实现的(变量的值由单独的机制决定,这通常是规则被触发的结果) .

还应该注意的是,由于近实时约束和每秒产生的数据量,使用具有触发器和存储过程的DB的选项是不可能的 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值