【Salesforce】Bulk APIの仕組みについて

スポンサーリンク
Bulk APIの仕組みについて Salesforce

こんにちは、にいるです。

Bulk APIとはなんぞや?
「データローダで使用できて、とにかく実行スピードが速くなり大量データでも頑張ってくれるAPIだな」としか覚えていません笑

ということで、今回は「Bulk APIの仕組み」についてまとめてみました。

【ヘルプ】Bulk API の概要

1.Bulk APIとは

REST APIやSOAP APIは同期で実行されますが、Bulk APIは非同期での処理実行が可能です。

どういうことかというと、REST APIやSOAP APIは主な使用が対Salesforceのクライアントアプリケーションであるため、Salesforceへの操作を行ったのちその戻り値を返す必要があるためです。(僕はそう覚えていますが、ずれていたらすみません。)

それに対して、Bulk APIは数千件から数百万件のレコードに対する処理を行うときに使えます。

主な使い方として、Salesforceでは、データローダでBulk APIを使用することができます。
Bulk APIで実行される処理はバックグラウンドで処理されるため、ユーザはその処理終了を待たずに他の作業を行えます。

Bulk APIはREST APIに基づいているため、HTTP GETメソッドやHTTP POSTメソッドでジョブ実行やジョブの進捗を確認することができます。
REST APIはWork Benchから実行できます。

2.Bulk APIを使用した処理の流れ

続いて、Bulk APIの処理の流れです。

Bulk APIを使用する場合、まずはジョブを作成する必要があります。
ジョブの作成は操作するレコードのオブジェクトの指定と操作内容(POST)を定義すればできます。

その後、バッチをサーバに送信します。

図にするとこんな感じですね。

Bulk APIのフロー

分割されたバッチファイルの処理順序は保証されませんし、終了したジョブに新たにバッチを追加することもできません。

  • JobInfo リソースを使用してジョブの新規作成、ジョブの状況の取得、ジョブの状況を変更できます。
  • POSTしたバッチの状況はBatchInfo リソースで確認することができます。

3.並列処理の注意点

Bulk APIを使用するとバッチを複数に分けて処理実行できることがわかりましたが、並列処理を使用するときにはレコードロックを考慮しないといけません。

レコードロックとは、Aさんが取引先責任者Xレコードを保存中に親である取引先レコードをロックしているということです。
これをBさんが同じタイミングで取引先責任者Xを編集保存した場合、どちらかの操作はエラーとなり保存ができなくなります。

というのも、親レコードのロックに失敗したからです。

並列処理を使用する場合、例えバッチを分けたとしても複数のバッチで1つの取引先をロックしにかかると1つをのぞいて、他のバッチ処理はエラーになります。

なので、バッチファイル作成時は複数バッチで同じ親レコードをロックしないように、ID単位で作成することも念頭に置いておきましょう。

それぞれのパターンを図にしてみました。

親レコードロックの競合が発生するパターン

親レコードロックの競合

親レコードロックの競合が発生しないパターン

親レコードロックの競合

4.まとめ

いかがでしたでしょうか。

なんか勉強しながら書いてみたら、REST APIの使い方に近くなってましたね。
でもこの記事を作成したおかげでREST APIへの理解が深まりました。

また、Bulk APIは大量データの操作にとても便利ですが、その分ロックの競合を考慮しておかないといけないですね。

つまり、Bulk APIはREST形式で動き、並列モードで実行できるがバッチを分ける場合は関連する親レコード毎にファイルを作成するということです!

頭で理解したあとは、この知識を実務で使用できるようにしアンテナを張っておきましょう!

他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。

ではでは!

Salesforce 機能別 まとめページ

コメント

タイトルとURLをコピーしました