0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Salesforce Platform デベロッパー 備忘録 #非同期ApexとDatabase.Batchableインターフェース

Posted at

今日, 無事Salesforce認定アドミニストレーターの試験に合格できたので, 次なる資格「Salesforce Platform デベロッパー」の学習に入ろうと思う.

Salesforceでカスタムオブジェクトのレコードを非同期に処理するための最適なアプローチをとは? バッチ処理が必要とされ, 大量のデータレコードに対して複雑なビジネスロジックを適用させる必要があるシナリオを想定している.

A. Apexトリガーを使用して、データの変更時にロジックを同期的に実行します。
B. @futureアノテーションを持つメソッドを使用して、処理を非同期に実行します。
C. Queueable Apexを使用して、ジョブをキューに入れ、非同期に処理します。
D. Database.Batchableインタフェースを実装したApexクラスを使用して、バッチ処理を行います。

上記のような設問と選択肢があり, 解答は以下のようになるらしい.

解答: Database.Batchableインターフェースを実装したApexクラスを使用する.

Aはデータの変更などが発生した際にリアルタイムに実行して処理してくれるが, 大量のデータを効率よく処理することには向かない.

Bの@futureメソッドも非同期処理を可能にするが, 一度に処理できるデータ量に限りがあり, 複雑なビジネスロジックを適用するには制限があるため, 設問のシナリオでは適さない.

CのQueueableも非同期処理を可能にするが, 大量のデータ処理には向いていない.

DのDatabase.Batchableはそもそも作りとして大量レコードを扱うように設計されているらしい. 

ここでは, 設問に「バッチ処理が必要とされ, 」と記載があるからDがベストプラクティスとなるのかな? (一般的な非同期処理には@futureが使われることが多いらしい)
@futureでも大量レコードの処理が可能ではあるらしいから, バッチ処理のような複雑なロジックが組まれる場合はDatabase.Batchableインターフェースを使用する, ということで納得することにした.

通常, Salesforceでのクエリ実行にはガバナ制限が適当されており, 大量のデータを処理する場合には特に気をつけなければならない. そこでBatch Apexという仕組みを使う. 最大の実行可能レコード件数は5千万件となる.
(https://plus-idea.net/batch-apex/)

-- Database.Batchableについて --
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_batch_interface.htm

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?