Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  スケールアウトのためにレプリケーションを使用する

17.3.3 スケールアウトのためにレプリケーションを使用する

レプリケーションをスケールアウトソリューションとして、つまり、いくつかの合理的な制限内でデータベースクエリーの負荷を複数のデータベースサーバーに分割するために使用できます

レプリケーションが 1 つのマスターから 1 つ以上のスレーブに分散するように機能するため、スケールアウトにレプリケーションを使用することは、読み取りが非常に多く、書き込み/更新が少ない環境で最適に機能します。ほとんどの Web サイトはこのカテゴリ (ユーザーが Web サイトをブラウズしたり、記事や投稿を読んだり、製品を見たりする) に該当します。更新は、セッション管理中、購入するとき、またはフォーラムにコメント/メッセージを追加するときにのみ発生します。

この状況でレプリケーションを使用すると、読み取りをレプリケーションスレーブに分散しながら、Web サーバーは書き込みが必要なときにレプリケーションマスターとやり取りできます。このシナリオのためのサンプルレプリケーションレイアウトは、図17.1「スケールアウト中のパフォーマンスを向上するためにレプリケーションを使用する」で見ることができます。

図 17.1 スケールアウト中のパフォーマンスを向上するためにレプリケーションを使用する

スケールアウト中のパフォーマンスを向上するためにレプリケーションを使用する

データベースにアクセスするコードの一部が適切に抽象化/モジュール化されている場合は、それを複製されたセットアップで動作するように変換することはとても効率的かつ簡単であるはずです。データベースアクセスの実装を、すべての書き込みをマスターに送信し、読み取りをマスターまたはスレーブに送信するように変更してください。コードがこのレベルの抽象を備えていない場合、複製されたシステムのセットアップは整理するための機会および動機となります。まずは、次の関数を実装するラッパーライブラリまたはモジュールを作成してください。

  • safe_writer_connect()

  • safe_reader_connect()

  • safe_reader_statement()

  • safe_writer_statement()

各関数名の safe_ は、その関数がすべてのエラー条件の処理を引き受けることを意味します。関数に別の名前を使用できます。重要なことは、読み取りのための接続、書き込みのための接続、読み取りの実行、および書き込みの実行に対して、統一されたインタフェースを持つことです。

次に、ラッパーライブラリを使用するようにクライアントコードを変換してください。これは、最初は苦しくて怖い工程かもしれませんが、長い目でみるとやるだけの価値があります。説明した方法を使用するすべてのアプリケーションは、マスター/スレーブ構成を利用できます (複数のスレーブを使用するものであっても)。こうしたコードは非常に保守しやすく、トラブルシューティングオプションを追加するのも手間がかかりません。たとえば、1 つか 2 つの関数を変更するだけで、各ステートメントにどのくらいの時間がかかったかや、発行されたステートメントの中でどのステートメントがエラーになったかのログを記録できます。

たくさんのコードを書いた経験がある場合は、MySQL 標準配布に付属の replace ユーティリティーを使用することで変換タスクを自動化したり、独自の変換スクリプトを書いたりすることをお勧めします。理想的には、コードが一貫性のあるプログラミングスタイル規則を使用するべきです。そうでない場合は、一貫性のあるスタイルを使用するために、とにかく書き換えたり、少なくとも詳しく調べて手動で整理したりすることをお勧めします。


User Comments
Sign Up Login You must be logged in to post a comment.