質問

見てきました WF ルール エンジン そして NxBRE 面白そうですが、実際のシナリオでどの程度うまく機能するかはわかりません。

私が念頭に置いているのは、1,000 万から 1 億の事実と次のようなルールを含むファクトベースのようなものです。

オブジェクト.フィールド < 5000 かつ オブジェクト.フィールド > 1000 かつ IsProperty(Object.Field2)

C# と .NET を使用しています。

編集: 私は自分自身を明確にしていません(完全に私のせいです):) 私はRETEアルゴリズム自体を使用する独自のルール評価システムを持っています...これは非常に高速で、1,000 万件のファクト シナリオを約 10 秒で評価できます。市販のソリューションはどれくらい速いですか?

役に立ちましたか?

解決

簡単に言うと、ルールの数が一定のしきい値 (正確な値はわかりません) を超えると、ルール エンジンが命令型ソリューションよりも優れたパフォーマンスを発揮すると予想されます。

ルール エンジンのルール部分は、条件とアクションのセットです。単一のルールは、機能的には if - then ステートメントと (ほぼ) 同等です。ルール エンジンの真の力は、エンジンの宣言的な性質によって発揮されます。

従来の命令型プログラムでは、ロジックを評価する方法をコーディングする必要があります。ルール エンジンを使用する場合、評価されるステートメントの数が決まります。私は次のようなエンジンしか使用したことがありません ジェス または クリップ, を使用します。 反復アルゴリズム どのルールを起動するかを判断します。ルール実行アルゴリズムの効率によって、ルール エンジンの実行効率が従来の命令型ソリューションと比較してどれだけ向上するかが決まります。

Rete アルゴリズムは、速度を上げるためにメモリを犠牲にするように設計されています。LHS 側のパターンをルールにマッピングするノードのネットワークを維持します。Rete のパフォーマンスは理論的にはシステム内のルールの数に依存しないため、ルールとファクトが増えるほど、Rete ネットワークのパフォーマンスが命令型ソリューションよりも向上します。

あなたは多くの事実を計画しています。多数のルールを作成する予定がある場合、メモリの問題が発生する可能性があります。

Martin Fowler の記事をご覧ください。 ルールエンジン. 。これは優れた (非常に) 短い概要です。

がある 長い議論 Microsoft Business Rules Engine (MS-BRE) でのパフォーマンスと Jess & Drools の比較。提起されたいくつかの点は、なぜこれらの評価が難しいのかを明らかにしています。

他のヒント

「それは忠実な乳頭間の実装ではないという噂は、」ビジネスルールエンジンは、BizTalk Serverは正しくレーテアルゴリズムを実装するために失敗に含まれていることを主張に関する古代の問題を指します。請求は道によって、間違っていました。 BREは確かレテを実装ありません。 WFルールエンジンは、BREとは全く異なる技術です。カールが言うように、WFルールエンジンは、どちらか正しくまたは間違って、まったくレテを実装していません。それは緩く「シーケンシャル」エンジンと呼ぶことができるものの一例です。それは前向き連鎖の形を実装しています。しかし、本当の問題は少し複雑これ以上です。 「フォワード」ビットは、エンジンが行うことができる論理的な推論の種類を指します。用語は本当にあなたが実行時に関与するメカニズムについては何も語っていません。本当の問題は、エンジンが推論であるどのように良い程度です。しかし、唯一の非常に限られた方法で、はい、WFは、チェーンを転送することができ、そしてはい、それが理由することができます。レテエンジンは、より強力な推論能力を提供していますが、これは実際には本当に「生産」システムと呼ばれるルールエンジンの特定のクラスのためだけの最適化であるReteアルゴリズムを使用することとは何の関係もありません。これは、シーケンシャルWFルールエンジンのみが直接、単一の実際のラフ同等の上に推論することができ、一方、生産システム全体「事実ベース」を超える推論することができる方法で行うことです。人々は前方に自分自身をチェーン前方の論理的なプロセスとの連鎖(およびすべての後に、それは非常に微妙な違いである)可能特定のランタイムメカニズムを混同しているため、問題が時々発生します。 WFの関連機構は確かに限られた範囲に「フォワード」方法で理由に使用することができるが、その主な用途は、シーケンシャルルールは半宣言的様式で発現されることができるようにすることである - すなわち、ルールは、任意の順序で表すことができます。かかわらず、これらのルール間の依存関係の手続きの。それは確かに、前方推論や、前向き連鎖のloicalプロセスとは何の関係もありません。

問題は少し複雑で曖昧である、と私は(私たちは十分に頻繁にそれを説明しました)この上で私と一緒に同意しないMSのみんなのいくつかを知っているが、それはそれが私の感想です。

の非常に注意すべきことの一つは、WFエンジンは、それが実際にその結果として、その表現がやや限られており、それはかなりに解析する文字列をやっているので、パフォーマンスを考慮していない、独自のパーサを実装していることであるルールということです実行時にコード(実行可能なアクション)にルールを解釈します。

私たちは、使用して7分で1500のルールを通じて2400万テストを実行しましたのJBoss Droolsのは、2つのJVMはかなり上で実行してをくそ平均サーバ。それはあなたがすべての組み合わせを実行した場合より360億テストを実行することだし、ほとんどのテストでは、それらの中に、複数のロジックの選択肢を持っています。 (あなたの例では、例えば3つの選択肢があります。)

あなたはまた、データはルールが発動し始めたら同じように、自分のルールエンジンに渡される方法を検討しなければならない、といくつかのルールは、確かにそれは、パフォーマンスの問題を持って、DBへの呼び出しを行います。これはあまりにもいくつかの短所を持っているものの、ベストプラクティスは、スタート自体のルールの実行に必要なすべてのデータを提供することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top