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

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

これまでの検証結果から「ソート」や「計算・集計フィールド」、「配置するフィールド」の使い方に注意することで、総レコードが50件でも5,000件でもそこまでパフォーマンス差は表れないことがわかった。

FileMakerはレコード数が多いとパフォーマンスが落ちやすいとよく言われる。FileMaker Serverで公開されているファイルをFileMaker Proでネットワーク越しにアクセスした場合、とくにリスト形式や表形式のレイアウトを表示すると画面描画がもたつく印象がある。Web公開の機能も総レコード数が多いと影響を受けるのか。そこで今回は、総レコード数を5,000件から500,000件に増やした状態でテストをおこなってみた。

FileMakerファイル環境 - I~M共通

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

FileMakerファイル環境 - I

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

FileMakerファイル環境 - J

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

FileMakerファイル環境 - K

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

FileMakerファイル環境 - L

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

FileMakerファイル環境 - M

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

レコード総数を5,000件から500,000件に拡大。レコード取得数($max)は前回同様、10件ずつ増やしていく。クライアントPCからApache JMeterを使用し、(2), (3)で作成したfx_find.phpとapi_find.phpにアクセス、応答速度などを計測する。

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

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

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 463 82 7064 360.92 20.4 82.22 00:48.80
20 2,000 1079 67 20770 2237.07 17.4 70.1 01:54.98
30 3,000 1315 69 19973 1451.79 21.2 85.67 02:21.13
40 4,000 1828 67 33214 2383.13 20.3 81.72 03:17.22
50 5,000 2127 67 47040 4312.42 20.3 81.99 04:05.83
  平均 1362.4 70.4 25612.2 2149.07 19.92 80.34  

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

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 609 96 1560 111.43 16 97.23 01:02.37
20 2,000 1343 94 20009 2224.32 14 85.06 02:22.72
30 3,000 1806 111 16994 1326.4 15.9 96.66 03:08.41
40 4,000 2478 95 35758 2562.08 15 91.36 04:25.81
50 5,000 2996 95 46395 4406.64 15 91.09 05:33.32
  平均 1846.4 98.2 24143.2 2126.17 15.18 92.28  

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

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 872 122 14200 918.68 11 95.69 01:30.67
20 2,000 1775 121 20326 2328.24 10.7 92.74 03:07.42
30 3,000 2363 121 19098 1470.95 12.2 106.05 04:05.96
40 4,000 3278 121 41041 2927.27 11.5 99.92 05:48.12
50 5,000 4110 134 48557 4660.47 11.3 98.15 07:22.95
  平均 2479.6 123.8 28644.4 2461.12 11.34 98.51  

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

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 990 366 2156 186.5 9.9 117 01:40.03
20 2,000 2079 146 20052 2099.5 9.4 109.15 03:35.30
30 3,000 2818 288 25704 1567.15 10.2 120.21 04:53.23
40 4,000 4007 148 40503 3180.1 9.5 112.05 06:59.77
50 5,000 5158 157 51821 4679.83 9.2 108.63 09:01.28
  平均 3010.4 221 28047.2 2342.62 9.64 113.41  

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

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 1131 203 2293 173.97 8.7 129.69 01:54.56
20 2,000 2442 175 20218 2126.79 7.9 117.9 04:12.24
30 3,000 3370 225 25315 1662.5 8.6 128.47 05:47.32
40 4,000 4764 175 40021 2928.5 8.1 120.05 08:15.74
50 5,000 6133 176 159254 5100.72 7.7 115.33 10:45.08
  平均 3568 190.8 49420.2 2398.5 8.2 122.29  

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

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 578 120 948 89.9 16.9 68.43 00:59.09
20 2,000 1145 103 11143 673.3 16.8 67.93 01:59.25
30 3,000 1710 92 21882 1745.58 16.6 67.2 03:00.89
40 4,000 2374 91 36978 2875.63 15.6 63.1 04:16.86
50 5,000 2941 91 49655 4514.74 15.5 62.86 05:22.35
  平均 1749.6 99.4 24121.2 1979.83 16.28 65.9  

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

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 825 149 1356 102.13 11.9 72.57 01:23.43
20 2,000 1645 148 3049 407.05 11.9 72.52 02:47.97
30 3,000 2369 142 25721 2487.79 11.7 71.44 04:15.79
40 4,000 3358 134 39038 3515.36 11.2 68.49 05:55.81
50 5,000 4256 143 48733 4140.66 11.1 67.68 07:30.18
  平均 2490.6 143.2 23579.4 2130.6 11.56 70.54  

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

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 1101 190 1747 133.39 9 78.05 01:51.52
20 2,000 2234 179 5113 520.52 8.8 76.86 03:46.70
30 3,000 3268 196 26730 2285.39 8.8 76.42 05:42.15
40 4,000 4706 177 39416 3229.58 8.2 71.2 08:09.79
50 5,000 5809 188 53396 4832.8 8.2 71.2 10:09.62
  平均 3423.6 186 25280.4 2200.34 8.6 74.75  

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

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 1101 216 15214 639.7 7 81.95
20 2,000 2770 215 20015 1382.08 7 82.14
30 3,000 4214 217 19910 1421.99 7 82.24
40 4,000 5757 507 30614 2152.02 6.8 79.77
50 5,000 7534 438 48397 3762.62 6.8 77.74
  平均 4275.2 318.6 26830 1871.68 6.92 80.77  

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

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1000 1201 284 3047 309.72 5.8 85.81 02:53.21
20 2000 3568 422 11507 956.5 5.5 82.54 06:00.67
30 3000 5565 441 28205 2167.69 5.3 78.6 09:28.48
40 4000 7120 263 40373 2912.94 5.4 81.19 12:14.08
50 5000 9119 259 50131 4149 5.3 79.08 15:42.15
  平均 5314.6 333.8 26652.6 2099.17 5.46 81.44  

