FileMaker Proで複数のファイルやデータベースから構成されるアプリケーションを組む場合、「外部データソースの管理」から必要なファイルやODBCの情報を追記していく。この外部データソースの管理で記述するファイルパスに特定の条件が重なると、Web公開の動作が著しく遅くなる現象が発生する。安定稼働していたFileMaker Webアプリケーションが突然遅くなった場合は、まずはここをチェックだ。
Web公開のパフォーマンスが突然遅くなったときにチェックするべき箇所 - 外部データソースの管理
FileMaker Proで複数のファイルやデータベースから構成されるアプリケーションを組む場合、「外部データソースの管理」から必要なファイルやODBCの情報を追記していく。この外部データソースの管理で記述するファイルパスに特定の条件が重なると、Web公開の動作が著しく遅くなる現象が発生する。安定稼働していたFileMaker Webアプリケーションが前触れなく突然遅くなった場合は、まずはここをチェックしてみよう。
複数のFileMakerファイルからなるアプリケーションとは
FileMakerはバージョン7移行、ひとつのFileMakerファイルに複数のテーブルを持たせることが可能になった。このため、1ファイルにすべてのテーブルを持たせてWebアプリケーションを作成することができるように。しかしこの場合
- メンテナンスの手間がかかる。レコードの移行などをおこなう場合、つねに全テーブルのレコードをエクスポート→インポートをおこなう必要がある。入力値の自動化でシリアル番号を使用している場合、「次の値」も作業時にチェックしなければならない
- ファイルサイズの肥大化につながる。FileMaker ServerやハードウェアのトラブルでFileMakerファイルが破損した場合、ファイルの修復に非常に時間がかかるようになる
といったデメリットがある。これらを防ぐために、用途ごとにFileMakerファイルを分離して、複数ファイルからアプリケーションを実装する方法がある。たとえば
- PHPからアクセスする、TOリレーションやレイアウトだけを定義したファイル(テーブルはすべて外部ファイルから参照)
- 頻繁にレコードが更新されるテーブルを集めたファイル
- マスタテーブルなど、テーブル構造やレコードがあまり更新されないテーブルを集めたファイル
- 中間テーブルなど、1テーブルに大量のレコードが必要なファイル
このようにファイルを分離しておけば、データベースの変更やメンテナンスの際も、必要最低限の作業でおこなうことが可能だ。また、FileMakerはバージョン6のころまで、1ファイル=1テーブルのデータベースだった。この流れを組み、現在でも1ファイル=1テーブルのFileMakerアプリケーションが作成されている場合もある。
これらの場合、必要なファイルが「外部データソースの管理」に追加されていくことになる。この外部データソースにおいて、開くことができないFileMakerファイルが存在する場合に、PHPからアクセスするファイルのWeb公開の動作が著しく遅くなることがある。具体的な環境は次のとおり。
- FileMaker Serverが2つ以上動作しており、FileMakerファイルが別々に配置されている。ネットワークのトラブルなどで、一方のFileMakerサーバからもう一方のFileMaker Serverへアクセスができなくなっているとき
- ほかの環境で動作していたFileMakerファイルを、外部データソースを修正せずに別の環境で動作させた場合
- FileMaker ServerのIPアドレスを間違えて入力し、実在しないファイルパスを指定しまっている場合
外部データソースに「FileMakerネットワーク」を使用して外部ファイルを参照しているかつ、そのネットワークが使用できない場合に動作が極端に遅くなる。このような場合、ファイル内のレイアウトすべての応答速度が遅くなるのではなく、アクセスできないFileMakerファイルのフィールドが配置されているレイアウトに限り遅延が発生する。
テスト用にファイルを作成し、動作を確認してみよう。
- テーブル "project" : 請求データを管理するテーブル。fxphp_tips.fp7上に作成
- テーブル "client_mst" : 顧客情報を管理するマスタテーブル。fxphp_tips_mst.fp7上に作成
- PHPからはfxphp_tips.fp7にアクセス
- fxphp_tips.fp7のリレーションシップに、fxphp_tips.fp7のprojectとfxphp_tips_mst.fp7のclient_mstとのリレーションを追加
- fxphp_tips.fp7にレイアウト"project"を作成。projectテーブルのフィールドをすべて配置
- fxphp_tips.fp7にレイアウト"project"を作成。projectテーブルのフィールドをすべて配置
FMFindAny()のみをおこなうPHPファイルを作成し、projectレイアウトとproject_allにアクセスして時間を計測する。計測にはSafariのWebインスペクタをもちいた。まずは正常に動作しているパターンから。
続いてfxphp_tips_mst.fp7を閉じた状態で、再度アクセスをおこなう。
最後にfxphp_tips.fp7の外部データソースに記述された「FileMakerネットワーク」が使用できない状態を再現してアクセスし、時間を計測した。
FileMaker Webアプリにおいて、特定のレイアウトの処理だけ極端にパフォーマンスが低下した場合は、まずこの外部データソースを疑ってみよう。手っ取り早く確認するには、FileMaker Proで該当ファイルの該当レイアウトにアクセスしてみれば良い。「(ファイル名)を開くことができません。ホストが利用できないか、またはそのホスト上でファイルが利用できません。」とエラーが表示されたら、外部データソースのパスの表記方法をいまいちど確認してみよう。