2014年1月23日木曜日

ルールエンジンのアルゴリズムはどっちが速い? ReteOO ? Phreak?

原文: Which rule engine algorithm is faster: ReteOO or Phreak? by Geoffrey De Smet (Drools & jBPM)

Drools 6.0 では、Phreak(フリィーク) という新しいアルゴリズムが採用されています。(デフォルトで有効) これは、ReteOO(レート)アルゴリズムの代わりに使われます。(ReteOO を使用することも可能) 使用方法は変わりません。今までと同じ DRL構文を実行します。しかし今までと違い、将来の最適化に向けたくさんの可能性という名のドアが開かれます。例えば、より効率的にマルチコアマシンを活用するなどです。(Mark の記事をご覧ください)

すべてにおいて良好な Phreakアルゴリズムですが、確信をつきましょう: Phreak アルゴリズムが今どれだけ速いのか? :)

重要事項: Phreak の実装はまだ初期段階であり、ポテンシャルの片鱗を垣間見ているにすぎません。初期の実装は正確性と将来マルチコア対応することを念頭に置き設計されました。例えば、将来マルチスレッド機能が追加される時に備え、同期処理が追加されていま。そう、プロファイリングが行われていませんでした。私たちは正確に設計し最初の実装が終了した際、どのパフォーマンステストにおいても ReteOO よりも悪い結果にならないことを望みました。どうやらこの望みは達成できたようです。そして今は、マルチスレッドサポートした際のプロファイリングが楽しみです。その他、大量であったり下手に書かれたルールは、lazy(レイジー) アルゴリズム の恩恵を受けるはずです。

方法論

39 のデータセットを利用し、OptaPlanner を利用した 4つのユースケースでベンチマークを計測しました。すべてのテストでは stateful Drools session を使い、それぞれ 5分以上実行しました。どちらも Drools 6.0 を使い、まったく同じコードと設定が使用されます。Phreak と ReteOO の間で唯一違う箇所は、ルールエンジンのオプションフラグです。(kieBaseConfiguration.setOption(RuleEngineOption.PHREAK/RETEOO)

ぜひ、あなたもこれらベンチマークテストをあなた自身で計測してみてください。(例えばこのテスト)  今回テストされていないユースケースも、ぜひお試しください。

実行結果

それぞれのユースケースの平均(ユースケースに対するすべてのデータセット):

  • コースのスケジュール: Phreak は、ReteOO よりも 20%高速 です
  • 試験のスケジュール: Phreak は、ReteOO よりも 21%高速 です
  • 病院のベッド配置計画: Phreak は、ReteOO よりも 4%低速 です(*)
  • 看護師の勤務表: Phreak は、ReteOO よりも 20%高速 です
(*) Phreak はよりスケールします。よって、大きなデータセットを利用した場合、ReteOO よりも Phreak は速いです。


結果の詳細

コーススケジュール

詳報

試験のスケジュール

詳報


病院のベッド配置計画

詳報

看護師の勤務表

詳報

結論

すでに Phreak は ReteOO と比較し高速でスケーラブルです。Phreak は今後さらに改善されます。(そして、私たちは「病院のベッド配置計画」のユースケースに対し、より深く調べる必要があります。)

原文: Which rule engine algorithm is faster: ReteOO or Phreak? by Geoffrey De Smet (Drools & jBPM)














0 件のコメント:

コメントを投稿