48
Spiderストレージエンジンのご紹介 スパイラルアーム合同会社 Kentoku SHIBA

Spiderストレージエンジンのご紹介

  • Upload
    kentoku

  • View
    302

  • Download
    0

Embed Size (px)

Citation preview

Spiderストレージエンジンのご紹介

スパイラルアーム合同会社

Kentoku SHIBA

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

1. Spiderで何をするのか?

2. どういう場合にSpiderを使うのか?

3. Spiderはどういったところで使われているか?

4. Spiderのシャーディングの仕組み

5. Spiderのセットアップ

6. VPストレージエンジンとの組み合わせによる他次元シャーディング

7. Spiderのロードマップ

8. Spiderの入手方法 (VP含む)

アジェンダ

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

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

Spiderストレージエンジンは、データベース

のシャーデングやプロキシを実現する

ソリューションです。

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

MariaDB/MySQLのプラグインです。

テーブル作成する際にEngineにSpiderと

書くことで、Spiderテーブルを作成します。

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

Spiderテーブルは他のサーバにある

MariaDB/MySQL/OracleDBのテーブルを

あたかもそのデータベースにあるテーブルの

ように利用することを可能にします。

そして、 Spiderテーブルをテーブル

パーティショニングで分割することで、

複数サーバへテーブルデータを分割する

データベースシャーディングを実現します。

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

SpiderはMariaDB 10.0.4から

標準でバンドルされています。

Spiderで何をするのか?

Spiderで何をするのか?

フェデレーション

Spiderを使って、他のサーバのテーブルを

ローカルサーバのテーブルとして使うことが

できます。

シャーディング

Spiderを使って、巨大なテーブル、激しい

トラフィックを複数のサーバに分散することが

できます。

SPIDER (MySQL/MariaDB)

SPIDER (MySQL/MariaDB)

Spiderを使ったシャーディング構成の例

DB1

tbl_a1

1.リクエスト

2. SpiderテーブルにSQLを実行

3.レスポンス

DB2 DB3

AP

SPIDER (MySQL/MariaDB)

アプリケーションは、1つのデータベースに接続するだけで、

全てのデータベースを透過的に利用できる。

AP AP AP AP

tbl_a2 tbl_a3

クロスシャードJOIN

Spiderは、複数のサーバ(シャード)にまたがる

Joinをサポートしています。

よくある

シャーディング

ソリューション

よくあるシャーディングでのJOIN例

DB1

tbl_a1

1.リクエスト

2. JOINを含むSQLを実行

3.レスポンス

DB2

AP

必ずJOINを行うためのテーブルが

1つのシャードに全て存在する必要がある。

AP AP AP AP

tbl_a2 tbl_b1 tbl_b2

SpiderのシャーディングでのJOINの例

1.リクエスト

2. JOINを含むSQLを実行

3.レスポンス

AP

JOINを行うためのテーブルが

複数のシャードに存在してもJOINできる。

AP AP AP AP

SPIDER (MySQL/MariaDB)

DB1

tbl_a1

DB2

tbl_a2 tbl_b1 tbl_b2

JOINのプッシュダウン

また、可能であればJOINのプッシュダウンも

行います。

JOINのプッシュダウンの例

1.リクエスト

2. JOINを含むSQLを実行

3.レスポンス

AP

JOINを行うためのテーブルが1つのシャードにまとまっている場合、

データノードで直接JOINを行う。

AP AP AP AP

SPIDER (MySQL/MariaDB)

DB1

tbl_a

DB2

tbl_c tbl_b tbl_d

JOINのプッシュダウン

簡単に測定したところ2倍程度高速に

なりました。

また、このJOINのプッシュダウンは、クエリに

集計関数が含まれている場合は、集計処理も

データノードで実行するため、データの転送量

が大幅に削減され、超高速になります。

どういう場合にSpiderを使うのか?

どういう場合にSpiderを使うのか?

Spiderは以下のような要件がある場合に、

利用をご検討ください。

1.2つ以上の既存のサービスがあり、

機能追加などで、相互のサービスのデータを

利用する必要がある場合

2.巨大なデータや、激しいトラフィックを

分割する必要がある場合

When SPIDER is right for you? What cases should you use SPIDER?

Spiderは以下のような要件がある場合に、

利用をご検討ください。

