5

隣接リスト方式を使用してレコードを関連付けるテーブル (テーブルA ) と、クロージャ テーブルを使用して同じレコードを関連付ける別のテーブル(テーブルB ) があります。どちらも同じグラフをキャプチャするため、両方を同期させる必要があります。

問題は、閉鎖テーブルを更新する最良の方法は何ですか?

私が見ているように、3つの選択肢があります:

  1. トリガー。A のINSERT/UPDATE/DELETE で、新しいクロージャを計算する sproc を実行します。 短所: Aへの変更は、長い同期 (ロック?) 操作になります。デッドロック (?) の可能性があります。
  2. アプリケーション コード。A の変更を Add/Update/Delete メソッド (リポジトリ パターンなど) に絞り込み、新しいクロージャを計算する sproc の呼び出しでそれらをオーバーロードします。 短所: DB への余分な往復。別のスレッドが同時に逆の方法でAまたはBを変更すると、整合性の問題が発生する可能性があります。たとえば、別のアプリケーションがBではなくAを変更することを決定した場合、整合性の問題が発生する可能性があります。
  3. バックグラウンド アップデーター。Aへの更新を継続的に検索し、対応する更新をクロージャー テーブルに行う 2 次プロセスを作成します。 短所:複雑 (追加サービスの作成と管理)。同期なしのウィンドウ。

「最良の」オプションがない場合でも、トレードオフについての考えは非常に高く評価されます!

4

1 に答える 1

4

あなたの階層が、私が扱ってきたものと同じくらいほとんど静的なものであれば、おそらくトリガーを使用するでしょう。更新頻度と読み取り負荷に大きく依存します。

于 2011-04-08T23:25:17.023 に答える