■ノード構成
n1・・・SPIDERノード
n2・・・SPIDERノード
n3・・・SPIDERノード
n4・・・SPIDERノード
n5・・・データノード
n6・・・データノード
n7・・・データノード
n8・・・データノード
■VPストレージエンジンの特徴
・同一ノード内のテーブルにリンクを張って垂直パーティショニングを実現できる
・同一ノード内にしか張れないとはいえ、子テーブルにはSPIDERテーブルを指定できる。
よって、実質的にはデータノード内の任意のテーブルにリンクを張って垂直パーティショニングができる。
・子テーブルにNDBを指定すれば、NDBの得意なカラムのみをNDBに担当させることができる。
■同一ノード内で分割する基本的なやりかた(非推奨)
SPIDERノードはInnoDBを無効化しているのでデータノードn5で実験する。
n5 mysql> CREATE TABLE employees_vp1 ( emp_no int(11) NOT NULL, birth_date date NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_no) ) ENGINE InnoDB DEFAULT CHARSET utf8; n5 mysql> CREATE TABLE employees_vp2 ( emp_no int(11) NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender enum('M','F') NOT NULL, PRIMARY KEY (emp_no) ) ENGINE InnoDB DEFAULT CHARSET utf8; n5 mysql> CREATE TABLE employees ( emp_no int(11) NOT NULL, birth_date date NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender enum('M','F') NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_no) ) ENGINE VP DEFAULT CHARSET utf8 COMMENT 'table_name_list "employees_vp1 employees_vp2"';
■子テーブルをデータノード、親テーブルをSPIDERノードに作成するやりかた(推奨)
まずはデータノードに実データ格納用テーブルを作成。 n5 mysql> CREATE TABLE employees_vp1 ( emp_no int(11) NOT NULL, birth_date date NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_no) ) ENGINE InnoDB DEFAULT CHARSET utf8; n6 mysql> CREATE TABLE employees_vp2 ( emp_no int(11) NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender enum('M','F') NOT NULL, PRIMARY KEY (emp_no) ) ENGINE InnoDB DEFAULT CHARSET utf8; 次にSPIDERノードから実データテーブルへリンクするSPIDERテーブルを作成。 n1 mysql> CREATE TABLE employees_vp1 ( emp_no int(11) NOT NULL, birth_date date NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_no) ) ENGINE SPIDER DEFAULT CHARSET utf8 COMMENT 'server "n5", table "employees_vp1"'; n1 mysql> CREATE TABLE employees_vp2 ( emp_no int(11) NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender enum('M','F') NOT NULL, PRIMARY KEY (emp_no) ) ENGINE SPIDER DEFAULT CHARSET utf8 COMMENT 'server "n6", table "employees_vp2"'; 最後にSPIDERノードで、同一ノード内のSPIDERテーブルに対して、VPテーブルを作成する。 n1 mysql> CREATE TABLE employees ( emp_no int(11) NOT NULL, birth_date date NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender enum('M','F') NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_no) ) ENGINE VP DEFAULT CHARSET utf8 COMMENT 'table_name_list "employees_vp1 employees_vp2"';
※以後の操作は、この推奨版の構成でemployeesテーブルを作成したものとして進める。
■データ挿入
事前にMySQL公式のサンプルDB employeesをlocalhost:3306のMySQLに突っ込んどく。
n1 mysql> CREATE TABLE employees_datasource ( emp_no int(11) NOT NULL, birth_date date NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender enum('M','F') NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_no) ) ENGINE SPIDER DEFAULT CHARSET utf8 CONNECTION 'host "127.0.0.1", port "3306", user "user", password "password", database "employees", table "employees"'; n1 mysql> insert into employees select * from employees_datasource;
■動作確認
node1 [localhost] {msandbox} (spider_test) > select * from employees; 省略 | 499995 | 1958-09-24 | Dekang | Lichtner | F | 1993-01-12 | | 499996 | 1953-03-07 | Zito | Baaz | M | 1990-09-27 | | 499997 | 1961-08-03 | Berhard | Lenart | M | 1986-04-21 | | 499998 | 1956-09-05 | Patricia | Breugel | M | 1993-10-13 | | 499999 | 1958-05-01 | Sachin | Tsukuda | M | 1997-11-30 | +--------+------------+----------------+------------------+--------+------------+ 300024 rows in set (36.35 sec)
てな感じで、SPIDERノードからの操作だけで完結する。
コメントを残す