インポート時、データのクリア処理に時間がかかる
質問
インポート処理用フォームのパラメータ仕様に相対期間を設定し、下記の通り該当する期間を指定してリクエスタから各インポート処理を実施しました。
-
4月指定時インポート件数:5,000,000件
-
5月指定時インポート件数: 100,000件
各条件で処理時間を計測しましたが大差がない状況です。
また、リクエスタのログファイルを確認すると両条件とも、データのクリア処理の件数が同じ件数となっており、対象レコード件数に関わらずデータのクリア処理に処理時間の半分程度を要している状況です。
データのクリア処理ですが、該当する相対期間に保存されているデータ数が異なるはずなのですがパラメータ仕様の相対期間を変更しても、同一件数となるのはなぜでしょうか。
回答
fusion_place のデータは、月別欄を横持ち(1レコード上に並べて保持)しているので、検索条件として相対期間を指定しても全月のデータが検索結果に含まれます(表示上は絞り込まれます)。
これによりパラメータ仕様の相対期間によらずデータクリア処理件数は同一になります。
実際にセルをクリアするかどうかは、フォームを開いた状態で、該当セルが編集可能かどうかで決まるため、データクリア処理件数と実際にクリアされた件数は必ずしも一致しません。
以下は単純化した元帳の例です。
6 月のデータをインポートする時、過去分 1, 2 の 2 件がクリア対象となります。
6 月のデータをインポートすると、今回の行番号 3 に、過去分 1, 2 が加わり合計 3 件がクリア対象となります。
そのため、クリア対象件数も月が進むにつれ増加します。
実際にセルをクリアするかどうかは、フォームを開いた状態で、該当セルが編集可能かどうかで決まります。
例えば、パラメータとして相対期間(月)を指定し当該月のみを表示するフォームの場合、指定した月以外の値は(編集不能であるため)クリアされません。
相対期間で指定された 6 月以外のセルが編集不能であれば、行番号 1, 2 のセルはクリアされず、インポート後の元帳は表.2 のようになります。
こちらがパフォーマンス上のボトルネックとなるときは、伝票データを保持する元帳に「伝票期間」といったディメンションを加える方法がございます。
詳しくは下記 Q&A をご参照下さい。
関連記事:パフォーマンス改善策(データ量の削減)