15.8.1 FEDERATED ストレージエンジンの概要

標準のストレージエンジン (MyISAMCSVInnoDB など) のいずれかを使用してテーブルを作成すると、そのテーブルはテーブルの定義と関連データで構成されます。FEDERATED テーブルを作成すると、テーブル定義は同じですが、データの物理ストレージはリモートサーバーで処理されます。

FEDERATED テーブルは 2 つの要素で構成されます。

  • データベーステーブルを持つ リモートサーバー。テーブル定義 (.frm ファイルに格納されます) と関連テーブルで構成されます。リモートテーブルのテーブルタイプは、MyISAMInnoDB を含む、リモート mysqld サーバーがサポートするいずれのタイプであってもかまいません。

  • データベーステーブルを持つ ローカルサーバー。テーブルの定義は、リモートサーバー上の対応するテーブルの定義に一致します。テーブル定義は .frm ファイルに格納されます。ただし、ローカルサーバーにデータファイルはありません。その代わり、テーブル定義にはリモートテーブルをポイントする接続文字列が含まれています。

ローカルサーバーで FEDERATED テーブルにクエリーやステートメントを実行すると、一般的にローカルデータファイルの情報を挿入、更新、または削除する操作は、実行するために代わりにリモートサーバーに送られ、そこでリモートサーバーのデータファイルを更新したり、リモートサーバーから一致する行を戻したりします。

FEDERATED テーブルのセットアップの基本的な構造は 図15.1「FEDERATED テーブルの構造」で示します。

図 15.1 FEDERATED テーブルの構造

FEDERATED テーブルの構造

FEDERATED テーブルを参照する SQL ステートメントをクライアントが発行する場合、ローカルサーバー (SQL ステートメントが実行される場所) とリモートサーバー (データが物理的に格納される場所) の間の情報の流れは次のとおりです。

  1. ストレージエンジンは FEDERATED テーブルが持つ各カラムを調べて、リモートテーブルを参照する適当な SQL ステートメントを構築します。

  2. ステートメントは MySQL クライアント API を使用してリモートサーバーに送られます。

  3. リモートサーバーはステートメントを処理し、ローカルサーバーはステートメントが作成した結果 (影響を受けた行の数や結果セット) を取得します。

  4. ステートメントが結果セットを作成する場合、各カラムは FEDERATED エンジンが求める内部ストレージエンジン形式に変換され、元のステートメントを発行したクライアントに結果を表示するために使用できます。

ローカルサーバーは、MySQL クライアントの C API 関数を使用してリモートサーバーと通信します。mysql_real_query() を呼び出して、ステートメントを送信します。結果セットを読み取るために、mysql_store_result() を使用し、mysql_fetch_row() を使用して 1 つずつ行をフェッチします。


User Comments
  Posted by ALEXANDER SKAKUNOV on March 22, 2013
Explanation of FEDERATED engine in Russian is here — http://iwannabedeveloper.com/2010/03/federated-mysql-engine/

In short, it's really cool to have the shared tables between projects, for example, Geo data: cities with coordinates, IP-to-city mapping, etc.
Sign Up Login You must be logged in to post a comment.