Upload
kentoku
View
302
Download
0
Embed Size (px)
Citation preview
0. Spiderストレージエンジンとは?
1. Spiderで何をするのか?
2. どういう場合にSpiderを使うのか?
3. Spiderはどういったところで使われているか?
4. Spiderのシャーディングの仕組み
5. Spiderのセットアップ
6. VPストレージエンジンとの組み合わせによる他次元シャーディング
7. Spiderのロードマップ
8. Spiderの入手方法 (VP含む)
アジェンダ
Spiderストレージエンジンとは?
Spiderストレージエンジンは、データベース
のシャーデングやプロキシを実現する
ソリューションです。
Spiderストレージエンジンは、
MariaDB/MySQLのプラグインです。
テーブル作成する際にEngineにSpiderと
書くことで、Spiderテーブルを作成します。
Spiderストレージエンジンとは?
Spiderテーブルは他のサーバにある
MariaDB/MySQL/OracleDBのテーブルを
あたかもそのデータベースにあるテーブルの
ように利用することを可能にします。
そして、 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例
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のプッシュダウンの例
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は以下のような要件がある場合に、
利用をご検討ください。
1.2つ以上の既存のサービスがあり、
機能追加などで、相互のサービスのデータを
利用する必要がある場合
2.巨大なデータや、激しいトラフィックを
分割する必要がある場合
When SPIDER is right for you? What cases should you use SPIDER?
Spiderは以下のような要件がある場合に、
利用をご検討ください。
3.任意のルールでシャーディングを行いたい
場合
4.シャーディングと一貫性が同時に必要である
場合
Spiderはどんなところで使われているか?
Galaxy Semiconductor
データ品質分析基盤として、Spiderが
利用されている。
3つのSpiderノード、4つのデータノードで
2000億レコードを扱っている。
Spiderはどんなところで使われているか?
Tencent Games
オンラインゲームの基盤としてSpiderが
利用されている。
396のSpiderノード、2800のデータノードで
100TBのデータを扱っている。
Spiderのシャーディングの仕組み
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は、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テーブルの初期化の高速化)
- 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の入手方法 (VP含む)
現在、MariaDBへのSpiderパッチが適用中です。
今年中にほぼ完了予定です。
これによりSpiderを利用したパラレルクエリや
パーティションを利用した場合のJoinの高速化機能、
集計クエリや検索条件などを含むプッシュダウンの
機能が追加される予定です。
Spiderの入手方法 (VP含む)
ただ、VPの追加などは、もう少し時間がかかるかも
しれないので、もし全部入り版が必要な場合には、
ご要望に応じてバイナリとソースコードを
提供していますので、下記にお問い合わせください。 [email protected]
Spiderストレージエンジンのみのリポジトリは
以下にあります。 https://github.com/Kentoku/Spider