3.任意のルールでシャーディングを行いたい

場合

4.シャーディングと一貫性が同時に必要である

場合

Spiderはどんなところで使われているか?

Spiderはどんなところで使われているか?

Galaxy Semiconductor

データ品質分析基盤として、Spiderが

利用されている。

3つのSpiderノード、4つのデータノードで

2000億レコードを扱っている。

Spiderはどんなところで使われているか?

Tencent Games

オンラインゲームの基盤としてSpiderが

利用されている。

396のSpiderノード、2800のデータノードで

100TBのデータを扱っている。

Spiderのシャーディングの仕組み

Spiderのシャーディングの仕組み

Spiderテーブルをパーティションテーブル

として作成すると、各パーティションを

異なるサーバのテーブルを割り当てることで、

複数のサーバへのデータ分割

(シャーディング)を行うことができます。

この際に利用するパーティションは、

一般的なテーブルパーティションと同じ

ルールが全て利用できます。

Spiderのシャーディングの仕組み

各シャードはSpiderの機能により、HAや

ロードバランスの為に、複数のサーバで

冗長化を行うことができます。

Spiderのシャーディングの仕組み

複数サーバへの更新は、Spiderの2フェーズ

コミットによって、一貫性が担保されます。

CommitがSpider内部で2フェーズコミットに

変換されます。

Spiderのセットアップ

Spiderのセットアップ (1/5)

1. Spiderがバンドルされた

MariaDB/MySQLをインストール

2. MariaDB/MySQLにログインし、

Spiderをプラグインとして

インストール

(install_spider.sqlを実行)

3. Spiderテーブルを作成

Spiderのセットアップ(2/5)

1対1Spiderテーブルの作成

CREATE TABLE t1(

c1 int,

c2 varchar(100),

PRIMARY KEY(c1)

)ENGINE=spider DEFAULT CHARSET=utf8

COMMENT '

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

host "host name of data node",

user "user name for data node",

password "password for data node"

';

Engine名に“Spider”を指定し、接続情報とパラメータを

Commentに記載する。

Spiderのセットアップ(3/5)

MariaDBの場合は、カラムの情報を省略してSpiderテーブルを

作成することも可能です。その場合は、Spiderがデータノードから

カラムの情報を取得して、定義として利用します。

CREATE TABLE t1

ENGINE=spider DEFAULT CHARSET=utf8

COMMENT '

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

host "host name of data node",

user "user name for data node",

password "password for data node"

';

Spiderのセットアップ(4/5)

1対多(シャーディング)Spiderテーブルの作成

CREATE TABLE t1(

c1 int,

c2 varchar(100),

PRIMARY KEY(c1)

)ENGINE=spider DEFAULT CHARSET=utf8

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

user "user name for data node", password "password for data node"'

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に記載する。

シャード毎に異なる接続情報をパーティションのCommentに記載する。

Spiderのセットアップ(5/5)

“CREATE SERVER”コマンドで接続情報を事前に定義することも可能です。

CREATE SERVER srv1

FOREIGN DATA WRAPPER mysql

HOST 'host name of data node',

DATABASE 'test',

USER 'user name for data node',

PASSWORD 'password for data node',

PORT 3306

;

上記で定義したサーバ定義は、SpiderではCommentに“server”パラメータ

として記述することができます。

CREATE TABLE t1(

c1 int,

c2 varchar(100),

PRIMARY KEY(c1)

)ENGINE=spider DEFAULT CHARSET=utf8

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

VPストレージエンジンとの組み合わせによる

多次元シャーディング

VPストレージエンジンとの組み合わせによる多次元シャーディング

VPは、Vertical Partitioningの略です。

VPは複数の子テーブルを1つの

(更新可能な)ビューとしてまとめることが

できます。

同じプライマリキーを持つテーブルを

プライマリキーでJOINしたビューと考えて

頂けると理解しやすいかと思います。

VPはクエリ毎にどの子テーブルを

利用するのが効果的かを判定して利用します。

VPストレージエンジンとの組み合わせによる多次元シャーディング

これは、テーブルパーティショニングを

うまく使いこなす際に役に立ちます。

テーブルパーティショニングは、パーティションの

ルールに指定したカラムでの検索が高速なのですが

ルールに指定したカラムが指定されない検索は

