こんにちは!開発部のAHです。
みなさんはmysqlのspiderエンジンと言うものをご存じですか?
mysqlとはデータベースの一種ですデータベースについてはこちらをどうぞ
spiderエンジンについて詳しくはこちら
通常のInnoDBエンジンですと1つのサーバーにそのDBのデータが全て入っていますが、
spiderエンジンでは、spiderエンジン用のサーバーと複数のデータ用サーバーにデータを分散できるようになります。
(mysqld_multiを使えば1つのサーバー内で完結させることも可能です。)
通常は各データ用サーバーに分散したデータをspiderエンジン用のサーバーに作ったテーブルからあたかも一つのテーブルかのように扱うことがメインの使い方かと思いますが、今回はそれを応用し別サーバーのテーブルをspiderエンジン用のサーバーのテーブルかのように扱う方法を忘備録を兼ねて書いていきたいと思います。
192.168.0.1サーバーに
database:test
テーブル:dt_test
CREATE TABLE dt_test
(
id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
があるとします。
spiderエンジン用のサーバーにspiderエンジンをインストールし
CREATE SERVER data1 FOREIGN DATA WRAPPER mysql OPTIONS (HOST ‘192.168.0.1’, DATABASE ‘test’, USER ”, PASSWORD ”, PORT 3306);
で192.168.0.1への接続設定を作成します。
SERVER名は任意 ここではdata1
USERとPASSWORDはspiderエンジン用のサーバーから192.168.0.1のmysqlへの接続ユーザーとパスワードになります。
-skip-grant-tablesなどにしてあればUSERとPASSWORDは必要ありません。
そしてspiderエンジン用のサーバーにテーブルを作成します。
テーブル名はここではdt_test_spiderとします。
CREATE TABLE dt_test_spider
(
id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE = SPIDER DEFAULT CHARSET=utf8mb4
comment=’server “data1”, table “dt_test”‘;
comment内でCREATE SERVERで作ったdata1と192.168.0.1内のテーブル名:dt_testを指定しています。
これだけで、spiderエンジン用のサーバーに作ったテーブルdt_test_spiderから192.168.0.1内のテーブルdt_testの中身を参照することが出来るようになります。
spiderエンジン用のサーバーに別のテーブルを適当に作ってdt_test_spiderとjoinすると実体が別サーバーにあるとは思えないほど軽快にjoin出来たり、
spiderエンジン用のサーバーにdt_testテーブルを作り、dt_test_spiderからinsertしてやればいちいちmysqldumpでエクスポートしてdumpファイルをインポートする必要もなくテーブルのコピーも出来たりなどかなり便利かと思います。
spiderエンジンは水平分散に対応したストレージエンジンですが、同じ作者からVPエンジンという垂直分割に対応したストレージエンジンも提供されているので、興味がある方はそちらも調べてみてはいかがでしょうか?
文:開発部AH