入力から毎回決定論的に導出できる判定には永続マーカーを持たせず、都度計算で除外する
設計判断
データモデリング
信頼性
判断
原則
大量の対象を繰り返し処理するパイプラインで「この対象は処理済み/対象外」を記録するとき、判定が対象自身の属性から毎回決定論的に導出できるなら(例: ファイル名のプレフィックス、先頭行のメタデータ)、永続マーカーや台帳に状態を持たず、実行のたびに計算して除外する方を選ぶ。マーカーは「前回の結果を覚える」ための装置であり、導出可能な判定に使うとコストだけ担って価値を生まない。
判断基準
- 判定に「読み直せない過去の処理結果」が要るならマーカーが必要(例: 重い分析を実施済みか)。判定が対象の不変属性だけで閉じるならマーカーは不要。
- 都度計算のコストを見積もる: 属性読み(ファイル名・先頭1行)は対象が数千でも秒オーダー。これが許容できる限り状態レスが勝る。
- 安全側の規定を必ず添える: 属性が欠落・未知の対象は除外せず通常フローに残す。形式変更でフィルタがマッチしなくなったときの故障モードが「処理に戻る(コスト増)」であって「消える(欠損)」にならないよう側に倒す。
なぜ(マーカー方式で実際に起きた障害)
同一パイプラインのマーカー台帳で、(1) 登録主体の世代差による ID 形式の混在で照合が崩れ未処理数を大幅に誤計、(2) 対象削除後の孤児マーカーが監査を汚染、(3) 対象数に比例する毎回の書き込みコスト、の全てが顕在化した。導出可能な判定をフィルタ方式に切り替えることで、3つとも構造的に消える(状態が無いものは壊れない)。
検証
フィルタ導入後、(1) 同じ入力集合に対して実行を繰り返しても除外集合が同一になること、(2) 属性欠落の検体が通常フローに残ること、(3) 台帳監査が除外対象を欠損と誤報しないことを確認する。