hs_spider_hs_something_20110906

32
handlersocket Spider - handlersocket InnoDBなど 斯波健徳 kentokushiba[at]gmail[dot]com

Upload: kentoku

Post on 22-Jun-2015

1.459 views

Category:

Documents


0 download

DESCRIPTION

handlersocket with spider

TRANSCRIPT

Page 1: hs_spider_hs_something_20110906

handlersocket – Spider –- handlersocket – InnoDBなど

斯波健徳kentokushiba[at]gmail[dot]com

Page 2: hs_spider_hs_something_20110906

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

Page 3: hs_spider_hs_something_20110906

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

Spiderストレージエンジンとは、MySQLのストレージ

エンジンの1種で、複数のデータベースサーバにある

テーブルを束ねて、1つのテーブルとして利用することを

可能にします。

これは、クラウド環境においては、増え続けるデータを、

サーバをどんどん増やしながら分割して管理する

ために利用することができます。

MySQLと同じく、GPLライセンスで公開しています。

Page 4: hs_spider_hs_something_20110906

Spiderを利用した構成例

アプリケーションはSpiderの入ったMySQLに

SQL(参照/更新)を実行すると、Spiderが透過的に

後ろにあるデータノードにアクセスして結果を返します。

AP

DB

DB

AP

DB

DB

LB

Page 5: hs_spider_hs_something_20110906

Spiderを利用した構成例

トラフィックが増えたり、データが増えたりした場合は、

このようにサーバを追加して、負荷分散を行います。

AP

DB

DB

AP

DB

DB

LB

AP

DB

DB

AP

DB

DB

Page 6: hs_spider_hs_something_20110906

「Spider」と「handlersocket」

Page 7: hs_spider_hs_something_20110906

Spider経由で、分散環境のhandlersocketにアクセスできる

handlersocketインターフェースからSpiderテーブルを

利用すると、Spiderがデータノードにアクセスする際にも

handlersocketインターフェースでアクセスします。

(use_hs_read、use_hs_writeを1に設定してください)

※テーブルパーティショニングを利用しているSpiderテーブルに、

offset、limit付きの更新をした場合など、設定に関わらず

SQLでのアクセスとなるケースもあります。

Page 8: hs_spider_hs_something_20110906

Spider経由で、分散環境のhandlersocketにアクセスできる

データノードがhandlersocketに対応していない場合は、

use_hs_read、use_hs_writeを0に設定することで、

データノードへのアクセスをSQLにすることができます。

(テーブル単位で設定可能)

Page 9: hs_spider_hs_something_20110906

アプリケーションからDB(Spiderノード)へのアクセス

アプリケーションはSpiderの入ったMySQLの

handlersocketインターフェースにアクセス。

AP

DB

DB

AP

DB

DB

LB

Page 10: hs_spider_hs_something_20110906

Spiderからデータノードへのアクセス

SpiderはデータノードのMySQLの

Handlersocketインターフェースにアクセス。

AP

DB

DB

AP

DB

DB

LB

Page 11: hs_spider_hs_something_20110906

「Spider」と「handlersocket」を組み合わせると何がいいのか?

Page 12: hs_spider_hs_something_20110906

Spiderとhandlersocketを組み合わせると何がいいのか?

・handlersocketを分散環境で利用できる。

スケールアウトで、メモリやCPUリソースを拡張できる。

・handlersocketアクセスとSQLアクセスで、見ているデータが

同じなので、データ矛盾が発生しない。

・冗長化機能など、Spiderの機能を合わせて利用できる。

Page 13: hs_spider_hs_something_20110906

Spiderとhandlersocketを組み合わせると何がいいのか?

・handlersocketアクセスとSQLアクセスで、テーブルの

分散ルールを統一することができる。

・テーブルによってデータノードへのアクセスをhandlersocket

アクセスかSQLアクセスかを選択できるので、テーブルによって

SQLアクセスを選択し、データノードにトリガを仕掛けるなど、

柔軟性の高い利用が可能。

・更新が並列化できる。

1サーバに複数MySQLインスタンスを立てる。

Page 14: hs_spider_hs_something_20110906

「handlersocket」にオプションを追加してみた

Page 15: hs_spider_hs_something_20110906

handlersocketにオプションを追加してみた

・handlersocket_support_merge_table

1を設定すると、handlersocketでmerge_myisam、vpのテーブルを

利用できるようになる。

ただし、テーブルオープンのコストが少し増える。

Page 16: hs_spider_hs_something_20110906

handlersocketにオプションを追加してみた

・handlersocket_direct_update_mode

更新の情報をストレージエンジン層にそのまま渡し、大量更新を

高速化するためのオプション。現在のところSpiderのみがこの

オプションの恩恵を受けることができる。

0:direct update mode off

1:direct update mode 1

direct updateが機能した場合に、ローカルサーバにバイナリログを残すことができる

モードです。

2:direct update mode 2

direct updateが機能した場合に、ローカルサーバにバイナリログを残さない

モードですが、最速のモードになります。

データノード側(Spiderのアクセス先)でバイナリログを残すことは可能です。

Page 17: hs_spider_hs_something_20110906

handlersocketにオプションを追加してみた

・handlersocket_unlimited_boundary

limitを無制限とみなす閾値です。

テーブルパーティショニングを利用しているテーブルで

direct_update_modeを利用するために必要になります。

Page 18: hs_spider_hs_something_20110906

handlersocketにオプションを追加してみた

