私はある学区で働いており、Drools を使用して、学区を構成する学校の生徒数に対して次のタイプのルールを実装することを計画しています。
- 学生が 1 年間に 3 回欠席した場合、出席指標は WARN ステータスに移行します。
- 学生が 1 年間に 6 回欠席した場合、出席指標はクリティカル ステータスに移行します。
- 学生が 1 年間に 3 つの重大な行動インシデントを起こした場合、その学生の行動指標は WARN ステータスに移行します。
- 学生が 1 年に 2 回のマイナーな行動インシデントと 2 つの重大な行動インシデントを起こした場合、その行動指標はクリティカル ステータスに移行します。
- …これらは頭の中で思いついた例にすぎませんが、似たような性質のルールは他にもたくさんあります。
これらのルールはすべて、Drools エキスパートを使用して簡単に表現できます。また、生徒のルールの処理は同期である必要はありません。これを実装する最良の方法についていくつか質問があります。
ある観点からは、これは一連のイベントの監視システムと見なすことができます。これにより、新しい各イベントが挿入されるステートフル セッションを作成することを考えました。ただし、イベントは 9 か月にわたって発生し、比較的まれです。また、学校ごと、または生徒ごとにセッションを構築することもできます。
- その長い間セッションをメモリに保持することは問題でしょうか?
- サーバーに障害が発生した場合、セッション状態を最初から再構築する必要がありますか、それとも定期的にスナップショットを作成し、スナップショットの時点以降に発生した事実を復元することをお勧めします.
もう 1 つのオプションは、その学生のイベントが処理された後、各学生のセッションを永続化することです。次のイベントが発生すると、ストレージからセッションを取得し、新しいファクトを挿入します。こうすれば、学生のステータスを取得するために、エンジンを実行するたびにすべてのファクトを取得する必要がなくなります。このような構成はサポートされますか? これを行うことに短所はありますか?
3 番目のアプローチは、ルールを実行する必要がある他のすべての事実を取得し、新しい KnowledgeSession を作成してルールを実行することにより、学生の新しい事実に対応することです。
何が最善のアプローチであるかについてのアドバイスは大歓迎です。
デイブ