我工作的一個學區,我們計劃使用Drools的實現以下類型的地區組成學校的學生人數規則:應堅持Drools的知識會話
- 如果學生有3個在一年的缺勤期間,他們的出勤率指標進入WARN狀態。
- 如果學生在一年內有6次缺課,則他們的出勤指標將進入CRITICAL狀態。
- 如果學生在一年內有3個主要行爲事件,他們的行爲度量將轉爲WARN狀態。
- 如果學生在一年內有2次輕微和2次重大行爲事件,他們的行爲指標將轉爲CRITICAL狀態。
- ......這些只是我頭頂的例子,但還有更多類似性質的規則。
所有這些規則都可以用Drools專家簡單地表達。另外,學生的規則處理不需要是同步的。我有幾個關於實現這個最好方法的問題。
從一個角度來看,這可以被視爲一個事件流的監控系統。這讓我想到創建一個有狀態的會話,每個新事件都將插入到該會話中。然而,這些事件在9個月內發生,並且相對罕見。另外,我們可以爲每個學校建立一個會話,或者爲每個學生創建一個會話
- 會在內存中保持一個會話很長時間會成爲問題嗎?
- 如果服務器發生故障,我們是否需要從頭開始重建會話狀態,或者建議您定期拍攝快照並恢復自快照時間以來發生的事實。
另一種選擇是在爲該學生處理事件後爲每個學生保留一個會話。當下一個事件進入時,我們將從存儲中檢索他們的會話並插入新的事實。這樣我們就不需要檢索引擎每次運行的所有事實來獲得學生的狀態。會支持這樣的配置嗎?有沒有這樣做的缺點?
第三種方法是通過檢索規則需要運行的所有其他事實來響應學生的新事實,創建新的KnowledgeSession並運行規則。
任何意見什麼可能是最好的方法將不勝感激。
戴夫