VPストレージエンジンの使い方

■ノード構成
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ノードからの操作だけで完結する。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です