Mysql dbのレプリケーションをセットアップして、各ブランチオフィスにローカルスレーブを配置できるようにする一方で、メインオフィスにマスターを配置して、ブランチオフィスでのアプリケーションのパフォーマンスを(大幅に)向上させることを検討しています。
Db自体はそれほど大きくありません(1 GB未満)が、疑問に思っています。 200-300レコードの更新/分トップを考慮:レプリケーションはどのくらい高速ですか? (最初に、5MBの汎用DSL接続、必要に応じてより高速であると仮定します-コストをできるだけ低く抑えようとしますが、お金はそれ以上のものです)
テーブル全体がバッチで複製されますか?テーブルの各レコードが更新されると、オンデマンドでレプリケーションが行われますか(ドキュメントから、それが構成可能であると思います)?
ノート:
MySQLレプリケーションは、ディスクおよびネットワークI/Oによって制限されている限り、可能な限りリアルタイムに近い状態で行われます。スレーブは、開いたままのマスターへのソケットを開きます。トランザクションがマスターで発生すると、それはバイナリログに記録され、スレーブで単に再生されます。マスターとスレーブ間のソケットが中断された場合、次の接続が成功したときにスレーブのバイナリログが再生されます。
マルチマスターレプリケーションは同じことを行いますが、双方向です。
いくつかの基本的な計算は、帯域幅のニーズをより適切に判断するのに役立ちます。
Average transaction size * number of slaves * updates/minute = bandwidth needed
お役に立てれば。
スレーブ側のレプリケーションは、2つの独立したスレッドによって処理されます。
レプリケーションレイテンシはIOによって制限されます。最初にIOリレーログからのトランザクションを適用するためにIO $ ===(複雑なSQLクエリが含まれる場合があります)、次にIOマスターでbinlogを読み取り、各スレーブに送信します。
MySQLレプリケーションは読み取りクエリ容量を増やしますが、しないクエリ書き込みパフォーマンスを向上させます。これは、IOをマスターとスレーブの両方のバイナリログにフラッシュできる速度でゲートされます
MySQLでのレプリケーションは、データをスレーブに取得するのが非常に高速です(マスターでUPDATE
を実行できるよりも高速で、別のウィンドウに切り替えてSELECT
を実行できますslave、if(かつその場合に限り)ネットワーク接続がすべて起動し、すべてが正常に実行されています。DSLクラスの接続は、通常の小さなクエリの一般的なケースでは問題ありませんが、大きな挿入/更新クエリです。コピーに少し時間がかかることがあり、レプリケーションが詰まった場合(そしてMySQLは不幸にもそれらに悪用されがちです)、しばらく時間がかかります(マスターからデータベース全体を再度コピーします)。制限するトリックがあります。 MySQLをLVMに配置するなど、マスターへの再同期の影響。非常に迅速なロック/スナップショットを実行し、スナップショットの内容をスレーブにrsyncできますが、最終的には再同期が失敗します。