DjangoとRhacoのベンチをWorkStyleで実施
2006年04月14日(金) 11:24
細かな実装は違うけど、WorkStyleはDjango版とRhaco版の両方があるので、ベンチにはちょうどいい。
実施はWorkStyleのタスク詳細表示ページを使用した(Django/Rhaco版共に3回のSQLを投げているはず)。
せっかくなのでJava版(velocity+struts+torque+derby)もやってみた。Java版は完全に違う実装になってしまっているし、DBもPostgreSQLじゃなくってderbyなので参考値。残るはRails版なんだけど? 結果は、下記の通り。むぅ
Rhaco作者からの要望により、ionCubeを入れて試してみた。確かに簡単に数割早くなる。
さらに、turck-mmcacheの後継であるEAcceleratorも試してみた。メモリのみ使用+スクリプト更新チェックしないの最速設定。Javaは抜いたね。
| フレームワーク | キャッシュ | リクエスト回数 | 同時アクセス | request/sec |
|---|---|---|---|---|
| Rhaco | off | 1000 | 10 | 5.69 |
| Django | off | 1000 | 10 | 20.17 |
| Rhaco | on | 1000 | 10 | 9.84 |
| Rhaco | on+ionCube | 1000 | 10 | 12.36 |
| Rhaco | on+EAccelerator | 1000 | 10 | 17.22 |
| Django | on | 1000 | 10 | 248.45 |
| Java | - | 1000 | 10 | 15.72 |
| Rhaco | off | 10000 | 100 | 5.75 |
| Django | off | 10000 | 100 | 18.98 |
| Rhaco | on | 10000 | 100 | 9.25 |
| Django | on | 10000 | 100 | 271.11 |
| Java | - | 10000 | 100 | 14.37 |
#Djangoのキャッシュはレスポンス自体をメモリ上にキャッシュ。最速のmemcachedは面倒なのでlocmem使用
RhacoのベンチにionCube使用版を追加。
ionCubeは無料でダウンロード可能。php.iniでモジュールのパスを指定するだけで数割速くなる(配布時にコンパイル済みなのでglibc2のlinuxか限られたOS+php4限定)。かなり素敵。他の言語のようにバイトコードをメモリ上にキャッシュするので高速化される模様。
Comments
[2006年04月15日(土) 01:51]
lifree
request/secって1秒間に発行されたリクエスト回数だよね?
随分おそいなぁrhaco。
キャッシュしたら2倍にはなるんだ。それでもJavaにすら負けるのかぁ・・・・。
memcashいれて、Zend Optimizerでもいれてメモリキャッシュ使いまくらないと駄目かなぁ・・
DBを使わない部分だけでの比較もしてみてほしいね。
[2006年04月15日(土) 08:59]
makoto
req・・は1秒間に処理した回数だね。
ionCubeはphpの良さをあまり殺さず、しかも簡単にインストール&高速化できるのでマジでphp使う場合には必須だね。
一つのファイルでリクエストを受け付けるのがばからしいphpとしては、memcached使う場合は事前に設計して作り出さないとまずいね。
DBを使わない部分の比較はあまり意味がない(フレームワークのボトルネック切り分けには有効だろうけど)。
Javaが30倍速いってのは、きっと単純なループをさせた場合だろうから、気にしなくてイイと思う。
DBコネクション周りはJavaとかPythonは、DBだけ再起動されるとアプリがこけることがあるから、こけないphpのコネクション取得動作が多少遅くても思想の問題だからけちをつける所でもないしなぁ。
Rhacoで動作時にXMLを見てる所とかないよね?
フレームワークの内部ではセッタ・ゲッタ使わないとかもありかもしれない。
[2006年04月15日(土) 10:38]
lifree
XMLって設定のXMLって事かな?
それなら使ってないけど、テンプレート作成時にはXML解析してるけど、まぁ一回だけか。
セッタ・ゲッタを使わないってのは理想なんだけど、PHP4の場合にメソッドにしてないと変数の存在が見えなかったりするから、どうしたもんかと。(初期化してないとクラス変数が見えない)
PHP5専用にしてしまえば、きっと少し早くなるとは思うけど、それじゃ思想とずれちゃうしね。
[2006年04月15日(土) 10:57]
makoto
テンプレート作成時とかの初回コンパイル時間は何の問題にもならないから、あとのネックはphpの言語的な物かな?
EAcceleratorを使えば現実的な数字なんじゃないかな。
動作させたままWebインターフェースでキャッシュクリアとか出来るっぽいし、かなり速い。
(DjangoでPSYCOを使った場合の数字とかにも興味があるけど、wsgiモードで起動する元気がない。。phpのionCube並には効きそうな気がするんだけどね。)
Trackbacks
[2006年04月15日(土) 02:06] LiFREE
