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