我工作的一个学区,我们计划使用Drools的实现以下类型的地区组成学校的学生人数规则:应坚持Drools的知识会话
- 如果学生有3个在一年的缺勤期间,他们的出勤率指标进入WARN状态。
- 如果学生在一年内有6次缺课,则他们的出勤指标将进入CRITICAL状态。
- 如果学生在一年内有3个主要行为事件,他们的行为度量将转为WARN状态。
- 如果学生在一年内有2次轻微和2次重大行为事件,他们的行为指标将转为CRITICAL状态。
- ......这些只是我头顶的例子,但还有更多类似性质的规则。
所有这些规则都可以用Drools专家简单地表达。另外,学生的规则处理不需要是同步的。我有几个关于实现这个最好方法的问题。
从一个角度来看,这可以被视为一个事件流的监控系统。这让我想到创建一个有状态的会话,每个新事件都将插入到该会话中。然而,这些事件在9个月内发生,并且相对罕见。另外,我们可以为每个学校建立一个会话,或者为每个学生创建一个会话
- 会在内存中保持一个会话很长时间会成为问题吗?
- 如果服务器发生故障,我们是否需要从头开始重建会话状态,或者建议您定期拍摄快照并恢复自快照时间以来发生的事实。
另一种选择是在为该学生处理事件后为每个学生保留一个会话。当下一个事件进入时,我们将从存储中检索他们的会话并插入新的事实。这样我们就不需要检索引擎每次运行的所有事实来获得学生的状态。会支持这样的配置吗?有没有这样做的缺点?
第三种方法是通过检索规则需要运行的所有其他事实来响应学生的新事实,创建新的KnowledgeSession并运行规则。
任何意见什么可能是最好的方法将不胜感激。
戴夫