数万台のシステムがあります。各ユニットには5〜10メートルがあり、各メーターにはそれに関連付けられた値があります。これらのメーターの値は変化します。これらの変化にリアルタイムで対応できるようにするには、ルールエンジンが必要です。
「ユニット#1の最初のメーターが10より大きく、ユニット#1の2番目のメーターが30より小さい場合は...」という種類のルールがありますが、ルールはこれよりはるかに長くなる可能性があります。各ユニットのルールは完全に独立しているため、2つの異なるユニットからの2つの異なるメーターの値を条件とするルールはありません。
すべてのユニットで同じルールが約30個あり、各ユニットには約5〜15個のカスタムルールがあります。これらのルールは、ルールエンジンの実行中に動的に追加する必要があります。ユニットは、サインアップ時に5〜10のルールを追加し、その時点から週に1回のようなルールを追加または削除する可能性があります。
これにはDroolsを使用することにしました。私は、それを実装するための最良の方法を見つけようとしています。私はDroolsに本当に慣れていないので、ちょっと混乱しています。各ユニットが独自の知識ベースを持つことは理にかなっていますか?もしそうなら、各ユニットで同じルールを共有する方法はありますか?
これらすべてのルールを保存するのに十分なメモリがないのではないかと心配しているので、ユニットごとにナレッジベースがあれば、すべてのナレッジベースをシリアル化してデータベースに入れ、取得するときに取得できると考えていました。それらが必要です。それは合理的でしょうか?
ユニットごとに個別のナレッジベースを使用することを考えたもう1つの理由は、各ユニットのルールが他のすべてのユニットのルールから完全に独立しているため、すべてを同じナレッジベースに配置するとパフォーマンスが低下する可能性があるためです。これは正しいですか、それともReteアルゴリズムはそれを理解するのに十分賢いですか?
また、エンジンの実行中に動的にルールを追加することは可能ですか?すべてのルールを再コンパイルする必要がありますか?エンジンがメーターの変化にリアルタイムで応答する必要がある場合、どのくらいの時間がかかりますか?これは実現可能ですか?
みんなありがとう。