私たちには、オンサイトにあるSQL Server DBと会話するデータセンター内にあるMySQLデータベース(ほとんどが読取り専用なMyISAMテーブル)があります。 WANにはかなりのレイテンシがあります(100ms以上)。約6ヶ月でSQL Server DBMSがデータセンター(例えば、同じギガビットLAN)に移動します。SQL ServerからMySQLテーブルを効率的に更新
MySQL DBには、SQL Serverデータベースの結果から更新する必要がある数千の行があります。 MySQL DBはLinux上で動作するレールアプリに付属しているので、できるだけデータを移行するロジックを維持したいと思いますシェルスクリプトまたはrake/rubyタスク(私たちはWindowsアプリケーション開発者ではありませんので、Win32アプリなどは、となりました。!)。
これはかなり簡単なプロセスです。擬似コード内:
頻繁に(5分ごとに)更新する必要がある数千の行があるとしましょう。また、私はSQL Serverのどの行が変更されたのかわからないと仮定します(残念ながら!)ので、変更した行に制限することはできません - SQL Server DB 編集:私たちはDBMSを制御しているので、テーブルのトリガや新しいストアドプロシージャなどの軽度の変更を行うことができます。テーブルスキーマは変更されません最後に更新された列を追加してください。最後の手段としてこのオプションを保存したいと考えています)。
ランタイムを最小限に抑えるこのアップデートプロセスを最善の方法で実行するにはどうすればよいですか?このプロセスは数分おきに実行する必要があり(早くても良い)、SQL ServerとMySQLのデュアル接続をRubyから発行するのは遅すぎます。 MyISAMエンジンで発行された書き込みテーブルロックの一部でもかまいませんが、Innodbへの変換はそれほど高速化されていないようです(システムはテスト中で、同じ種類の負荷をシミュレートするのは簡単ではありません。それはロックに関連していないと信じて)。
私は現在、LinuxサーバにFTP接続しているVIEW(上記のSQL Serverの文に対応する)をBCPに向けているし、Rubyを使ってファイルをforeachしていますシリアライズされたSQLステートメント)、私はそこに良い方法があると想像しなければなりません。
これはかなりラドです。ソースが消えた場合に備えてsol'nをコピーして貼り付けますか?私は礼儀を覚えていない –
私はソースがすぐに消えるとは思わない。たぶんその別の良い良い質問:SQL Serverのリンクされたクエリの指示 –