Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Spiderストレージエンジンの使い方と利用事例 他ストレージエンジンの紹介

1,230 views

Published on

データベースシャーディングを実現するSpiderストレージエンジンの概要、アーキテクチャ、利用事例、高度な使い方などのご紹介

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

Spiderストレージエンジンの使い方と利用事例 他ストレージエンジンの紹介

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

×