FX.php/APIの違い - レコード検索(2), (3)で作成した2つの検索/一覧PHPを使用し、動作のパフォーマンス・サーバにかかる負荷を比較する。今回はレコード総数を5,000件に増やした上で、最大レコード取得数を調整した結果を検証する。

今回比較した環境について

前回はレイアウトに配置するフィールドの数を増やし、ソートをおこなった条件で検証をおこなった。クライアントの表示までの表示速度、およびサーバにかかる負荷ともにFileMaker API for PHPの方が大きいことがわかっていただけたと思う。今回からはクライアント側のパフォーマンスに注目して検証をおこなってみよう。レコード数を若干増やし、1リクエストのレコード取得数を調整した。

FileMakerファイル環境 - D~H 共通

  • 総レコード数: 5,000件
  • レスポンスレイアウトに配置しているフィールド数: 9
  • 計算・集計フィールドの有無: なし
  • ソート指定の有無: なし

FileMakerファイル環境 - D

  • 1リクエストのレコード取得数: 10件

FileMakerファイル環境 - E

  • 1リクエストのレコード取得数: 20件

FileMakerファイル環境 - F

  • 1リクエストのレコード取得数: 30件

FileMakerファイル環境 - G

  • 1リクエストのレコード取得数: 40件

FileMakerファイル環境 - H

  • 1リクエストのレコード取得数: 50件

レコード総数を5,000件とし、レコード取得数($max)を10件ずつ増やしていった。なお、FileMaker Web公開ではこの数値をとくに指定しなかった場合は50件取得するようになっている。

これまで同様クライアントPCからApache JMeterを使用し、(2), (3)で作成したfx_find.phpとapi_find.phpにアクセス、応答速度などを計測する。

  • 同時使用ユーザ数(スレッド数): 10, 20, 30, 40, 50
  • リクエスト回数: 1回
  • ループ数: 100

クライアントPCパフォーマンス - fx_find.php - 環境D

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 347 66 8186 696.63 24.5 98.58 00:40.77
20 2,000 739 65 14552 1056.87 24.5 98.47 01:21.71
30 3,000 1040 69 24064 1811.14 25.3 102 01:58.35
40 4,000 1409 83 31558 2785.03 24.9 100.42 02:40.29
50 5,000 1853 67 31814 2658.24 24.9 100.31 03:20.63
  平均 1077.6 70 22034.8 1801.58 24.82 99.96  

クライアントPCパフォーマンス - fx_find.php - 環境E

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 588 91 3933 394.65 16.1 97.99 01:01.12
20 2,000 1103 91 16924 1083.9 17 103.06 01:57.68
30 3,000 1753 90 20089 2072.3 16.2 98.26 03:05.18
40 4,000 2098 95 38105 3507.38 17.5 106.15 03:48.48
50 5,000 2618 91 40270 3737.41 17.4 105.63 04:47.13
  平均 1632 91.6 23864.2 2159.13 16.84 102.22  

クライアントPCパフォーマンス - fx_find.php - 環境F

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 700 149 1185 111.04 14 121.41 01:11.46
20 2,000 1594 118 20022 2266.23 11.9 103.66 02:47.60
30 3,000 2100 200 18259 1208.39 13.7 118.72 03:39.48
40 4,000 2959 119 37746 3073.91 12.8 110.93 05:13.34
50 5,000 3477 120 45714 4287.09 13.4 116.28 06:13.69
  平均 2166 141.2 24585.2 2189.33 13.16 114.2  

クライアントPCパフォーマンス - fx_find.php - 環境G

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 880 174 1366 137.55 11.2 131.24 01:29.29
20 2,000 1861 145 19347 2101.58 10.3 120.56 03:14.87
30 3,000 2601 161 15909 949.16 11.2 131.95 04:27.16
40 4,000 3407 144 25715 2033.19 11.1 130.69 05:59.74
50 5,000 4298 161 51360 3826.76 11 129.19 07:34.79
  平均 2609.4 157 22739.4 1809.65 10.96 128.73  

クライアントPCパフォーマンス - fx_find.php - 環境H

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 1110 210 10164 690.23 8.7 129.64 01:53.44
20 2,000 2226 169 19723 2173.85 8.7 129.05 03:50.29
30 3,000 3087 174 21989 1471.33 9.4 140.25 05:18.07
40 4,000 4154 171 40747 3158.41 9.2 137.27 07:13.35
50 5,000 5190 258 47010 3922.88 9.2 137.44 09:00.95
  平均 3153.4 196.4 27926.6 2283.34 9.04 134.73  

クライアントPCパフォーマンス - api_find.php - 環境D

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 479 91 7231 374.09 19.4 78.5
20 2,000 980 90 16707 1225.74 18.9 76.37
30 3,000 1493 91 19995 1803.64 18.6 75.43
40 4,000 1988 90 33222 2698.21 18.7 75.88
50 5,000 2509 88 42747 3545.85 18.5 74.95
  平均 1489.8 90 23980.4 1929.51 18.82 76.23  

