AdventCalendar
FileMaker
adventcalendar2017

【FileMaker】Loopと全置換、どっちが早いのかやってみた

More than 1 year has passed since last update.

FileMakerもバージョンが16になり、以前とは比べ物にならないほど多機能になってきました。
しかし、スクリプトの組み方によっては、処理が遅いシステムになってしまいます。

今回は、同じことをするのに違うステップや関数で実装したらどっちが早いか、が気になったのでやってみました。
Loopフィールド内容の全置換です。

実施環境

MacBook Air (13-inch, Early 2015)
プロセッサ:1.6 GHz Intel Core i5
メモリ:8 GB 1600 MHz DDR3
OS:macOS High Sierra バージョン 10.13.1
FileMaker:FileMaker Advanced Pro 16.0.3.302

検証データ

(1)1万件ちょい(16,000件)のデータ2フィールドを変換
(2)5万件ちょい(56,000件)のデータ2フィールドを変換 → (1)1の3.5倍
(3)10万件ちょい(112,000件)のデータ2フィールドを変換 → (1)の7倍

変換するフィールドは、
・テキストデータ
・数値
の2つです。

仕様するFileMaker スクリプトステップ

以下の2つのスクリプトステップごとにスクリプトを作成します。
Loop
フィールド内容の全置換

Loopを使ったスクリプトは、以下のような感じです。
1208_1.png

フィールド内容の全置換を使ったスクリプトは、以下のような感じです。
1208_2.png

結果

1万件ちょい(16,000件)のデータ2フィールドを変換の場合

・Loop
1208_3.png

・フィールド内容の全置換
1208_4.png

5万件ちょい(56,000件)のデータ2フィールドを変換の場合

・Loop
1208_5.png

・フィールド内容の全置換
1208_6.png

10万件ちょい(112,000件)のデータ2フィールドを変換の場合

・Loop
1208_7.png

・フィールド内容の全置換
1208_8.png

さすがに10万件ちょいのLoop変換は、待っている間、眠くなりそうでした。。。

表にしてみました。

件数(件) Loop(分:秒) 全置換(分:秒)
16,000 0:30 0:02
56,000 1:50 0:06
112,000 3:39 0:12

グラフにしてみました。
1208_9.png
Loop、スキーの上級者コースを超えた斜度ですね!
基準値を16,000件とすると、Loopは16,000件の3.5倍のデータである56,000件は、処理時間は3.5倍を5秒ほど多くかかっています。
同様に、112,000件は16,000件の7倍ですが、処理時間は7倍を4秒ほど多くかかっています。
バッチ処理をするなら、4,5秒多くかかってもそんなに気になりませんが、オンラインで処理する際は、ものすごくかかることになりますね。

だがしかし、全置換に関しては、単に3.5倍、7倍の時間はかかっていません。
むしろ、少ない時間で処理を終了しています。

FileMakerのバージョンや実行環境にも寄るかと思いますが、今の所、フィールド内容の全置換の方が処理が早い、という結果になっています。
なお、再帰処理でのフィールド変換は、再帰回数に限界数があるようですので、今回の検証からは外しました。

では、楽しいFileMakerライフを!