スコアカードやスペース共有用の指標作成、CTA生成、ヘルススコア更新など、
活用が進むほどルールエンジンの本数は増えていきます。
しかし、次のような状態になっていないでしょうか?
-
ルール完了まで数時間かかる
-
バッチ時間が逼迫している
-
新しいルールを追加するのが不安
-
夜間処理が溢れ始めている
本記事では、Admin視点でのルールエンジン設計の最適化ポイントを整理します。
フィルタ設計を見直す
まず最初に見直すべきは「抽出条件」です。
一般的に、以下のような条件は処理が重くなりやすい傾向があります。
-
IN (Include)の多用 -
Containsなどの部分一致 -
不要に広い抽出条件
可能であれば:
-
Equalsを使用する -
Starts Withに置き換える -
早い段階で対象を絞り込む
という設計に変更します。
ポイントは「後で絞る」のではなく「最初に絞る」ことです。
同じJoinを繰り返さない(Data Designer活用)
複数のルールで同じデータセットを毎回Joinしている場合、これは処理時間増大の大きな要因です。
解決策:
-
Data Designerで基礎データを一度作成
-
そのデータセットを複数ルールで参照
-
計算ロジックを部品化する
これにより:
-
重複計算を削減
-
保守性向上
-
パフォーマンス安定化
が期待できます。
Adminとしては「ルール単位」ではなくデータ基盤単位で設計する意識が重要です。
処理ステップを減らす
意外と見落とされがちですが、データ量よりも「処理ステップ数」の方がパフォーマンスに影響するケースが多い。
例えば:
-
不要なTransform
-
中間オブジェクトの多用
-
1ルール内で完結させようとする過剰設計
可能であれば:
-
ステップを統合する
-
不要な計算を削除する
-
ルールをシンプルに保つ
という改善を行いましょう。
Joinを減らし、Actionを分割する
典型的な重い設計パターン:
複数データソースを引っ張る → 大量Join → 最後に1つのActionへまとめる
この構造は非常に負荷が高くなります。
もし業務上許容できるのであれば:
-
Actionを分割する
-
ルールを用途別に分ける
-
Join回数を最小限にする
という設計の方が速くなる場合があります。
重要なのは:ルール数を減らすことではなく、1ルールあたりの処理負荷を減らすことです。
もし現在、バッチ時間が限界に近い、追加開発が怖い、ルール完了待ちが発生している
といった状況であれば、一度ルール設計の棚卸しを行うことをおすすめします!