クライアントPCパフォーマンス - api_find.php - 環境E

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 789 159 1327 138.28 12.4 75.37 01:20.49
20 2,000 1507 138 15938 1156.26 12.5 76.2 02:39.70
30 3,000 2552 129 26138 2645.13 11.2 68.13 04:28.02
40 4,000 3061 129 40216 3821.18 12.3 75.17 05:23.74
50 5,000 3807 132 49080 4724.56 12.4 75.43 07:43.56
  平均 2343.2 137.4 26539.8 2497.08 12.16 74.06  

クライアントPCパフォーマンス - api_find.php - 環境F

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 1027 188 2005 161.13 9.6 83.54 01:43.91
20 2,000 2090 174 13038 714.75 9.3 81.45 03:33.81
30 3,000 3108 179 23908 1631.01 9.3 81.46 05:20.68
40 4,000 4146 174 37315 2710.98 9.2 80.41 07:13.29
50 5,000 5368 175 48242 4149.93 9 78.24 09:16.73
  平均 3147.8 178 24901.6 1873.56 9.28 81.02  

クライアントPCパフォーマンス - api_find.php - 環境G

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 1360 213 2281 276.89 7.2 85.36 01:52.79
20 2,000 2767 301 11098 940.71 7.1 83.31 04:42.47
30 3,000 4340 348 24481 1387.29 6.7 79.15 07:26.06
40 4,000 6079 241 30455 2344.87 6.4 75.85 10:20.87
50 5,000 8176 263 45929 3657.92 5.9 70.01 14:00.96
  平均 4544.4 273.2 22848.8 1721.54 6.66 78.74  

クライアントPCパフォーマンス - api_find.php - 環境H

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 1789 356 2849 350.79 5.5 82.42 03:00.12
20 2,000 3652 280 11474 1057.82 5.4 80.52 06:09.71
30 3,000 6008 271 21472 1697.86 4.9 73.24 09:59.99
40 4,000 8188 283 31476 2638.7 4.8 71.55 13:52.62
50 5,000 10633 271 56790 3917.99 4.6 68.24 18:11.35
  平均 6054 292.2 24812.2 1932.63 5.04 75.19  

FX.php Average集計表

同時ユーザ数 $max=10 $max=20 $max=30 $max=40 $max=50
10 347 588 700 880 1110
20 739 1103 1594 1861 2226
30 1040 1753 2100 2601 3087
40 1409 2098 2959 3407 4154
50 1853 2618 3477 4298 5190

FileMaker API for PHP Average集計表

同時ユーザ数 $max=10 $max=20 $max=30 $max=40 $max=50
10 479 789 1027 1360 1789
20 980 1507 2090 2767 3652
30 1493 2552 3108 4340 6008
40 1988 3061 4146 6079 8188
50 2509 3807 5368 8176 10633

環境D比較

環境E比較

環境F比較

環境G比較

環境H比較

FX.phpパフォーマンス

FileMaker API for PHPパフォーマンス

FX.php & FileMaker API for PHP両パフォーマンス比較

なおソートをおこなうと1リクエストあたりの応答時間が30秒を越えてしまうため、計測対象外とさせていただいた。

一度に取得するレコードは必要最低限に設定したほうが良い

一度に取得するレコード数を増やせば増やすほど、FX.php・FileMaker API for PHPともに応答速度が長くなることがわかった。同時ユーザ数が10の場合、FX.phpでは10件と50件の場合とでおよそ3.2倍、APIでは3.73倍の時間がかかっている。同時取得レコード数を10件増やすと、FX.phpの場合0.12~0.21秒、APIの場合0.3~0.4秒ごと遅くなっていく。

注目したいのは同時取得件数を40件以上にしたときのパフォーマンスの落ち方だ。とくにAPIの場合、1度に取得するレコード数が10~30件の場合の倍率と、40件~50件の倍率とでは結果に大きな差がある。同時ユーザ数が50の場合、同時取得10件と50件の場合でおよそ4.24倍ものパフォーマンス差がでた。FX.phpと比較した場合、同時取得10~20件の場合はおよそ1.3倍ほどだが、同時取得40~50件の場合ではおよそ1.5~2倍も遅く動作していることがわかる。

同時取得件数はPHP側で件数を明示してやらない限り、50件のレコードを取得しようとする。FX.php・FileMaker API for PHPともに検索画面を実装する場合は、可能なかぎり最大取得レコード数を減らしたほうが良さそうだ。また、対象レコードが多い場合は全体ソートも控えたほうが良いだろう。

次回は検索機能比較の最後として、レコードが大量にある場合の処理を検証・比較してみたいと思う。