hs_spider_hs_something_20110906
DESCRIPTION
handlersocket with spiderTRANSCRIPT
handlersocket – Spider –- handlersocket – InnoDBなど
斯波健徳kentokushiba[at]gmail[dot]com
Spiderストレージエンジンとは
Spiderストレージエンジンとは?
Spiderストレージエンジンとは、MySQLのストレージ
エンジンの1種で、複数のデータベースサーバにある
テーブルを束ねて、1つのテーブルとして利用することを
可能にします。
これは、クラウド環境においては、増え続けるデータを、
サーバをどんどん増やしながら分割して管理する
ために利用することができます。
MySQLと同じく、GPLライセンスで公開しています。
Spiderを利用した構成例
アプリケーションはSpiderの入ったMySQLに
SQL(参照/更新)を実行すると、Spiderが透過的に
後ろにあるデータノードにアクセスして結果を返します。
AP
DB
DB
AP
DB
DB
LB
Spiderを利用した構成例
トラフィックが増えたり、データが増えたりした場合は、
このようにサーバを追加して、負荷分散を行います。
AP
DB
DB
AP
DB
DB
LB
AP
DB
DB
AP
DB
DB
「Spider」と「handlersocket」
Spider経由で、分散環境のhandlersocketにアクセスできる
handlersocketインターフェースからSpiderテーブルを
利用すると、Spiderがデータノードにアクセスする際にも
handlersocketインターフェースでアクセスします。
(use_hs_read、use_hs_writeを1に設定してください)
※テーブルパーティショニングを利用しているSpiderテーブルに、
offset、limit付きの更新をした場合など、設定に関わらず
SQLでのアクセスとなるケースもあります。
Spider経由で、分散環境のhandlersocketにアクセスできる
データノードがhandlersocketに対応していない場合は、
use_hs_read、use_hs_writeを0に設定することで、
データノードへのアクセスをSQLにすることができます。
(テーブル単位で設定可能)
アプリケーションからDB(Spiderノード)へのアクセス
アプリケーションはSpiderの入ったMySQLの
handlersocketインターフェースにアクセス。
AP
DB
DB
AP
DB
DB
LB
Spiderからデータノードへのアクセス
SpiderはデータノードのMySQLの
Handlersocketインターフェースにアクセス。
AP
DB
DB
AP
DB
DB
LB
「Spider」と「handlersocket」を組み合わせると何がいいのか?
Spiderとhandlersocketを組み合わせると何がいいのか?
・handlersocketを分散環境で利用できる。
スケールアウトで、メモリやCPUリソースを拡張できる。
・handlersocketアクセスとSQLアクセスで、見ているデータが
同じなので、データ矛盾が発生しない。
・冗長化機能など、Spiderの機能を合わせて利用できる。
Spiderとhandlersocketを組み合わせると何がいいのか?
・handlersocketアクセスとSQLアクセスで、テーブルの
分散ルールを統一することができる。
・テーブルによってデータノードへのアクセスをhandlersocket
アクセスかSQLアクセスかを選択できるので、テーブルによって
SQLアクセスを選択し、データノードにトリガを仕掛けるなど、
柔軟性の高い利用が可能。
・更新が並列化できる。
1サーバに複数MySQLインスタンスを立てる。
「handlersocket」にオプションを追加してみた
handlersocketにオプションを追加してみた
・handlersocket_support_merge_table
1を設定すると、handlersocketでmerge_myisam、vpのテーブルを
利用できるようになる。
ただし、テーブルオープンのコストが少し増える。
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のアクセス先)でバイナリログを残すことは可能です。
handlersocketにオプションを追加してみた
・handlersocket_unlimited_boundary
limitを無制限とみなす閾値です。
テーブルパーティショニングを利用しているテーブルで
direct_update_modeを利用するために必要になります。
handlersocketにオプションを追加してみた
・handlersocket_bulk_insert
handlersocketに対して行われるinsertを、bulk insertとして
まとめてinsertするオプション。
複数ユーザからのinsertもbulk insertになるという特徴があり、
単一行のinsertをマルチスレッドで行うようなアプリケーションの
insertの高速化に威力を発揮する。(特にSpider)
0:bulk insertを実施せず、1レコードずつのinsertを行います。
1-:指定された値を超えるレコードが蓄積されると、bulk insertが実施されます。
handlersocketにオプションを追加してみた
・handlersocket_bulk_insert_timeout
handlersocket_bulk_insertのレコード数に達しない状態でも、
bulk insertを実施する最大待機時間。(秒)
「spider_direct_sql()」で「handlersocket」を
呼び出せるようにしてみた
spider_direct_sql()でhandlersocketを呼び出せるようにしてみた
spider_direct_sql()は、Spiderストレージエンジンのインストール
スクリプトを実行すると利用可能になるUDFです。
SQLインターフェースから、他のサーバへ直接SQLを実行し
結果をテンポラリテーブルへ格納することができます。
この、spider_direct_sql()でhandlersocketを呼び出せるように
してみました。
spider_direct_sql()でhandlersocketを呼び出す場合、
性能的なメリットは、工夫した使い方をしないとあまりないと
思いますが、お手軽にhandlersocketを利用することが
可能になるかと思います。性能を出すためのポイント:spider_direct_sql()側では、テンポラリテーブルへの
格納のオーバーヘッドがありますが、
handlersocket側の性能は変わりません。
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"');
spider_direct_sql()でhandlersocketを呼び出せるようにしてみた
この機能は、Spider 2.27から
利用可能になります。
「Spider」と「handlersocket」に関する今後の活動予定
Spiderとhandlersocketに関する今後の活動予定
・handlersocketバンドル版MySQLのhandlersocket最新化
・Spider側へのhandlersocket新機能への対応
・handlersocketの全文検索対応
など。
handlersocketバンドル版MySQLのhandlersocket最新化
handlersocketは、そのままだと別でコンパイルしてinstallすることは
できるのですが、MySQLのソースコードにバンドルしてコンパイルは
できないので、それができるように、加えてSpiderなどInnoDB
以外のストレージエンジンでもいい感じに動くようにMySQLに
パッチを当てつつ手直しして、バンドルしています。
このため、今バンドルされているhandlersocketは、今年の4月
ぐらいのものになっているので、これを最新化します。
Spider側へのhandlersocket新機能への対応
handlersocketは、更新を行った際に更新対象のレコードを
検索結果のように返すことができるようになっていたり、
インデックス以外の条件で絞り込みを行うフィルタをサポートしたり、
機能追加が積極的に行われています。
Spider経由でhandlersocketを利用する場合も、当然それらの
恩恵を享受できる必要があるため、対応を行います。
handlersocketの全文検索対応
handlersocketで全文検索ができれば、それはそれで便利なのでは
ないかということで、計画中です。
handlersocketは独自プロトコルなので、SQLではできないことに
踏み込みやすいという利点があります。
樋口さんには今日相談しますので、話がなくなったらすみません。
まとめ
Spiderとhandlersocketを組み合わせると ・・・・・
・分散DB環境でhandlersocketが利用できる。
・冗長化機能などのSpiderの機能をhandlersocketに組み合わせることができる。
など、可能性が広がります。
まとめ
今後も継続的に開発していきますので、
どうぞよろしくおねがいします。
まとめ
http://wild-growth-ja.blogspot.com/
http://spiderformysql.com
Kentoku SHIBA ([email protected])
Any Questions?
Thank you for taking
your time!!