質問
HULFT SquareからSalesforceへの大量データ更新処理(約10万件・約50分)の処理時間を短縮したいです。HULFT Squareの設定(CPUやメモリ等)やコンポーネント・フローで改善可能なポイント、およびパフォーマンス向上のベストプラクティスを教えてください。また、並列処理化やバッチサイズ変更は可能でしょうか?
回答
Salesforceへの大量データ更新処理の速度改善として、現時点でお伝えできる有効な対応策は以下の2点です。
■HULFT Integrateサービスのスペックアップ(CPU増強)
[結合処理]はCPUの数と同数のスレッドで並列に処理が実行されます。そのため、HULFT IntegrateサービスのCPUをスペックアップすることで、スクリプトの処理速度が向上することが期待できます。
■PSP(パラレルストリーミング処理)の有効化
PSPは、メモリ消費を抑えながら大容量データ(処理件数が1,000件以上)を高速に処理させたい場合に効果的です。スクリプト全体の処理速度が向上することが期待できます。
各検討事項に対する制約・注意事項は以下のとおりです。
■並列処理(スレッド処理)について
スレッド処理による並列化は技術的には可能ですが、すべてのデータをメモリに保持するためメモリ不足のリスクがあります。また、[結合処理]に加えてスレッド処理を用いると、Integrateサービスのリソースにさらに負荷がかかります。スレッド処理でSalesforceコネクターの同じコネクションを同時使用する場合、トークンの更新に失敗する可能性もあります。リソース利用状況に留意しながら検証を進めてください。
■バッチサイズ変更について
Salesforceコネクターの[一括レコード更新処理]はバッチサイズを変更できません。渡すデータ量を調整することは可能ですが、処理対象件数に比例して時間もかかるため、処理速度の観点では有効ではありません。
■レコード分割による並列実行(例:25,000件×4ジョブ)について
技術的には可能ですが、処理対象レコードを特定する処理にかかる時間を考慮する必要があります。具体的な実装例・参考資料は用意がなく、スクリプトの実装およびパフォーマンス調整はお客様にて対応が必要です。
■実装方式のベストプラクティスについて
処理内容・スペック・データ加工内容などの要件はお客様ごとに異なるため、ベストプラクティスは存在しません。お客様にて検証・調整が必要です。検証にあたっては、結合処理結果を一度CSVなどに出力するスクリプトと、一括レコード更新処理を別々のスクリプト・ジョブに分けることで、Integrateサービスのリソース負荷をより詳細に確認できます。
補足
- スレッド処理を用いる場合、すべてのデータをメモリに保持するためメモリ不足のリスクがあります。リソース利用状況に留意しながら検証を進めてください。
- [結合処理]に加えてスレッド処理を用いると、Integrateサービスのリソースにさらに負荷がかかることが懸念されます。
- スレッド処理でSalesforceコネクターの同じコネクションを同時使用する場合、トークンの更新に失敗する可能性があります。
- CPU増強による処理速度向上については、以下をご参照ください。
◇PSP(パラレルストリーミング処理)の詳細については、以下をご参照ください。
- 並列処理(スレッド処理)のリスクについては、以下をご参照ください。
◇スレッドとPSP(パラレルストリーミング処理)の違いが知りたい
- バッチサイズ変更の制約については、以下をご参照ください。
◇Salesforceコネクターの一括レコード更新処理のレコード数上限とトランザクション処理について
◇Salesforceコネクター 一括レコード更新処理における処理件数増加時の処理時間について
- Integrateサービスのサイジングについては、以下をご参照ください。
コメント
0件のコメント
記事コメントは受け付けていません。