ロック競合を最小限に抑えるためのデータ編成
Salesforce Platform は、リレーショナルデータベース上に構築されたアプリケーションと同様、データの参照整合性を保証するためにロックを使用します。ほとんどのトランザクションデータベース操作の場合、ロックが保持されるのは短時間にすぎず、ボリュームは競合を引き起こすほど大きくありません。しかし、データボリュームが大きいオブジェクトを操作するときや大規模なジョブを処理するときは、レコードがロックされ、競合が問題になる可能性があります。
Bulk API 2.0 では「バッチ」という概念が隠されていますが、Bulk API 2.0 のジョブは厳密にはバッチで構成されています。バッチは Bulk API 2.0 の自動バッチ管理機能で暗黙的に管理されています。
Bulk API 2.0 ではロック競合を引き起こしやすい処理に注意する
次に示すのは、ロック競合を引き起こしやすい操作です。
- ユーザーの作成
- 非公開で共有されているレコードの所有者の更新
- ユーザーロールの更新
- テリトリー階層の更新
ロック競合を最小限に抑えるための Bulk API 2.0 データの編成
大規模なデータを読み込む場合は、主レコードをその親レコードに基づいて並び替え、(親が同じ) 異なるレコードが別々のジョブに含まれないようにします。
- 例: AccountTeamMember レコードの作成や更新を行う場合、このレコードに対応する取引先は、トランザクションが完了するまでロックされます。AccountTeamMember レコードを含む別々のジョブをアップロードする場合、これらのすべてのレコードに同一取引先への参照が含まれていると、すべてのジョブで同じ取引先のロックが試みられるため、ロックのタイムアウトが発生する可能性があります。AccountTeamMember レコードを処理するときは、AccountId で CSV データファイルを編成します。
Bulk API 2.0 の自動レコードロック処理 (PILOT)
人気のある Salesforce ideaexchange の提案に基づき、当社は Bulk API 2.0 のロックエラーがないかを自動的に検査し、エラーがあった場合は処理して、ジョブが正常に完了する確率を高めるパイロット機能を提供しています。
ロック競合を自動的に最小限に抑えるパイロットに関心がある場合は、取引先チームに連絡し、「Bulk API 2.0 の自動レコードロック処理パイロット」への参加を依頼してください。