すごいよ! FEDERATED !

| | コメント(0) |


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 でもイケる!

カテゴリ

 

コメントする