MySQL 8.0 リファレンスマニュアル


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

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

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

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

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

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

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

図 16.2 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 つずつ行をフェッチします。


関連キーワード:  テーブル, ストレージ, エンジン, FEDERATED, サーバー, リモート, ステートメント, 作成, 定義, ローカル