FX.php/APIの違い - レコード検索(2), (3)で作成した2つの検索/一覧PHPを使用し、動作のパフォーマンス・サーバにかかる負荷を比較する。今回はソート指定をおこない、レイアウトに配置するフィールド数を増やしてみた。
今回比較した環境について
レコードの登録や編集と違い、検索処理にはパフォーマンスに影響する要因がいくつかあるのは前回紹介したとおり。今回はレイアウトに配置するフィールドの数を増やし、ソートをおこなった条件で検証をおこなった。動作環境は前回計測時とほとんどおなじ。処理時間が長くなった影響で、アクティビティモニタを使用しないことにした。
FileMakerファイル環境 - A (前回測定環境)
- 総レコード数: 50件
- 1リクエストのレコード取得数: 10件
- レスポンスレイアウトに配置しているフィールド数: 9
- 計算・集計フィールドの有無: なし
- ソート指定の有無: なし
FileMakerファイル環境 - B
- 総レコード数: 50件
- 1リクエストのレコード取得数: 10件
- レスポンスレイアウトに配置しているフィールド数: 9
- 計算・集計フィールドの有無: なし
- ソート指定の有無: あり
FileMakerファイル環境 - C
- 総レコード数: 50件
- 1リクエストのレコード取得数: 10件
- レスポンスレイアウトに配置しているフィールド数: 26
- 計算・集計フィールドの有無: あり
- ソート指定の有無: あり
クライアントPCからApache JMeterを使用し、(2), (3)で作成したfx_find.phpとapi_find.phpにアクセス、応答速度などを計測する。
- 同時使用ユーザ数(スレッド数): 10, 20, 30, 40, 50
- リクエスト回数: 1回
- ループ数: 100
サーバマシンのユーザプロセスによるCPU使用率 (iostat)
iostat(8)の結果よりユーザプロセスによるCPU使用率を抜きだし、グラフ化した。
クライアントPCパフォーマンス - fx_find.php - 環境B
同時使用ユーザ数 | 総リクエスト数 | Average[ms] | Min[ms] | Max[ms] | Std. Dev. | Throughput/sec | KB/sec | Time |
---|---|---|---|---|---|---|---|---|
10 | 1,000 | 402 | 66 | 932 | 75.26 | 24.1 | 96.6 | 00:41.28 |
20 | 2,000 | 808 | 68 | 16272 | 1064.41 | 22.7 | 91.01 | 01:27.98 |
30 | 3,000 | 1265 | 68 | 8642 | 512.12 | 23 | 92.29 | 02:10.33 |
40 | 4,000 | 1634 | 67 | 23737 | 1471.83 | 23.1 | 92.53 | 02:53.44 |
50 | 5,000 | 2147 | 68 | 4807 | 628.36 | 22.7 | 91.27 | 03:39.82 |
平均 | 1251.2 | 67.4 | 10878 | 750.4 | 23.12 | 92.74 |
クライアントPCパフォーマンス - fx_find.php - 環境C
同時使用ユーザ数 | 総リクエスト数 | Average[ms] | Min[ms] | Max[ms] | Std. Dev. | Throughput/sec | KB/sec | Time |
---|---|---|---|---|---|---|---|---|
10 | 1,000 | 1404 | 135 | 3088 | 497.79 | 7 | 59.3 | 02:22.23 |
20 | 2,000 | 2812 | 131 | 18122 | 1447.76 | 6.8 | 57.4 | 04:54.07 |
30 | 3,000 | 4316 | 197 | 22737 | 2088.6 | 6.6 | 55.69 | 07:34.76 |
40 | 4,000 | 5737 | 147 | 26306 | 2261.16 | 6.8 | 57.37 | 09:48.59 |
50 | 5,000 | 7188 | 348 | 34000 | 3298.02 | 6.7 | 57.01 | 12:20.30 |
平均 | 4291.4 | 191.6 | 20850.6 | 1918.67 | 6.78 | 57.35 |
クライアントPCパフォーマンス - api_find.php - 環境B
同時使用ユーザ数 | 総リクエスト数 | Average[ms] | Min[ms] | Max[ms] | Std. Dev. | Throughput/sec | KB/sec | Time |
---|---|---|---|---|---|---|---|---|
10 | 1,000 | 522 | 91 | 2643 | 118.67 | 18.6 | 75.05 | 00:53.54 |
20 | 2,000 | 1018 | 101 | 16872 | 1296.28 | 18.1 | 72.96 | 01:50.52 |
30 | 3,000 | 1581 | 128 | 17741 | 1373.35 | 18.1 | 72.93 | 02:45.96 |
40 | 4,000 | 2154 | 136 | 24580 | 1449.95 | 17.7 | 71.4 | 03:45.91 |
50 | 5,000 | 2728 | 90 | 31025 | 2134.36 | 17.5 | 70.58 | 04:36.77 |
平均 | 1600.6 | 109.2 | 18572.2 | 1274.52 | 18 | 72.58 |
クライアントPCパフォーマンス - api_find.php - 環境C
同時使用ユーザ数 | 総リクエスト数 | Average[ms] | Min[ms] | Max[ms] | Std. Dev. | Throughput/sec | KB/sec | Time |
---|---|---|---|---|---|---|---|---|
10 | 1,000 | 1478 | 172 | 3702 | 433.83 | 6.7 | 56.56 | 02:29.76 |
20 | 2,000 | 3128 | 174 | 12960 | 1252.33 | 6.3 | 53.41 | 05:17.33 |
30 | 3,000 | 4548 | 175 | 12578 | 134.81 | 6.5 | 55.05 | 07:41.98 |
40 | 4,000 | 5992 | 211 | 30358 | 2611.92 | 6.5 | 55.21 | 10:14.26 |
50 | 5,000 | 7872 | 170 | 30575 | 2930.58 | 6.2 | 52.65 | 13:25.21 |
平均 | 4603.6 | 180.4 | 18034.6 | 1472.69 | 6.44 | 54.58 |
レコードが少ない環境下でのまとめ
総レコード・一度に取得するレコードが少ない場合は、ソートの有無はパフォーマンスにさほど影響を与えない結果となった。パフォーマンスに著しい影響を与えたのは、配置フィールド数が多い、かつ、非保存の計算フィールドが配置された場合。BとCを比較するとFX.phpは約3.5倍、FileMaker API for PHPは約2.9倍。AとCを比較すると、FX.phpは約3.8倍、FileMaker API for PHPは約3.1倍ものパフォーマンス差が出ていることがわかる。
FX.phpはFileMaker API for PHPと比較すると機能がシンプルな分高速。しかしこの恩恵は、レイアウトに配置しているフィールドを最適化することではじめて受けることができる。環境Aの場合、FX.phpはFileMaker API for PHPより約1.3~1.5倍高速に動作している。しかし環境Cの場合、最大でも1.1倍ほどのパフォーマンス差しか表れなかった。逆に言えば、レイアウトに配置しているフィールドを最適化していなければFX.php・APIどちらを採用していても遅いWebアプリが出来上がるということだ。
サーバにかかる負荷はやはり多機能な分、FileMaker API for PHPの方が分が悪いようだ。環境CはFX.php・FileMaker API for PHPの処理時間に差はあまりないものの、CPU負荷率は全3パターンの環境においてAPIがFX.php処理時の負荷を上回る結果となっている。
FileMakerなWebアプリにおいて、まず真っ先に注目したいのは「その処理に適切なレイアウトが指定されているかどうか」だ。FX.php/FileMaker API for PHPどちらでも、レイアウトの指定や構成を改善した場合、そのWebアプリは最高で3-4倍高速化する可能性がある。バックナンバー「スピードアップのための徹底チューニング」を参考に、高速化をはかってみてほしい。