Spiderの最新動向 20130419

Preview:

Citation preview

MySQLプラグイン:Spiderストレージエンジンの

機能のご紹介と最新動向

チームラボ株式会社

斯波健徳

Spiderストレージエンジンとは?

Spiderストレージエンジンは、

MySQLのプラグインで、

別のサーバにあるテーブルもしくはビューを、

ローカルのDBにあるテーブルもしくは

パーティションとして利用できる機能を

提供します。

Spiderストレージエンジンの用途

Spiderを利用すると

大量のデータを複数サーバに分散させて

①大量のトラフィックを処理したり(DBシャーディング)

②並列処理したり(パラレル処理)

することができるようになります。

また、複数の別々のアプリケーションで利用しているDBを

③1つのDBとして利用することも可能

になります。

SPIDER (MySQL)

SPIDER (MySQL)

Spiderの構成例

DB1

tbl_a

1.Request

2.Just connect to spider

3.Response

DB2

tbl_b

DB3

tbl_c

AP

SPIDER (MySQL)

アプリケーションは、1つのデータベースに接続すれば、他のデータベースを意識せずに利用できる。

AP AP AP AP

Spiderの使い方 (1/4)

①SpiderがバンドルされたMySQLを

インストール

②MySQLにログインし、

Spiderをプラグインとしてインストール

(install_spider.sqlを実行)

③テーブルを作成

Spiderの使い方 (2/4)

1対1リンクテーブルなら

CREATE TABLE t1(

c1 int,

c2 varchar(100),

PRIMARY KEY(c1)

)ENGINE=spider DEFAULT CHARSET=utf8

COMMENT '

table "rt1", database "test", port "3306",

host "データノードのホスト名",

user "データノードログイン用ユーザ名",

password "パスワード"

';

ストレージエンジンにSpiderを指定し

COMMENTに接続情報(パラメータ)を記述すればOK

Spiderの使い方 (3/4)

分割(sharding)テーブルなら

CREATE TABLE t1(

c1 int,

c2 varchar(100),

PRIMARY KEY(c1)

)ENGINE=spider DEFAULT CHARSET=utf8

COMMENT 'table "rt1", database "test", port "3306",

user "データノードログイン用ユーザ名", password "パスワード"'

PARTITION BY RANGE(c1) (

PARTITION p0 VALUES LESS THAN (100000) COMMENT 'host "h1"',

PARTITION p1 VALUES LESS THAN (200000) COMMENT 'host "h2"',

PARTITION p2 VALUES LESS THAN (300000) COMMENT 'host "h3"',

PARTITION p3 VALUES LESS THAN MAXVALUE COMMENT 'host "h4"'

);

テーブルのCOMMENTに共通する接続情報、

各パーティションにパーティション固有の接続情報を記述すればOK

Spiderの使い方 (4/4)

これらの接続情報は、CREATE SERVER構文を使ってあらかじめ

定義しておくこともでき

CREATE SERVER srv1

FOREIGN DATA WRAPPER mysql

HOST 'データノードのホスト名',

DATABASE 'test',

USER 'データノードログイン用ユーザ名',

PASSWORD 'パスワード',

PORT 3306

;

CREATE TABLE t1(

c1 int,

c2 varchar(100),

PRIMARY KEY(c1)

)ENGINE=spider DEFAULT CHARSET=utf8

COMMENT 'table "rt1", server "srv1"';

のように利用することができます。

Spiderのその他の機能と、

Version 3.0で追加された新機能のご紹介

Spiderのその他の機能

冗長化機能

テーブル・パーティションの単位で冗長度を設定可能

耐障害性機能

Spider標準のものだけではなく、MySQLで利用可能な

他のソリューションが利用可能

全文検索・位置情報検索対応機能

バックエンドのMySQLの全文検索・位置情報検索

機能がそのまま利用可能

NoSQL対応機能

handlersocketに対応

OracleDB接続対応

今回、OracleDBをデータノードとして利用できるように

なるわけですが、今回の機能追加を機に、以下の

ようなことができればと考えています。

①OracleDBを使ったシステムのサブシステムで

MySQLを利用する

②分割マイグレーションを行う

③データの相互利用を行う

①と③は、比較的想定しやすいので、ここでは

②についてもう少し詳しくお話したいと思います。

分割マイグレーション

分割マイグレーションとは、システムの

マイグレーションを1回ではなく分割して

実施する移行手法で、移行の過程で、

旧システムと新システムが共存する

期間があるのが特徴です。

分割マイグレーションのメリット

・移行結果を段階的に確認できるため、

定期的に状況分析を行いやすく、リスクの

細分化ができる。

・移行単位を分割することにより、リリースの

優先度付けができるため、期間あたりの

開発ボリュームを調整しやすい。

・システムの全てを漏れなく把握しなくても、

作業を開始することができる。

・アジャイルや反復型の開発手法を導入しやすい。

SPIDER (MySQL)

分割マイグレーション フェーズ1

移行元DB

tbl_a

MySQLからSpider経由で、移行元DBのテーブルを利用する

AP AP

更新+参照

参照

移行元DBに接続するアプリケーションが更新+参照

MySQLに接続するアプリケーションが参照のみを行うテーブル

※移行のフェーズは、テーブル

単位で細かく設計できるので、