・handlersocket_bulk_insert

handlersocketに対して行われるinsertを、bulk insertとして

まとめてinsertするオプション。

複数ユーザからのinsertもbulk insertになるという特徴があり、

単一行のinsertをマルチスレッドで行うようなアプリケーションの

insertの高速化に威力を発揮する。(特にSpider)

0:bulk insertを実施せず、1レコードずつのinsertを行います。

1-:指定された値を超えるレコードが蓄積されると、bulk insertが実施されます。

Page 19: hs_spider_hs_something_20110906

handlersocketにオプションを追加してみた

・handlersocket_bulk_insert_timeout

handlersocket_bulk_insertのレコード数に達しない状態でも、

bulk insertを実施する最大待機時間。(秒)

Page 20: hs_spider_hs_something_20110906

「spider_direct_sql()」で「handlersocket」を

呼び出せるようにしてみた

Page 21: hs_spider_hs_something_20110906

spider_direct_sql()でhandlersocketを呼び出せるようにしてみた

spider_direct_sql()は、Spiderストレージエンジンのインストール

スクリプトを実行すると利用可能になるUDFです。

SQLインターフェースから、他のサーバへ直接SQLを実行し

結果をテンポラリテーブルへ格納することができます。

この、spider_direct_sql()でhandlersocketを呼び出せるように

してみました。

spider_direct_sql()でhandlersocketを呼び出す場合、

性能的なメリットは、工夫した使い方をしないとあまりないと

思いますが、お手軽にhandlersocketを利用することが

可能になるかと思います。性能を出すためのポイント:spider_direct_sql()側では、テンポラリテーブルへの

格納のオーバーヘッドがありますが、

handlersocket側の性能は変わりません。

Page 22: hs_spider_hs_something_20110906

spider_direct_sql()でhandlersocketを呼び出せるようにしてみた

使い方(handlersocketのprotocol.ja.txtが参考になります)・テーブルオープン

select spider_direct_sql('P¥t1¥ttest¥tt1¥tPRIMARY¥ta,b,c','','host "localhost", port "9999", access_mode "2"');

・INSERT

select spider_direct_sql('1¥t+¥t3¥t503¥tr¥t2011-09-06 18:30:00','','host "localhost", port "9999", access_mode "2"');

・SELECT (tmp_tというテンポラリテーブルに結果を格納する)

select spider_direct_sql('1¥t=¥t1¥t503¥t3¥t0','tmp_t', 'host "localhost", port "9999", access_mode "2"');

・UPDATE

select spider_direct_sql('1¥t=¥t1¥t503¥t1¥t0¥tU¥t500¥tq¥t2011-09-06 19:40:00','','host "localhost", port "9999", access_mode "2"');

・DELETE

select spider_direct_sql('1¥t=¥t1¥t500¥t1¥t0¥tD','','host "localhost", port "9999", access_mode "2"');

Page 23: hs_spider_hs_something_20110906

spider_direct_sql()でhandlersocketを呼び出せるようにしてみた

この機能は、Spider 2.27から

利用可能になります。

Page 24: hs_spider_hs_something_20110906

「Spider」と「handlersocket」に関する今後の活動予定

Page 25: hs_spider_hs_something_20110906

Spiderとhandlersocketに関する今後の活動予定

・handlersocketバンドル版MySQLのhandlersocket最新化

・Spider側へのhandlersocket新機能への対応

・handlersocketの全文検索対応

など。

Page 26: hs_spider_hs_something_20110906

handlersocketバンドル版MySQLのhandlersocket最新化

handlersocketは、そのままだと別でコンパイルしてinstallすることは

できるのですが、MySQLのソースコードにバンドルしてコンパイルは

できないので、それができるように、加えてSpiderなどInnoDB

以外のストレージエンジンでもいい感じに動くようにMySQLに

パッチを当てつつ手直しして、バンドルしています。

このため、今バンドルされているhandlersocketは、今年の4月

ぐらいのものになっているので、これを最新化します。

Page 27: hs_spider_hs_something_20110906

Spider側へのhandlersocket新機能への対応

handlersocketは、更新を行った際に更新対象のレコードを

検索結果のように返すことができるようになっていたり、

インデックス以外の条件で絞り込みを行うフィルタをサポートしたり、

機能追加が積極的に行われています。

Spider経由でhandlersocketを利用する場合も、当然それらの

恩恵を享受できる必要があるため、対応を行います。

Page 28: hs_spider_hs_something_20110906

handlersocketの全文検索対応

handlersocketで全文検索ができれば、それはそれで便利なのでは

ないかということで、計画中です。

handlersocketは独自プロトコルなので、SQLではできないことに

踏み込みやすいという利点があります。

樋口さんには今日相談しますので、話がなくなったらすみません。

Page 29: hs_spider_hs_something_20110906

まとめ

Page 30: hs_spider_hs_something_20110906

Spiderとhandlersocketを組み合わせると ・・・・・

・分散DB環境でhandlersocketが利用できる。

・冗長化機能などのSpiderの機能をhandlersocketに組み合わせることができる。

など、可能性が広がります。

まとめ

Page 31: hs_spider_hs_something_20110906

今後も継続的に開発していきますので、

どうぞよろしくおねがいします。

まとめ

Page 32: hs_spider_hs_something_20110906

http://wild-growth-ja.blogspot.com/

http://spiderformysql.com

Kentoku SHIBA ([email protected])

Any Questions?

Thank you for taking

your time!!