HandlerSocket pluginClient for Java
HandlerSocketとはMySQL plugin機能(5.1から対応)を用いたplugin実装の一つ
Handlerを直接操作することで制約とのトレードオフで高パフォーマンスを実現
独自バイナリプロトコルで送受信データサイズを削減。
複数コマンド(≒SQL)の一括実行が可能。
HandlerSocketとは
http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL
HandlerSocketとは
http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html より図引用
HandlerSocketとは情報源
http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL
http://www.slideshare.net/akirahiguchi/handlersocket-plugin-for-mysql-4664154
http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html
など
HandlerSocket plugin Client for Java
純正のクライアント実装はC/Perlのみ
なのでJava版も作りました。(Pure Java)
http://code.google.com/p/handlersocketforjava/
ただし未検証事項が多くバグがかなり残っている可能性が高いです。
とりあえず動きます。
HandlerSocket plugin Client for Java
http://code.google.com/p/handlersocketforjava/
HandlerSocket plugin Client for Java
クラスは2つのみ(HandlerSocket/HandlerSocketResult)
features.
リクエスト/レスポンスデータの型マッピング機構(今は全て文字列として扱ってる)
ソケット処理部分の最適化
Commons-poolへの対応?
Benchmark
Javaクライアントを用いて性能試験を実施
条件
10,000件のデータについてCRUD操作のQPSを測定。
MyISAM/InnoDB
bulk処理-100件(HandlerSocket) /
1件づつ(HandlerSocket/JDBC)
1~32の並列スレッド動作で実施
Benchmark
クライアント動作環境
Macbook Pro(2.66GHz Core2Duo/4GB memory)
HandlerSocket plugin Client for Java(自作)
サーバー動作環境
KBM上CentOs 5.5(2.2GHz 2Core/4GB memory)
MySQL 5.1.50
HandlerSocket plugin
Benchmark
Benchmark用table構成
MyISAM/InnoDBとも以下の構成
Field Type Null Key Default
uuid int no pri null
id varchar no uni null
json varchar no null
created datetime yes null
updated datetime yes null
deleted int yes mul 0
Benchmark(select)
0
10000
20000
30000
40000
1 2 4 8 16 32
QPS
スレッド
HandlerSocket-MyISAM(bulk100)HandlerSocket-InnoDB(bulk100)JDBC-MyISAMJDBC-InnoDB
Benchmark(select)
0
1000
2000
3000
4000
1 2 4 8 16 32
QPS
スレッド
HandlerSocket-MyISAM(single)HandlerSocket-InnoDB(single)JDBC-MyISAMJDBC-InnoDB
Benchmark(insert)
0
7500
15000
22500
30000
1 2 4 8 16 32
QPS
スレッド
HandlerSocket-MyISAM(bulk100)HandlerSocket-InnoDB(bulk100)JDBC-MyISAMJDBC-InnoDB
Benchmark(insert)
0
750
1500
2250
3000
1 2 4 8 16 32
QPS
スレッド
HandlerSocket-MyISAM(single)HandlerSocket-InnoDB(single)JDBC-MyISAMJDBC-InnoDB
Benchmark(update)
0
7500
15000
22500
30000
1 2 4 8 16 32
QPS
スレッド
HandlerSocket-MyISAM(bulk100)HandlerSocket-InnoDB(bulk100)JDBC-MyISAMJDBC-InnoDB
Benchmark(update)
0
750
1500
2250
3000
1 2 4 8 16 32
QPS
スレッド
HandlerSocket-MyISAM(single)HandlerSocket-InnoDB(single)JDBC-MyISAMJDBC-InnoDB
Benchmark(delete)
0
7500
15000
22500
30000
1 2 4 8 16 32
QPS
スレッド
HandlerSocket-MyISAM(bulk100)HandlerSocket-InnoDB(bulk100)JDBC-MyISAMJDBC-InnoDB
Benchmark(delete)
0
750
1500
2250
3000
1 2 4 8 16 32
QPS
スレッド
HandlerSocket-MyISAM(single)HandlerSocket-InnoDB(single)JDBC-MyISAMJDBC-InnoDB
ざっくりとした所感基本性能は高い
bulk処理は非常に有効
あとは仕様上の制約といかに上手くつきあっていくか。