繁体   English   中英

坚持Drools知识会议

[英]Persisting Drools Knowledge Session

我在一个学区工作,我们正在计划使用Drools为地区成员学校的学生群体实施以下类型的规则:

  • 如果学生在一年中有3次缺席,他们的出勤率会转为WARN状态。
  • 如果学生在一年中有6次缺勤,则他们的出勤率会变为临界状态。
  • 如果学生在一年中有3个主要行为事件,则他们的行为指标会转变为WARN状态。
  • 如果学生在一年中有2个轻微和2个主要行为事件,则他们的行为指标会变为临界状态。
  • ......这些只是我头脑中的例子,但还有更多类似性质的规则。

所有这些规则都可以使用Drools专家简单表达。 此外,学生的规则处理不需要是同步的。 关于实现此问题的最佳方法,我有几个问题。

  1. 从一个角度来看,这可以被视为一个事件流的监控系统。 这让我想到创建一个有状态的会话,每个新事件都将插入其中。 然而,事件发生在9个月的过程中并且相对不频繁。 此外,我们可以建立每个学校的课程,或每个学生的课程。

    • 会长期保持会话是一个问题吗?
    • 如果服务器出现故障,我们是否需要从头开始重建会话状态,或者建议采用常规快照并仅恢复自快照时起发生的事实。
  2. 另一种选择是在为该学生处理事件后为每个学生坚持一个会话。 当下一个事件进入时,我们将从存储中检索其会话并插入新事实。 这样我们就不需要为每次引擎运行检索所有事实来获得学生的状态。 会支持这样的配置吗? 这样做有什么缺点吗?

  3. 第三种方法是通过检索规则需要运行的所有其他事实,创建新的KnowledgeSession并运行规则来响应学生的新事实。

任何关于什么可能是最好的方法的建议将不胜感激。

戴夫

我会选择2号解决方案:每个学生一次。 鉴于你不打算与会话进行太多交互,我会把它保存在数据库中,只在需要时恢复它:新的缺席/事件到来,该学生的会话从db恢复,事实插入后,将执行规则并检索结果状态。

我在这种情况下看到的主要缺点是,创建关于多个学生的规则并不简单,您必须将您的事实提供给多个会话。 例如,如果您在一个班级中有超过10名具有重要地位的学生,则需要发出警报。 在这种情况下,每个类的会话就足够了。 所以,正如你所看到的,你必须决定什么对你更好。 但无论你选择的“单位”(学校,班级,学生),我仍然会向你推荐我之前提到的执行流程。

Drools已经使用JPA支持数据库持久性。 您可以在此处获得有关此功能的更多信息: http//docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/#d0e3961

基本思想是使用名为JPAKnowledgeService的辅助类,而不是使用kbase.newStatefulKnowledgeSession()创建JPAKnowledgeService 此类将返回StatefulKnowledgeSession的包装器,该包装器将在每次方法调用后保持其状态。 在这个类中,您将找到两个重要的方法: newStatefulKnowledgeSession() ,用于创建新的ksession和loadStatefulKnowledgeSession loadStatefulKnowledgeSession()以从数据库中检索现有会话。

希望能帮助到你,

有第四种选择可以使维护更简单。 为所有学生建立整个学区的单一状态知识会话。 处理完每个事件后,如果需要在JVM发生故障时重建工作内存,则会保留会话。 您将需要更大的RAM和堆空间分配,但在今天的RAM中便宜。 (我们使用32 GB RAM并分配16 GB XM和Xmx)最有可能的是,只要您拥有24x7服务器,您的JVM就永远不会停机。

懒惰我会采取第三种方法。 我将所有事件存储在数据库中,然后我将按照每天,每周,每月(根据需要)批量处理所有学生。 这将允许您创建一个会话,其中包含涵盖多个学生,班级等的规则。如果您没有超过3百万的学生,您将会很好,这将是一个高性能的应用程序。

感谢您的建议和意见。 我倾向于#2有两个原因:

  • 我认为收集所有事实让特定学生从头开始重新运行每一个事件,这将是一个我宁愿避免的重量级过程。
  • 用例我将模型作为一个非常长时间运行的监控过程,这使我相信(在阅读Fusion的用例之后)将事件插入到持久的KnowledgeSession中是可行的。
  • 我不认为问题空间的范围(即学生与教室,学校或整个地区)是一个问题。 如果我们需要课堂指标,那么我们将只为课程提供新的规则库,这些规则也会消耗相关事件(测试,缺勤等)

需要注意的是,如果规则发生变化,我们需要根据新的规则库重新评估所有受影响的学生,这意味着收集所有事实并从学年开始。 这应该不会发生太多,但如果它变得更频繁,那么我可能会转向第3种方法。

再次感谢您的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM