Spiderの最新動向 20131009
Transcript of Spiderの最新動向 20131009
MySQLプラグイン:Spiderストレージエンジンの
機能のご紹介と最新動向
チームラボ / スパイラルアーム
斯波健徳
Spiderストレージエンジンとは?
Spiderストレージエンジンは、
MySQL/MariaDBのプラグインで、
別のサーバにあるテーブルもしくはビューを、
ローカルのDBにあるテーブルもしくは
パーティションとして利用できる機能を
提供します。
MariaDB 10.0.4から、標準でバンドル
されています。
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/5)
①Spiderがバンドルされた
MySQL/MariaDBをインストール
②MySQLにログインし、
Spiderをプラグインとしてインストール
(install_spider.sqlを実行)
③テーブルを作成
Spiderの使い方 (2/5)
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/5)
MariaDBだと、Spiderテーブルを作成する場合にカラムの
情報を省略しても、データノードの定義を引き継いで、
テーブルが作成されます。
CREATE TABLE t1
ENGINE=spider DEFAULT CHARSET=utf8
COMMENT '
table "rt1", database "test", port "3306",
host "データノードのホスト名",
user "データノードログイン用ユーザ名",
password "パスワード"
‘;
Spiderの使い方 (4/5)
分割(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の使い方 (5/5)
これらの接続情報は、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のその他の機能のご紹介
Spiderのその他の機能
冗長化機能
テーブル・パーティションの単位で冗長度を設定可能
耐障害性機能
Spider標準のものだけではなく、MySQLで利用可能な
他のソリューションが利用可能
全文検索・位置情報検索対応機能
(パーティションを利用した場合MariaDB未)
バックエンドのMySQLの全文検索・位置情報検索
機能がそのまま利用可能
Spiderのその他の機能
NoSQL対応機能(MariaDB未)
handlersocketに対応
OracleDB接続機能
データノードとしてOracleDBを利用できる機能です。
※ソースコードからのビルドが必要です。
パラレル検索機能(MariaDB未)
shardingされているテーブルの検索時、
複数shardに対して並列に検索を行う機能です。
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.4でバンドルされました。
Mroongaもバンドル目指して頑張っているところです。
ただし、現在のところMariaDB本体に変更が必要な機能、
他のストレージエンジンと組み合わせることで実現できる
機能などは、まだMariaDBでは利用できないものもあり、
現在それらを利用できるように対応中です。
地味だけど重要な改善
1. spider_bka_mode=2 BatchedKeyAccessというjoinを最適化する機能があり、
これはその際の最適化(一部他のケースでも利用される)の方式を
決めるオプションなのですが、spider_bka_mode=1では、
レプリケーション(Amazon RDSの場合はリードレプリカ)を利用すると
レプリケーション遅延が発生しやすくなる特性があったため、
spider_bka_mode=2を追加し、それを解消しました。
2.集計関数の最適化 joinと集計関数の中にdistinctがない場合、COUNT、MAX、MIN、SUMが
高速化しました。
地味だけど重要な改善
3. log_result_errors 、 spider_log_result_errors 、
spider_general_log(パラメータ)、
spider_xa_failed_log(テーブル)
ログ関係の改善です。Spiderがデータノードに発行したSQLを
確認したり、Spiderがデータノードから受け取ったエラー、MySQLが
アプリケーションに返したエラーをロギングしたり、データノードへの
XAトランザクションが失敗した場合に、どのデータノードのものが
失敗したのかなどをログとして確認し、障害解析、復旧に役立てることが
できるようになりました。
なお、パラメータはすべて動的に変更できますので、サービス中に
一時的にログを出力するような利用も可能です。
より快適に
これまでは、使いやすさよりも、とにかく「できること」に重点を置いた開発を
行ってきたのですが、ある程度その点には目処がたってきたこともあり、
このあたりで、スキーマを設計してから、分散環境の構築までの手順を
なるべく自動化できるようにするための機能の開発を予定しています。
その他のコンセプトとしては
①既存のスキーマ設計のツールが利用できる
②クラウドサービスで利用できる
③既に構築済みの環境にも使える
④既存の管理ツールとも連携できる
といったことを考えています。
提供時期はまだ未定ですが、なるべく早い段階でこちらの提供と利用方法を
ご紹介できるようにしたいと考えております。
MariaDB Foundationについて
MariaDB Foundationについて
MariaDB Foundationは、現在のMariaDBの開発母体です。
MariaDB Foundationはコミュニティと連携しながら運営されているのですが、
まだまだいろいろ議論しないといけないことがあるようです。
ですのでみなさん、この議論に参加して、
・ここはこうした方がいいんじゃないか?
・これはおかしいんじゃない?
・これってどうなってるんだっけ?
といったことがあれば、どんどん発言して頂ければと思います。
MariaDB Foundationについて
議論のためのMLはこちらです。
このMLに参加するには、
https://login.launchpad.net/+new_account
で、launchpadにアカウントを登録し、
https://launchpad.net/~maria-discuss
で、MLに参加を行います。
※launchpadは、フリーソフトウェアの開発の為の
プロジェクトホスティングサービスです。(感謝)
まとめ
・ Spiderストレージエンジンを利用すると、
1つのデータベースに接続するだけで、
他のデータベースのテーブルを利用できる
ようになります。
・テーブルのデータが肥大化した場合には、
Spiderを使って、そのデータを複数の
データベースに分割して利用することが
できます。分割構成の設計の自由度が
高いのが特徴です。
まとめ
http://spiderformysql.com
Kentoku SHIBA (kentokushiba [at] gmail [dot] com)
Any Questions?
You can see me later!
Come to visit me!!
ご清聴ありがとうございました!