スーパーマーケットの顧客ロイヤルティ ポイントを管理するために使用するアプリケーションがあります。約 10 年間運用されている社内コール センター アプリケーションをサポートするデータベースがありますが、最近では、顧客がログインして更新できる公開 Web サイトをサポートするために、データベースに直接 Web サービス レイヤーを公開しました。詳細は直接。Web サイトはサード パーティによって管理されているため、変更が少し複雑になります。
ここでの問題は、夜間のバッチ ジョブがいくつかあり、実行に何時間もかかり、データベースが長時間ロックされることです。私は、Web サービスがこれらのバッチ ジョブの影響を受けないようにすることを任されています。主な仕事は、店舗から顧客トランザクションをインポートし、ロイヤルティ ポイントを計算することです。
当方の環境はSQL Server 2008/.Net 4です
可能な解決策と長所/短所に関する提案を探しています
これまでの私の考え:
データベースのコピーを作成し、SQL レプリケーションを使用してデータベースの同期を維持します。Web サービスは、データベースのコピーに対して機能します。
長所
- ソースデータベースで起こっていることの間に競合がない
短所
- Web サービス経由で発生した変更を同期する必要があります。
- スキーマの変更により、レプリケーションが中断されます
- マスター データベースで発生する更新はすべてプッシュ アウトする必要があるため、データベースが引き続きロックされる可能性があります。
Web サービスが (Nolock) でデータを読み取ることを許可します。Web サービスからの更新は、SQL Broker を介して非同期的にスケジュールできます。
長所
- 複雑な設定が少なく、
短所
- SQL Broker のセットアップ経験がなく、堅牢性が不明です。
- 予期しないイベントによってデータベースがロックされ、Web サイトがダウンする可能性があります
長時間実行されるプロセスを調整して、データベースをロックしていないことを確認します
長所
- 最もリスクの低い選択肢になります。関連するテーブルの 1 つには数億行のデータと複合主キーがあるため、PK として ID を入れるとロックのエスカレーションなどを減らすことができると思います。
短所 - これらの特定のジョブの実行中は、常に一定レベルのロックが発生する可能性があります。
Web サービスを分割して、バッチ ジョブの影響を受ける可能性があるものを分離します。これらを別の方法で扱います。
- 進むべき道のように思えますが、影響を受けるこれらの Web サービスを読み取りと書き込みのために処理する最善の方法を特定する必要があるだけです。