FX.php/APIの違い - レコード検索(2), (3)で作成した2つの検索/一覧PHPを使用し、動作のパフォーマンス・サーバにかかる負荷を比較する。今回はレコード総数を5,000件に増やした上で、最大レコード取得数を調整した結果を検証する。
今回比較した環境について
前回はレイアウトに配置するフィールドの数を増やし、ソートをおこなった条件で検証をおこなった。クライアントの表示までの表示速度、およびサーバにかかる負荷ともにFileMaker API for PHPの方が大きいことがわかっていただけたと思う。今回からはクライアント側のパフォーマンスに注目して検証をおこなってみよう。レコード数を若干増やし、1リクエストのレコード取得数を調整した。
FileMakerファイル環境 - D~H 共通
- 総レコード数: 5,000件
- レスポンスレイアウトに配置しているフィールド数: 9
- 計算・集計フィールドの有無: なし
- ソート指定の有無: なし
FileMakerファイル環境 - D
FileMakerファイル環境 - E
FileMakerファイル環境 - F
FileMakerファイル環境 - G
FileMakerファイル環境 - H
レコード総数を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ともに検索画面を実装する場合は、可能なかぎり最大取得レコード数を減らしたほうが良さそうだ。また、対象レコードが多い場合は全体ソートも控えたほうが良いだろう。
次回は検索機能比較の最後として、レコードが大量にある場合の処理を検証・比較してみたいと思う。