20
HandlerSocket plugin Client for Java

HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

HandlerSocket pluginClient for Java

Page 2: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

HandlerSocketとはMySQL plugin機能(5.1から対応)を用いたplugin実装の一つ

Handlerを直接操作することで制約とのトレードオフで高パフォーマンスを実現

独自バイナリプロトコルで送受信データサイズを削減。

複数コマンド(≒SQL)の一括実行が可能。

Page 3: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

HandlerSocketとは

http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL

Page 4: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

HandlerSocketとは

http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html より図引用

Page 6: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

HandlerSocket plugin Client for Java

純正のクライアント実装はC/Perlのみ

なのでJava版も作りました。(Pure Java)

http://code.google.com/p/handlersocketforjava/

ただし未検証事項が多くバグがかなり残っている可能性が高いです。

とりあえず動きます。

Page 7: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

HandlerSocket plugin Client for Java

http://code.google.com/p/handlersocketforjava/

Page 8: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

HandlerSocket plugin Client for Java

クラスは2つのみ(HandlerSocket/HandlerSocketResult)

features.

リクエスト/レスポンスデータの型マッピング機構(今は全て文字列として扱ってる)

ソケット処理部分の最適化

Commons-poolへの対応?

Page 9: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

Benchmark

Javaクライアントを用いて性能試験を実施

条件

10,000件のデータについてCRUD操作のQPSを測定。

MyISAM/InnoDB

bulk処理-100件(HandlerSocket) /

1件づつ(HandlerSocket/JDBC)

1~32の並列スレッド動作で実施

Page 10: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

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

Page 11: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

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

Page 12: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

Benchmark(select)

0

10000

20000

30000

40000

1 2 4 8 16 32

QPS

スレッド

HandlerSocket-MyISAM(bulk100)HandlerSocket-InnoDB(bulk100)JDBC-MyISAMJDBC-InnoDB

Page 13: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

Benchmark(select)

0

1000

2000

3000

4000

1 2 4 8 16 32

QPS

スレッド

HandlerSocket-MyISAM(single)HandlerSocket-InnoDB(single)JDBC-MyISAMJDBC-InnoDB

Page 14: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

Benchmark(insert)

0

7500

15000

22500

30000

1 2 4 8 16 32

QPS

スレッド

HandlerSocket-MyISAM(bulk100)HandlerSocket-InnoDB(bulk100)JDBC-MyISAMJDBC-InnoDB

Page 15: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

Benchmark(insert)

0

750

1500

2250

3000

1 2 4 8 16 32

QPS

スレッド

HandlerSocket-MyISAM(single)HandlerSocket-InnoDB(single)JDBC-MyISAMJDBC-InnoDB

Page 16: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

Benchmark(update)

0

7500

15000

22500

30000

1 2 4 8 16 32

QPS

スレッド

HandlerSocket-MyISAM(bulk100)HandlerSocket-InnoDB(bulk100)JDBC-MyISAMJDBC-InnoDB

Page 17: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

Benchmark(update)

0

750

1500

2250

3000

1 2 4 8 16 32

QPS

スレッド

HandlerSocket-MyISAM(single)HandlerSocket-InnoDB(single)JDBC-MyISAMJDBC-InnoDB

Page 18: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

Benchmark(delete)

0

7500

15000

22500

30000

1 2 4 8 16 32

QPS

スレッド

HandlerSocket-MyISAM(bulk100)HandlerSocket-InnoDB(bulk100)JDBC-MyISAMJDBC-InnoDB

Page 19: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

Benchmark(delete)

0

750

1500

2250

3000

1 2 4 8 16 32

QPS

スレッド

HandlerSocket-MyISAM(single)HandlerSocket-InnoDB(single)JDBC-MyISAMJDBC-InnoDB

Page 20: HandlerSocket plugin Client for Javaとそれを用いたベンチマーク

ざっくりとした所感基本性能は高い

bulk処理は非常に有効

あとは仕様上の制約といかに上手くつきあっていくか。