# メモリー最適化のベストプラクティス

すべてのレシピジョブは、メモリー割り当て上限が設定されたコンテナーで実行されます。レシピ内のアクションによって、コンテナーのメモリー不足が生じることがあります。これにより、[Temporary job dispatch failure] エラーが発生します。ここでは、レシピの設計でよくある問題と推奨される解決策を示します。

# 大きなバッチでのリピートアクション

大きなバッチを1つのジョブで処理することにより、合計処理時間を短縮できます。これは、多くの本番レシピで採用される、非常に一般的な設計パターンです。ただし、これらのバッチが適切に処理されない場合は、すぐにメモリー消費量が増大する可能性があります。

問題のあるパターン

よくある間違いは、大きなバッチをループして個別に処理することです。さらに悪いことに、それぞれの繰り返しで複数のステップが必要になることがよくあります。たとえば、従業員レコードのバッチをループする場合、レシピのロジックで、レコードを更新するか新しいレコードを作成する前に既存のレコードを検索するよう求められることがあります。このような処理によって、メモリー使用率が非常に高くなる可能性があります。

# 解決策 : バッチアクションの組み合わせ

バッチ処理により、多数のレコードを処理するコストを大幅に削減できます。また、総スループットが向上するというメリットもあります。以下に、推奨される手順を示します。

  1. search-update-create をループで行うのではなく、バッチのアップサートアクションを使用します(SQL Server の Upsert row アクションなど)。
  2. アップサート元とアップサート先のバッチサイズが一致しない場合、個別に繰り返すのではなく、 バッチ単位で繰り返します。

# メモリーへの大容量ファイルの読み込み

サイズの大きなファイルを転送する際にメモリーの問題を回避するために、Workato のアクションではストリーミング機能を使用します。これにより、ジョブの実行時にメモリーを消費せずに大きなファイルを転送できます。

問題のあるパターン

よくあるユースケースは、bytesize formula を使用してファイルサイズを確認することです。これにより、ファイルのサイズを計算するためにファイル全体をメモリーにダウンロードするアクションが強制されるため、 推奨されません。

# 解決策 : ファイルのメタデータ出力の使用

すべてのファイルストリーミングアクションは、出力データツリー内にファイルに関する追加情報を格納しています。これらのデータピルを使用して、メモリーが過負荷になることを防ぎつつ、ファイルサイズなどのメタデータを特定できます。たとえば、Amazon S3 の Download file アクションから size データピルを使用できます。

Amazon S3 - Download file アクション Amazon S3 - Download file アクション

# その他の推奨事項

  1. 特にファイルが100 MB を超える場合は、可能な限りファイルストリーミングを使用してください。
  2. 大きなクエリー結果セットを転送するには、JDBC Export アクションを使用します。

# コレクションの不必要な使用

コレクションはインメモリーデータベースです。このツールを使用すると、さまざまなソースにまたがるデータセットをデータウェアハウスに読み込む前に結合できます。ただし、レシピでコレクションを使い過ぎると、メモリーの問題が生じることがあります。

問題のあるパターン

コレクションを使用して CSV ファイルを解析するのは、よくある間違いです。コレクションは正しい選択のように思えますが、効率的ではありません。実際、この手法でデータのクエリーを実行するには、追加の手順が必要になります。

# 解決策 : CSV パーサー

CSV パーサーを使用すると、追加のコストをかけずに同じ結果を実現できます。


Last updated: 2023/8/31 1:07:14