低速になることがあります。

また、テーブルにユニークキーがあると、

ユニークキーのカラムをパーティションのルールに

含めないといけないという制限があります。

異なるルールのパーティションを利用した構成例 (1/2)

1.リクエスト

3.レスポンス

AP AP AP AP AP

DB1

tbl_a (vp)

Partition

by col_a

tbl_a1

Partition

by col_b

tbl_a2

select … from tbl_a where col_a = 1

create table tbl_a1(

col_a int,

col_b date,

col_c int,

primary key(col_a)

)engine=innodb

partition by …

create table tbl_a2(

col_a int,

col_b date,

col_c int,

key idx1(col_a),

key idx2(col_b)

)engine=innodb

partition by …

異なるルールのパーティションを利用した構成例 (2/2)

1.リクエスト

3.レスポンス

AP AP AP AP AP

select … from tbl_a where col_b = ‘2016-01-01’

create table tbl_a1(

col_a int,

col_b date,

col_c int,

primary key(col_a)

)engine=innodb

partition by …

create table tbl_a2(

col_a int,

col_b date,

col_c int,

key idx1(col_a),

key idx2(col_b)

)engine=innodb

partition by …

DB1

tbl_a (vp)

tbl_a1 tbl_a2

Partition

by col_a

Partition

by col_b

VPストレージエンジンとの組み合わせによる多次元シャーディング

そのため、異なる分割ルールで

シャーディングされたSpiderテーブルを

VPの子テーブルとして利用すると

VPはこれらのSpiderテーブルを効果的に

使い分けます。

異なるシャーデングルールを利用した構成例 (1/2)

DB2

tbl_a

1.リクエスト

3.レスポンス

DB3

tbl_a

DB4

tbl_a

AP AP AP AP AP

DB1

tbl_a (vp)

DB5

tbl_a

Partition

by col_a

tbl_a1(spider)

Partition

by col_b

tbl_a2(spider)

select … from tbl_a where col_a = 1

異なるシャーデングルールを利用した構成例 (2/2)

DB2

tbl_a

1.リクエスト

3.レスポンス

DB3

tbl_a

DB4

tbl_a

AP AP AP AP AP

DB1

tbl_a (vp)

DB5

tbl_a

Partition

by col_a

tbl_a1(spider)

Partition

by col_b

tbl_a2(spider)

select … from tbl_a where col_b = 1

Spiderのロードマップ

Spiderのロードマップ

今年開発されたSpiderの新機能

- データベース起動時の統計情報の復元

(Spiderテーブルの初期化の高速化)

- Joinのプッシュダウン(冗長化されたテーブルを含む)

(パーティションされたテーブルは今後対応予定)

バイナリ

http://spiderformysql.com/downloads/spider-3.3/mariadb-10.2.0-spider-

3.3-vp-1.1-linux-x86_64-glibc25.tgz

ソースコード

http://spiderformysql.com/downloads/spider-3.3/mariadb-10.2.0-spider-

3.3-vp-1.1.tgz

Spiderのロードマップ

2016 冬

- データノードからの統計情報取得スレッドの削減

(利用メモリ削減)

- Spider管理テーブルが壊れた際の自動リカバリ

- Joinのプッシュダウン(パーティションされたテーブル)

Spiderのロードマップ

2017 春

- データベース起動時の自動XA recoveryとcommit/rollback

- Joinのプッシュダウン(VPテーブル対応)

Spiderの入手方法 (VP含む)

Spiderの入手方法 (VP含む)

現在、MariaDBへのSpiderパッチが適用中です。

今年中にほぼ完了予定です。

これによりSpiderを利用したパラレルクエリや

パーティションを利用した場合のJoinの高速化機能、

集計クエリや検索条件などを含むプッシュダウンの

機能が追加される予定です。

Spiderの入手方法 (VP含む)

ただ、VPの追加などは、もう少し時間がかかるかも

しれないので、もし全部入り版が必要な場合には、

ご要望に応じてバイナリとソースコードを

提供していますので、下記にお問い合わせください。 [email protected]

Spiderストレージエンジンのみのリポジトリは

以下にあります。 https://github.com/Kentoku/Spider

もうひとつ言わせてください。。。

2016年10月に

オランダに支社設立しました!

詳細は、懇親会で!