当前位置: 首页 > 知识库问答 >
问题:

事实组的不同伪时钟

章安易
2023-03-14

我是drools/Fusion(7. x)的新手,不知道如何解决这个要求。假设我的事件对象为Event{long: time戳, id: string},其中id标识物理资产(如拖拉机),时间戳表示事件相对于资产触发的时间。在我的场景中,这些事件不会“实时”到达我的系统,这意味着它们可能会延迟几秒钟、几分钟甚至几天。我的规则系统需要监控多个资产。鉴于此,当评估规则时,时钟需要相对于被监控的资产,它不能是跨资产的时钟。我知道伪时钟,有没有办法为每个资产分配伪时钟?

我的假设是,时钟必须始终向前,否则时间函数将无法正常工作。以以下场景为例:资产1的事实A在1:00到达,它被插入内存并触发规则。然后事实B在2:00到达同一资产1。它也会被插入并触发规则。现在,事实Z在1:30到达资产2(离时钟还有30分钟)。我假设我不应该简单地将时钟向后推进并进行评估,而且我想将时钟设置回2:00,因为这是我收到的“最新”数据。现在假设我正在监视数千个资产,所有资产都在不同的时间发送数据。。。

我能想到的解决这个问题的最好方法是为每个资产保留一个时钟,然后在评估每个资产数据时保存引擎状态。单个基思会有不同的时钟吗,还是在容器级别?

示例规则:当同一资产的事实1在事实2之后到达时。

共有1个答案

袁增
2023-03-14

您处理问题的方式不正确。无论您使用的是实时时钟还是伪时钟,您都在使用时钟。你不能说“事实1使用时钟A,事实2使用时钟B。”

相反,您应该利用事件的元数据标记,特别是时间戳标记。此标记向Drools指出,事件中的特定字段实际上是事件的时间戳,而不是事实进入工作内存的实际时间。

例如:

import com.example.SampleEvent

declare SampleEvent
  @role( event )
  // this field is actually in the object, it's not the time the fact was inserted
  @timestamp( createdDateTime ) 
end

我不知道您的规则实际上在做什么,这里我可以预见的主要问题是,如果您的规则依赖于时态操作符或定义过期(@expires),它们将无法工作,您需要重新设计它们。特别是对于过期事件:一旦事件过期,它就会从工作记忆中删除;当您的带外事件出现时,任何以前过期的事件都已消失,无法处理。

当然,无论您使用的是时间戳还是原始的“不同的psuedo时钟”计划,这种担忧都是真实的。无论哪种方式,您都必须管理这样一个事实,即事件不能永远存在于工作内存中——您最终将耗尽资源,系统将崩溃。事件必须在某个时候被逐出,所以您需要在模型和规则中围绕这一点进行设计。

 类似资料:
  • 本文向大家介绍在Unity中实现简单的伪时间同步,包括了在Unity中实现简单的伪时间同步的使用技巧和注意事项,需要的朋友参考一下 在Unity中实现简单的伪时间同步,只是读取数据库所在电脑的当前时间 以上就是本文所述的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍CSS的伪类和伪对象有什么不同?相关面试题,主要包含被问及CSS的伪类和伪对象有什么不同?时的应答技巧和注意事项,需要的朋友参考一下 伪类:我们常用的比如,hover,focus等,我认为伪类是为了弥补选择器的不足。还有伪类选择器,比如first-child,nth-child. 伪元素 : ::before ::after 是为了创建一个dom元素,使用content属性指定要插入

  • 由于在所述实体不可用的情况下返回,因此需要进行如上所示的条件测试,以避免可能的,否则很可能发生。在任何地方重复这个琐碎的条件测试都是非常不可接受和不鼓励的,这使得业务逻辑应该尽可能简单,几乎不可读。 为了防止这种条件检查到处重复,我在一个单独的EJB中有一个通用方法, 从另一个EJB内部调用此方法,如下所示, 在这里,尽管所有事情都发生在同一个事务中,返回,即返回的实体由两个EJB中的管理。 虽然

  • 本文向大家介绍JavaScript伪数组用法实例分析,包括了JavaScript伪数组用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript伪数组用法。分享给大家供大家参考,具体如下: 在Javascript中什么是伪数组? 伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。 1.典型的是函数的 a

  • 我正在尝试在Vue中实现从头开始的自动完成,但是我有问题在下拉菜单中选择选项。我正在启用(shownig)这个下拉列表,在点击输入或用户输入时。然后,在输入之外的焦点上,我想摆脱下拉列表。但是,这意味着当我选择dropdown中的内容时,我将关闭dropdown,而不是触发。如何同时保持对和对下拉选项?到目前为止,使起作用的唯一方法是删除,这不是我想要的...

  • 我正试图创建一个产品清单使用谷歌表。每种类型的产品都有许多属性(或变体),这些属性组合在一起可以创建单个产品。 例如,有 直径:1/4英寸、1/2英寸、3/4英寸等。 长度:1/2英寸、1英寸、1/2英寸等 材料:钢、不锈钢 等等 特定产品是这些变化的特定组合。例如: 1/4英寸X 1/2英寸钢制圆头方颈螺栓 我要做的是创建一系列只包含属性的列。因此,直径柱、长度柱、材料柱等。 然后,我想通过将这