すごいよ! FEDERATED !
FEDERATEDとはリモートにあるテーブルを、ローカルにあるかのように操作するための
ストレージエンジンらしい。
使うにはコンパイルオプションに以下が入っている必要あり。
--with-federated-storage-engine
とりあえず、ためしてみよう。
(1)リモート(192.168.0.10)にテーブルを作る。
CREATE DATABASE federated_test;
GRANT ALL ON *.* TO root@192.168.0.20;
FLASH PRIVILEGES;
USE federated_test;
CREATE TABLE users (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
PRIMARY KEY (id),
INDEX name (name)
)
ENGINE=MyISAM;
(2)ローカル(192.168.0.20)にテーブルを作る。
CREATE DATABASE federated_test;
USE federated_test;
CREATE TABLE federated_users (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
PRIMARY KEY (id),
INDEX name (name)
)
ENGINE=FEDERATED
CONNECTION='mysql://root@192.168.0.10:3306/federated_test/users';
CREATE TABLE user_attr (
id INT(20) NOT NULL,
age INT(20) NOT NULL,
PRIMARY KEY (id)
)
ENGINE=MyISAM;
(3)なんか適当にデータいれてみる。
mysql> INSERT INTO federated_users VALUES(null, 'hoge');
mysql> INSERT INTO user_attr VALUES(1, 30);
(4)データが入っているか確認(ローカル)
mysql> SELECT * FROM federated_users;
+----+------+
| id | name |
+----+------+
| 1 | hoge |
+----+------+
(5)データが入っているか確認(リモート)
mysql> SELECT * FROM users; +----+------+ | id | name | +----+------+ | 1 | hoge | +----+------+
おーー、ちゃんとはいっている。
(6) ローカルのテーブルとJOINできるか確認 (ローカルにて)
mysql> SELECT u.*, a.age FROM federated_users u ,user_attr a WHERE u.id = a.id;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | hoge | 30 |
+----+------+-----+
1 row in set (0.01 sec)
すげー。
しかも CREATE TEMPORARY TABLE でもイケる!
コメントする