Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

6.516 Aufrufe

Veröffentlicht am

MariaDB/MySQLでデータベースシャーディングの機能を提供するストレージエンジン、Spiderの紹介です。

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

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

  1. 1. Spiderストレージエンジンのご紹介 スパイラルアーム合同会社 Kentoku SHIBA
  2. 2. 0. Spiderストレージエンジンとは? 1. Spiderで何をするのか? 2. どういう場合にSpiderを使うのか? 3. Spiderはどういったところで使われているか? 4. Spiderのシャーディングの仕組み 5. Spiderのセットアップ 6. VPストレージエンジンとの組み合わせによる他次元シャーディング 7. Spiderのロードマップ 8. Spiderの入手方法 (VP含む) アジェンダ
  3. 3. Spiderストレージエンジンとは?
  4. 4. Spiderストレージエンジンとは? Spiderストレージエンジンは、データベース のシャーデングやプロキシを実現する ソリューションです。 Spiderストレージエンジンは、 MariaDB/MySQLのプラグインです。 テーブル作成する際にEngineにSpiderと 書くことで、Spiderテーブルを作成します。
  5. 5. Spiderストレージエンジンとは? Spiderテーブルは他のサーバにある MariaDB/MySQL/OracleDBのテーブルを あたかもそのデータベースにあるテーブルの ように利用することを可能にします。 そして、 Spiderテーブルをテーブル パーティショニングで分割することで、 複数サーバへテーブルデータを分割する データベースシャーディングを実現します。
  6. 6. Spiderストレージエンジンとは? SpiderはMariaDB 10.0.4から 標準でバンドルされています。
  7. 7. Spiderで何をするのか?
  8. 8. Spiderで何をするのか? フェデレーション Spiderを使って、他のサーバのテーブルを ローカルサーバのテーブルとして使うことが できます。 シャーディング Spiderを使って、巨大なテーブル、激しい トラフィックを複数のサーバに分散することが できます。
  9. 9. SPIDER (MySQL/MariaDB) SPIDER (MySQL/MariaDB) Spiderを使ったシャーディング構成の例 DB1 tbl_a1 1.リクエスト 2. SpiderテーブルにSQLを実行 3.レスポンス DB2 DB3 AP SPIDER (MySQL/MariaDB) アプリケーションは、1つのデータベースに接続するだけで、 全てのデータベースを透過的に利用できる。 APAP AP AP tbl_a2 tbl_a3
  10. 10. クロスシャードJOIN Spiderは、複数のサーバ(シャード)にまたがる Joinをサポートしています。
  11. 11. よくある シャーディング ソリューション よくあるシャーディングでのJOIN例 DB1 tbl_a1 1.リクエスト 2. JOINを含むSQLを実行 3.レスポンス DB2 AP 必ずJOINを行うためのテーブルが 1つのシャードに全て存在する必要がある。 APAP AP AP tbl_a2tbl_b1 tbl_b2
  12. 12. SpiderのシャーディングでのJOINの例 1.リクエスト 2. JOINを含むSQLを実行 3.レスポンス AP JOINを行うためのテーブルが 複数のシャードに存在してもJOINできる。 APAP AP AP SPIDER (MySQL/MariaDB) DB1 tbl_a1 DB2 tbl_a2tbl_b1 tbl_b2
  13. 13. JOINのプッシュダウン また、可能であればJOINのプッシュダウンも 行います。
  14. 14. JOINのプッシュダウンの例 1.リクエスト 2. JOINを含むSQLを実行 3.レスポンス AP JOINを行うためのテーブルが1つのシャードにまとまっている場合、 データノードで直接JOINを行う。 APAP AP AP SPIDER (MySQL/MariaDB) DB1 tbl_a DB2 tbl_ctbl_b tbl_d
  15. 15. JOINのプッシュダウン 簡単に測定したところ2倍程度高速に なりました。 また、このJOINのプッシュダウンは、クエリに 集計関数が含まれている場合は、集計処理も データノードで実行するため、データの転送量 が大幅に削減され、超高速になります。
  16. 16. どういう場合にSpiderを使うのか?
  17. 17. どういう場合にSpiderを使うのか? Spiderは以下のような要件がある場合に、 利用をご検討ください。 1.2つ以上の既存のサービスがあり、 機能追加などで、相互のサービスのデータを 利用する必要がある場合 2.巨大なデータや、激しいトラフィックを 分割する必要がある場合
  18. 18. When SPIDER is right for you? What cases should you use SPIDER? Spiderは以下のような要件がある場合に、 利用をご検討ください。 3.任意のルールでシャーディングを行いたい 場合 4.シャーディングと一貫性が同時に必要である 場合
  19. 19. Spiderはどんなところで使われているか?
  20. 20. Spiderはどんなところで使われているか? Galaxy Semiconductor データ品質分析基盤として、Spiderが 利用されている。 3つのSpiderノード、4つのデータノードで 2000億レコードを扱っている。
  21. 21. Spiderはどんなところで使われているか? Tencent Games オンラインゲームの基盤としてSpiderが 利用されている。 396のSpiderノード、2800のデータノードで 100TBのデータを扱っている。
  22. 22. Spiderのシャーディングの仕組み
  23. 23. Spiderのシャーディングの仕組み Spiderテーブルをパーティションテーブル として作成すると、各パーティションを 異なるサーバのテーブルを割り当てることで、 複数のサーバへのデータ分割 (シャーディング)を行うことができます。 この際に利用するパーティションは、 一般的なテーブルパーティションと同じ ルールが全て利用できます。
  24. 24. Spiderのシャーディングの仕組み 各シャードはSpiderの機能により、HAや ロードバランスの為に、複数のサーバで 冗長化を行うことができます。
  25. 25. Spiderのシャーディングの仕組み 複数サーバへの更新は、Spiderの2フェーズ コミットによって、一貫性が担保されます。 CommitがSpider内部で2フェーズコミットに 変換されます。
  26. 26. Spiderのセットアップ
  27. 27. Spiderのセットアップ (1/5) 1. Spiderがバンドルされた MariaDB/MySQLをインストール 2. MariaDB/MySQLにログインし、 Spiderをプラグインとして インストール (install_spider.sqlを実行) 3. Spiderテーブルを作成
  28. 28. 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に記載する。
  29. 29. 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" ';
  30. 30. 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に記載する。
  31. 31. 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"';
  32. 32. VPストレージエンジンとの組み合わせによる 多次元シャーディング
  33. 33. VPストレージエンジンとの組み合わせによる多次元シャーディング VPは、Vertical Partitioningの略です。 VPは複数の子テーブルを1つの (更新可能な)ビューとしてまとめることが できます。 同じプライマリキーを持つテーブルを プライマリキーでJOINしたビューと考えて 頂けると理解しやすいかと思います。 VPはクエリ毎にどの子テーブルを 利用するのが効果的かを判定して利用します。
  34. 34. VPストレージエンジンとの組み合わせによる多次元シャーディング これは、テーブルパーティショニングを うまく使いこなす際に役に立ちます。 テーブルパーティショニングは、パーティションの ルールに指定したカラムでの検索が高速なのですが ルールに指定したカラムが指定されない検索は 低速になることがあります。 また、テーブルにユニークキーがあると、 ユニークキーのカラムをパーティションのルールに 含めないといけないという制限があります。
  35. 35. 異なるルールのパーティションを利用した構成例 (1/2) 1.リクエスト 3.レスポンス APAPAP 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 …
  36. 36. 異なるルールのパーティションを利用した構成例 (2/2) 1.リクエスト 3.レスポンス APAPAP 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
  37. 37. VPストレージエンジンとの組み合わせによる多次元シャーディング そのため、異なる分割ルールで シャーディングされたSpiderテーブルを VPの子テーブルとして利用すると VPはこれらのSpiderテーブルを効果的に 使い分けます。
  38. 38. 異なるシャーデングルールを利用した構成例 (1/2) DB2 tbl_a 1.リクエスト 3.レスポンス DB3 tbl_a DB4 tbl_a APAPAP 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
  39. 39. 異なるシャーデングルールを利用した構成例 (2/2) DB2 tbl_a 1.リクエスト 3.レスポンス DB3 tbl_a DB4 tbl_a APAPAP 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
  40. 40. Spiderのロードマップ
  41. 41. 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
  42. 42. Spiderのロードマップ 2016 冬 - データノードからの統計情報取得スレッドの削減 (利用メモリ削減) - Spider管理テーブルが壊れた際の自動リカバリ - Joinのプッシュダウン(パーティションされたテーブル)
  43. 43. Spiderのロードマップ 2017 春 - データベース起動時の自動XA recoveryと commit/rollback - Joinのプッシュダウン(VPテーブル対応)
  44. 44. Spiderの入手方法 (VP含む)
  45. 45. Spiderの入手方法 (VP含む) 現在、MariaDBへのSpiderパッチが適用中です。 今年中にほぼ完了予定です。 これによりSpiderを利用したパラレルクエリや パーティションを利用した場合のJoinの高速化機能、 集計クエリや検索条件などを含むプッシュダウンの 機能が追加される予定です。
  46. 46. Spiderの入手方法 (VP含む) ただ、VPの追加などは、もう少し時間がかかるかも しれないので、もし全部入り版が必要な場合には、 ご要望に応じてバイナリとソースコードを 提供していますので、下記にお問い合わせください。 support@spiderformysql.com Spiderストレージエンジンのみのリポジトリは 以下にあります。 https://github.com/Kentoku/Spider
  47. 47. もうひとつ言わせてください。。。
  48. 48. 2016年10月に オランダに支社設立 しました! 詳細は、懇親会で!

×