隣接リスト方式を使用してレコードを関連付けるテーブル (テーブルA ) と、クロージャ テーブルを使用して同じレコードを関連付ける別のテーブル(テーブルB ) があります。どちらも同じグラフをキャプチャするため、両方を同期させる必要があります。
問題は、閉鎖テーブルを更新する最良の方法は何ですか?
私が見ているように、3つの選択肢があります:
- トリガー。A のINSERT/UPDATE/DELETE で、新しいクロージャを計算する sproc を実行します。 短所: Aへの変更は、長い同期 (ロック?) 操作になります。デッドロック (?) の可能性があります。
- アプリケーション コード。A の変更を Add/Update/Delete メソッド (リポジトリ パターンなど) に絞り込み、新しいクロージャを計算する sproc の呼び出しでそれらをオーバーロードします。 短所: DB への余分な往復。別のスレッドが同時に逆の方法でAまたはBを変更すると、整合性の問題が発生する可能性があります。たとえば、別のアプリケーションがBではなくAを変更することを決定した場合、整合性の問題が発生する可能性があります。
- バックグラウンド アップデーター。Aへの更新を継続的に検索し、対応する更新をクロージャー テーブルに行う 2 次プロセスを作成します。 短所:複雑 (追加サービスの作成と管理)。同期なしのウィンドウ。
「最良の」オプションがない場合でも、トレードオフについての考えは非常に高く評価されます!