柔軟な移行設計が可能です。

参照

SPIDER (MySQL)

分割マイグレーション フェーズ2

移行元DB

tbl_a

MySQLからSpider経由で、移行元DBのテーブルを利用する

AP AP

更新+参照

更新+参照

移行元DBに接続するアプリケーションが更新+参照

MySQLに接続するアプリケーションが更新+参照を行うテーブル

更新+参照

SPIDER (MySQL)

分割マイグレーション フェーズ3

移行元DB

tbl_a

Spiderの冗長化機能、もしくはVP(後述)を利用して

移行元、MySQL双方のテーブルを更新する

AP AP

参照

更新+参照

移行元DBに接続するアプリケーションが参照

MySQLに接続するアプリケーションが更新+参照を行うテーブル

MySQL

tbl_a

更新+参照 更新

・新アプリのデプロイ

・旧更新アプリの停止

・新DBへテーブル作成

・Spiderの定義変更と

データコピー

分割マイグレーション フェーズ4

移行元DB

移行完了

AP

更新+参照

移行元DBに接続するアプリケーションが利用せず

MySQLに接続するアプリケーションが更新+参照を行うテーブル

MySQL

tbl_a

AP

これらの分割マイグレーションは、

基本的にシステム無停止での

実施が可能です

Spiderと組み合わせることが多い、

その他のプラグインのご紹介

1. Vertical Partitioning Storage Engine

2. Handlersocket Plugin

3. Mroonga Storage Engine

その他のプラグイン

Vertical Partitioning Storage Engine

Vertical Partitioning (VP) Storage Engineの

主な特徴

1. カラムレベルの分割

2. 1対1リレーションでjoinしたVIEWに近い動作で、

元となるテーブル(子テーブル)への直接アクセスも

可能。ただし、VIEWとは異なり完全にテーブルとして

利用可能で、INSERTなども実行できる

3. 行レベルパーティショニングの分割条件を、状況に

応じて使い分けたい場合に利用可能

4. 子テーブル間のオンラインデータコピーをサポート

1. Vertical Partitioning Storage Engine

2. Handlersocket Plugin

3. Mroonga Storage Engine

その他のプラグイン

Handlersocket Plugin

Handlersocket (HS) Pluginの主な特徴

1. MySQLへの高速なNOSQLアクセスが可能

2. Spiderと組み合わせることで、複数サーバに

分散したデータへのNOSQLアクセスが可能

Handlersocket is developed by Akira Higuchi.

https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL

Patched version for Spider is bundled with

Spider bundled MySQL.

http://spiderformysql.com/download_spider.html

1. Vertical Partitioning Storage Engine

2. Handlersocket Plugin

3. Mroonga Storage Engine

その他のプラグイン

Mroonga Storage Engine (1/2)

Mroonga Storage Engineの主な特徴

1. 高速な全文検索

2. 高速な位置情報検索

3. 検索中でも高速に更新が可能

(ロックフリーモデル)

4. 日本語全文検索に対応

Mroonga Storage Engine (2/2)

Mroonga Storage Engineの主な特徴

5. 他のストレージエンジンと組み合わせて、

全文検索と位置情報検索の機能を

付加することも可能

6. Spiderと組み合わせて、分散したデータへの

全文検索、位置情報検索が可能

Mroonga’s document is available.

http://mroonga.github.com/

最新動向

MariaDBへのバンドル

MariaDB 10.0へのバンドル作業中で、Spiderは現在レビューを

受けている段階です。

Mroongaも近々バンドルする予定です。

MariaDBは、MySQLのフォークであり、Monty Program ABという

会社で、Michael WideniusさんというMySQLを元々の作者を筆頭に、

MySQLよりもオープンな開発を目指して、開発が進められています。

Fedoraプロジェクトなどが、MySQLからMariaDBへ

ディストリビューションの標準を変更するようです。

MySQLと違う部分が説明されている、Monty Program ABのページ。

https://kb.askmonty.org/en/mariadb-vs-mysql-compatibility/

https://kb.askmonty.org/en/mariadb-vs-mysql-features/

より快適に

これまでは、使いやすさよりも、とにかく「できること」に重点を置いた開発を

行ってきたのですが、ある程度その点には目処がたってきたこともあり、

このあたりで、スキーマを設計してから、分散環境の構築までの手順を

なるべく自動化できるようにするための機能の開発を予定しています。

その他のコンセプトとしては

①既存のスキーマ設計のツールが利用できる

②クラウドサービスで利用できる

③既に構築済みの環境にも使える

④既存の管理ツールとも連携できる

といったことを考えています。

提供時期はまだ未定ですが、なるべく早い段階でこちらの提供と利用方法を

ご紹介できるようにしたいと考えております。

なので、「快適スケールアウト勉強会」は次回に続きます。

まとめ

・ Spiderストレージエンジンを利用すると、

1つのデータベースに接続するだけで、

他のデータベースのテーブルを利用できる

ようになります。

・テーブルのデータが肥大化した場合には、

Spiderを使って、そのデータを複数の

データベースに分割して利用することが

できます。

まとめ

http://spiderformysql.com

Kentoku SHIBA (kentokushiba [at] gmail [dot] com)

Any Questions?

You can see me later!

Come to visit me!!

ご清聴ありがとうございました!