前回作成した2つのレコードを作成するPHPを使用し、動作のパフォーマンス・サーバにかかる負荷を比較する。
2つのFileMaker Web公開について
測定前に予備知識として、FX.phpが利用するWeb公開と、FileMaker API for PHPが利用するWeb公開は異なるということを挙げておこう。FX.phpはデータのやり取りにFMPXMLRESULT文法のXMLを使用し、FileMaker API for PHPはfmresultset文法のXMLを使用する。
FMPXMLRESULT文法について - fms10_cwp_xslt_ja.pdf より引用
FMPXMLRESULT および FMPXMLLAYOUT:XML データにアクセスしたり、XSLT スタイルシートを使用するに は、FMPXMLRESULT および FMPXMLLAYOUT 文法も Web 公開エンジンとともに使用できます。XML エクスポートとカスタム Web 公開の両方に1つのスタイルシートを使用するには、FMPXMLRESULT 文法を使用する必要があります。レイアウト内の値一覧およびフィールド表示情報にアクセスするには、FMPXMLLAYOUT 文法を使用する必要があります。
fmresultset文法について - fms10_cwp_xslt_ja.pdf より引用
fmresultset:Web 公開エンジンには、この文法を使用することをお勧めします。この文法は、柔軟で XSLT スタイル シートオーサリングに最適化されており、名前によるフィールドアクセスや、関連セット(ポータル)データの操作をより簡単に行うことができます。また、この文法は、グローバル格納オプションや、集計および計算フィールドの識別など、FileMaker の用語や機能とより直接的なつながりを持ちます。この文法は、XML データへのアクセスと XSLT スタイルシートに使用できます。Web 公開を効率的に実行できるよう、この文法は、FMPXMLRESULT 文法よりも詳細になるように設計されています。
FX.phpはhttp://<ホスト>[:<ポート番号>]/fmi/xml/FMPXMLRESULT.xml(XML公開)に、FileMaker API for PHPはhttp://<ホスト>[:<ポート番号>]/fmi/xml/fmresultset.xml(PHP公開)にリクエストを発行する。基本的にFileMaker API for PHPが使用するfmresultset文法の方が取得する情報量が多く、多機能だ。その分、サーバにかかる負荷もFMPXMLRESULTと比較すると大きい。
FX.php/APIでのパフォーマンス測定
ここでの動作環境は次のとおり。
サーバPC (FileMaker Server)
- OS: Mac OS X 10.6.2
- CPU: 2GHz Intel Core 2 Duo
- メモリ: 6G
- FileMaker Server: 10.0.2.206
- 負荷測定: アクティビティモニタ
クライアントPC
- OS: Ubuntu 9.10
- CPU: 2GHz Intel Atom CPU Z550
- メモリ: 2G
- 負荷測定: Apache JMeter 2.3.4
クライアントPCからApache JMeterを使用し、前回作成したfx_new.phpとapi_new_1.phpにアクセス。応答速度やスループット値を計測する。
- 同時使用ユーザ数(スレッド数); 10, 20, 30, 40, 50
- リクエスト回数: 1回
- ループ数: 100
1回のテストでfx_new.phpとapi_new_1.phpにそれぞれ1,000~5,000回、個別にアクセスして結果を解析。サーバPC側ではアクティビティモニタを監視し、CPU使用率を監視した。結果は次のとおり。
サーバマシンのCPU使用率
それぞれ左がfx_new.php (FX.php)、右がapi_new_1.php (FileMaker API for PHP)の負荷となっている。
CPU使用率は同時使用ユーザ数が10の場合はfx_new.phpが最大40%、api_new_1.phpが最大90%前後だった。同時使用ユーザ数が20以降の場合、fx_new.phpは最大90-100%、api_new.phpが最大100-120%といったところ。
クライアントPCパフォーマンス - fx_new.php
同時使用ユーザ数 | 総リクエスト数 | Average[ms] | Min[ms] | Max[ms] | Std. Dev. | Throughput/sec | KB/sec | Time[ms] |
---|---|---|---|---|---|---|---|---|
10 | 1,000 | 193 | 35 | 7544 | 547.49 | 43.0 | 20.8 | 63202 |
20 | 2,000 | 410 | 36 | 16323 | 1170.17 | 40.5 | 19.57 | 89402 |
30 | 3,000 | 846 | 34 | 27252 | 2957.63 | 31.0 | 15.03 | 136550 |
40 | 4,000 | 998 | 35 | 31474 | 3477.46 | 34.3 | 16.62 | 196515 |
50 | 5,000 | 1213 | 35 | 54972 | 4775.98 | 33.0 | 16.41 | 267536 |
平均 | 732 | 35 | 27513 | 2585.75 | 36.54 | 17.69 |
クライアントPCパフォーマンス - api_new\_1.php
同時使用ユーザ数 | 総リクエスト数 | Average[ms] | Min[ms] | Max[ms] | Std. Dev. | Throughput/sec | KB/sec | Time[ms] |
---|---|---|---|---|---|---|---|---|
10 | 1,000 | 411 | 68 | 5393 | 253.31 | 22.8 | 11.11 | 83696 |
20 | 2,000 | 791 | 68 | 16623 | 1483.95 | 22.1 | 10.76 | 170434 |
30 | 3,000 | 1394 | 67 | 38194 | 3351.41 | 19.5 | 9.48 | 234099 |
40 | 4,000 | 1671 | 67 | 38895 | 3652.72 | 21 | 10.24 | 320285 |
50 | 5,000 | 2283 | 79 | 63898 | 4816.25 | 19.8 | 9.65 | 412290 |
平均 | 1310 | 69.8 | 32600 | 2711.53 | 21.04 | 10.25 |
同時使用ユーザ数が10の場合は顕著な差は見られない。だが20ユーザ以降の場合は、かなりの差が出た結果となった。注目したい値はAverage(平均処理時間)とTime(処理完了までの時間)。同時使用ユーザ数が20以降、fx_new.phpとapi_new_1.phpでは1.5~2倍近いパフォーマンス差がでていることがわかる。レコード新規登録という簡単な処理だが、この差は軽視できないものだろう。同時ユーザ数があらかじめ多いと見込めている場合で処理を速くしたい場合は、FX.phpを使った実装の方が良いかもしれない。
なお、この辺りの処理についてはFileMaker Server 11にて改善されている可能性もある。まだ日本ではリリースされていないが、英語版のFileMaker Server 11を持っている方はぜひこれらの負荷測定を試してみてほしい。