0

mysql と php を使用して Web アプリケーションを開発しています。このアプリケーションでは、ユーザー インターフェイスからのトリガーに基づいて、ローカルの mysql データベースをリモートの mysql データベース (別のホストで実行されている) と同期する必要があります。

ユーザー トリガーは Web ページの形式であり、ユーザーがボタンをクリックすると、この同期をバックグラウンドで実行する必要がある php サーバー スクリプトが起動されます。

リモートおよびローカル データベースとのデータベース接続を開き、一度に 1 行ずつ行を挿入するという簡単な方法でそれを行うことを計画しました。しかし、リモート DB テーブルのサイズは非常に大きくなる可能性があるため (数百万エントリにもなる)、より効率的なソリューションが必要です。

リモートDBにあまり負担をかけずに効率的な方法でこのデータベース同期を実行できるSQLクエリ/ PHPコードを誰かが手伝ってくれませんか。

前もって感謝します

シャム

UPDATE リモートDBは私の管理下にないため、マスターとして構成したり、その他の設定を行ったりすることはできません。それが私が持っている1つの大きな制限です。そのため、phpを使用してプログラムで実行したいと考えています。私が持っている別のオプションは、リモート DB から 1000 行のブロックを読み取り、ローカル DB に挿入することです。しかし、もっと良い方法があるかどうか知りたいですか?

4

2 に答える 2

2

データ層にこの機能が組み込まれている場合、アプリケーション層からの MySQL レプリケーションについて心配する必要はありません。「MySQL を使用したマスター/スレーブ レプリケーション」を参照してください。https://www.digitalocean.com/community/articles/how-to-set-up-master-slave-replication-in-mysqlが出発点です。

于 2013-05-22T13:22:45.063 に答える
0

マスターに関する限り、レプリケーションのコストは最小限です。基本的には次のように機能します。

  1. マスターは、すべての (関連する) アクティビティをフラットなログ ファイルに記録します。
  2. スレーブはこのログを時々ダウンロードし、バイナリ ログをローカルで再生します。

したがって、マスターへの影響は、線形データをログ ファイルに書き込むことと、わずかな帯域幅だけです。それでもマスターへの影響が心配な場合は、マスターとスレーブの間のリンクを (システム レベルで) 調整するか、アクティビティの少ない時間帯に (STOP/START SLAVE適切なタイミングでコマンドを発行して) リンクを開くことができます。

組み込みのレプリケーションは、MySQL エンジン内の低レベルで行われることにも言及する必要があります。外部プロセスでより良いパフォーマンスを達成できるとは思いません。この「同期」ボタンを押したときにローカルデータベースを完全に同期させたい場合は、もう探す必要はありません。

部分的な同期を受け入れることができる場合は、このボタンで短い時間枠 (たとえばSTART SLAVE、10 秒間、STOP SLAVE再び自動的に。ユーザーはさらにデータを取得するにはもう一度クリックする必要があります) でレプリケーションを再開することができます。

于 2013-05-22T13:29:15.740 に答える