FX.php Average集計表

同時ユーザ数 $max=10 $max=20 $max=30 $max=40 $max=50
10 463 609 872 990 1131
20 1079 1343 1775 2079 2442
30 1315 1806 2363 2818 3370
40 1828 2478 3278 4007 4764
50 2127 2996 4110 5158 6133

FileMaker API for PHP Average集計表

同時ユーザ数 $max=10 $max=20 $max=30 $max=40 $max=50
10 578 825 1101 1101 1201
20 1145 1645 2234 2770 3568
30 1710 2369 3268 4214 5565
40 2374 3358 4706 5757 7120
50 2941 4256 5809 7534 9119

環境I比較

環境J比較

環境K比較

環境L比較

環境M比較

FX.phpパフォーマンス

FileMaker API for PHPパフォーマンス

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

前回同様、ソートをおこなうと1リクエストあたりの応答時間が50分を越えるという現実的ではない処理時間になるため、計測対象外とさせていただいた。

ソート・計算/集計フィールド未使用ならほとんど差がでない

一度に取得するレコード数を増やせば増やすほど、FX.php・FileMaker API for PHPともに応答速度が長くなるのは前回検証した結果と同じ。注目したいのはレコード総数が増えても、ソートを使ったり、索引の作成できない計算/集計フィールドを使わなければほとんどパフォーマンス差は出ないというところ。レコード総数5,000件と500,000件とで同時ユーザ数が10のとき、FX.php/APIともに約0.09~0.1秒ほどしか遅くなっていない。APIの一部の結果は、レコード総数が500,000件のほうが早く動作している。

ソートを使った場合、1フィールドのソートだけで応答速度が50分を越えるというとんでもない結果となってしまった。ソートについてはFileMaker Serverを使用せず、FileMaker Proでファイルを直接開いた場合は高速に動作する。FileMaker Serverで公開・共有しているFileMakerファイルをネットワークで開いた場合は同様に遅くなる。これらのことから、FileMakerの作り自体になにかしらの遅くなる原因がありそうだ。この問題が解決しない限り、レコードを大量に扱うWebアプリにおいてソートを用いるべきではないだろう。

計算・集計をどうしても使いたい場合は、この「総レコード数が多くても、ソートや計算・集計フィールドを使わなければパフォーマンスは落ちない」特性を利用して、集計単位別の結果を保持する中間テーブルを用いるのが良いだろう。FileMakerで中間テーブルを利用する方法については、バックナンバー「スピードアップのための徹底チューニング(4) 集計には中間テーブル」を参照してほしい。