データベースが少し乱雑な状況になっています。
私たちのメインのバックオフィス システムは、ローカル データを使用して Visual Fox Pro で作成されています (はい、知っています!)。
ウェブサイトのデータを効果的に扱うために、定期的にデータを SQL データベースにエクスポートすることを選択しました。ただし、これを行うプロセスでは、基本的に毎回テーブルがクリアされ、再挿入が行われます。
これは、2 つの SQL データベースがあることを意味します。1 つは FoxPro エクスポート プロセスが書き込むデータベースで、もう 1 つは Web サイトが読み取るデータベースです。
この質問は、ある SQL データベースから別の SQL データベースへの変換に関するものです (SqlFoxProData -> SqlWebData)。
特定のテーブル (メイン アプリケーション テーブルの 1 つ) については、このプロセス中にさまざまなデータ変換が行われるため、自己結合を使用した簡単な UPDATE、INSERT、および DELETE ステートメントではなく、代わりにカーソルを使用する必要があります ( !)
これは何ヶ月もうまく機能していますが、現在、更新が行われているときにパフォーマンスの問題が発生し始めています (これは日中に定期的に発生する可能性があります)。
基本的に、SqlFoxProData.ImportantTable から SqlWebData.ImportantTable を更新しているときに、ライブ Web サイトで接続タイムアウト/デッドロック/その他の問題が発生することがあります。
クエリの最適化、キャッシュなどに懸命に取り組んできましたが、データを更新するための別の戦略を探しているところまで来ました。
頭に浮かんだ 1 つのアイデアは、ImportantTable の 2 つのコピー (A と B) を用意し、どのテーブルが現在「アクティブ」であるかという概念を持ち、非アクティブなテーブルを更新してから、現在のアクティビティ テーブルを切り替えることです。
つまり、ImportantTableB を更新している間に、ImportantTableA から Web サイトを読み取り、その後、ImportantTableB から読み取るように Web サイトを切り替えます。
質問は、これは実現可能であり、良い考えですか? 私は以前にそのようなことをしたことがありますが、最適化/インデックス作成などに必ずしも良いとは確信していません.
任意の提案を歓迎します。これが厄介な状況であることはわかっています...長期的な目標は、FoxPro アプリケーションが SQL を指すようにすることです。
(役立つ場合は、SQL 2005 を使用しています)
データは常に少し古くなっているため、インスタンスではデータの一貫性は特に重要ではないことを付け加えておきます。