2014年02月12日

MySQL の Async API 使って思いクエリを並列処理したら早いかと思ったらそうでも無い風味。
Web アプリの時のように、クライアント側の並列度があがれば差が縮まる感じだけどそうでもない。

ある程度重いクエリの想定で SELECT SLEEP(0.05) とか投げてみたけどやっぱり普通に使った方が早い。
Async API 使うのにコストがかかるのかな、と思って IO::Select 使ってみたらかなり早くなったので AnyEvent がわりとボトルネックっぽい。
とは言え微妙な誤差ではあるので、普通に DBI 使ってればいい気がしてきた。

perl 5.18.2
DBI 1.63
DBD::mysql 4.025
AnyEvent 7.07
IO::Select 1.21

async-mysql-ioselect.pl が全入りベンチ(思考回数少なめ)
async-mysql.pl は IO::Select 使う前に数回ベンチとったやつ。

async-mysql-ioselect.plを10倍ループ回したのは以下のとおりだった。

1 process
Rate Async-Serial Async-Parallel Normal IO-Select
Async-Serial 559/s -- -4% -15% -17%
Async-Parallel 583/s 4% -- -11% -14%
Normal 656/s 17% 12% -- -3%
IO-Select 676/s 21% 16% 3% --
8 process
Rate Async-Parallel Async-Serial Normal IO-Select
Async-Parallel 17.0/s -- -0% -7% -13%
Async-Serial 17.1/s 0% -- -7% -13%
Normal 18.4/s 8% 8% -- -6%
IO-Select 19.6/s 15% 15% 6% --

Posted by Yappo at 2014年02月12日 20:33 | TrackBack | Perl
Comments
Post a comment









Remember personal info?






コメントを投稿する前に↓の場所にnospamと入力してください。