2012年02月03日

FileMaker 遅い

FileMaker 遅い
FileMaker 集計 遅い
ファイルメーカー 遅い
ファイルメーカー ネットワークシステム 遅い
file maker server 遅い


・・・悪口でも自虐ネタでもありません。

先日、ホームページに来られた方の検索キーワードを眺めていたら、
やたら目に付いたキーワードがありました。

それが「遅い」というキーワードです。

そういえば、すでにご自分でお作りになったり、他の開発業者さんに作ってもらったFileMakerシステムを
使っているというお客様からご相談や開発のご依頼いただいたときにも結構な確立で言われます。


一応、最初に言っておきますが、ファイルメーカー(FileMaker)は決して遅くありません。
集計や検索に関してはむしろ速いと言っていいと思います。


と言っても、私も数年前まで遅いなあと思うことがよくありましたし、
あまり偉そうな事をいえるわけでもないんですけどね。

当時いた弊社の開発責任者は業界でも有名な技術者でしたが、
遅いと感じることはありました。

ファイルメーカー(FileMaker)は「作りやすい」という性質上、ちゃんとデータベースの
構造を勉強した技術者ではなく、とりあえず作ってみたという経験を
多く重ねていたら技術者になっていたという人が多いんですよね。


たぶん、当時の私の感じていたことは、
「FileMaker 遅い」というキーワードで検索されているみなさんと同じだと思います。


しかし、それはFileMakerの限界とかという話ではなく作りの問題です。

集計や検索、一覧表示で遅いと感じているのでしたら、
それは解決できると考えて差し支えありません。


おそらく、みなさんのファイルを重たくしているのは、
集計や検索、一覧表示を遅くしているのは、
「集計フィールド」か「他のテーブルを計算対象に含む計算フィールド」です。


具体的に説明します。
 
たとえば、売上の集計が遅いという場合について考えてみます。

売上の集計は各売上伝票の金額の合計で、仮に対象となる伝票が月平均で500枚あったとします。

さらに、各売上伝票にはそれぞれ売上明細があり、単価×数量で金額を算出しているとします。
仮に各売上伝票がもつ明細は平均で20行だとします。

なにも考えなしに作ると、

・売上明細の金額=数量×単価
・売上伝票の金額=sum(売上明細の金額)
・売上集計=sum(売上伝票の金額)

という計算の連鎖のある構成になると思います。


この構成だと、月間の集計金額を出すには、1万レコードの明細行から
計算を組み立てていくことになります。
年間だと12万レコードです。

画面遷移したときや、検索などによって対象レコードが変化するたびに、
再計算しますので、毎回数万回の計算が行われることになります。

遅くなっても当たり前ですね。


では、どうするのか?

計算の対象を減らしてあげるのが一番の近道です。

上記の例でいうと、売上伝票のテーブルに一つフィールドを増やします。
前からあった売上伝票の金額をA、追加したフィールドを売上伝票の金額Bとします。

売上伝票の金額Bは計算フィールドではなく数字フィールドにします。
これがミソです。


次に、売上集計の計算内容を

売上集計=sum(売上伝票の金額A)から
売上集計=sum(売上伝票の金額B)に変更をします。

結果以下のような構成になります。

・売上明細の金額=数量×単価
・売上伝票の金額A=sum(売上明細の金額)
・売上集計=sum(売上伝票の金額B)

計算の連鎖が切れました。


一覧に売上伝票の金額Aを表示している様ならこれも
売上伝票の金額Bに変更します。

この段階では、売上伝票の金額Bは空欄のはずですので、
ここでとりあえず、売上伝票の金額Bを売上伝票の金額Aで
全置換しておきます。



最後に、
売上伝票の金額Bに売上伝票の金額Aの値を上書きするスクリプト(フィールド設定)を作って
売上伝票および明細の変更が完了するタイミングで動作する様に画面に仕込みます。

スクリプトは、画面遷移のボタンがあればそのボタンに、
なければ仕方ないのでスクリプトトリガー対応verなら
明細の単価、数量に仕込みます。

一番確実なのは、ステータスエリアをロックして、
売上伝票の閲覧画面と編集画面をつくり、
編集画面には、閲覧画面にしか戻れないようにした上で、
そのボタンに仕込むことです。
これなら、伝票の編集が終わったときに必ずそのボタンを
押しますので。


以上で変更作業は終了です。

これで、上記の例だと計算対象が20分の1になっているで
集計のスピードが格段に上がるはずです。

同様に、売上伝票に対する検索も速くなっています。



というわけで、初歩的な例でお話しましたが、
ファイルメーカー(FileMaker)は集計、検索、一覧表示は遅くありません。
遅いファイルもちょっと作りを直すだけで早くなります。
かわいがってあげてください。

ああ、あと12万件程度で限界かよって思った方がいるかもしれませんが
今回のお話はあくまで初歩的なことです。
弊社では300万件くらいまでしかテストしてませんが、十分使用に耐えていたので
上限は多分もう少し上だと思いますし、作りの工夫次第ではもっといけるんじゃないかなと思います。



・・・ただ、ソートと大きな画像の画面描画は遅いんで、
そっちを解決するにはまた別の工夫が必要なんですけどね・・・。

それはまた別の機会にでも。


ご相談・お見積りは無料です。まずはご連絡ください

メールでのお問合せはこちら

posted by riki at 22:54| 開発者日記 | 更新情報をチェックする