Batchable vs. @future vs. Queueable
The Batchable Interface
• When should I use it?
- Complex long running processes (thousands of records)
- Asynchronous pro...
The Batchable Interface
• Advantages
- It can process up to 50m records
- It can be scheduled to run at a particular time
...
@future method
• When should I use it?
- When it’s not a batch (group = 2 or more)
- Asynchronous processing (simple and o...
@future method
• Advantages
- Asynchronous processing without a concurrent limit (queue)
- Easier and quicker to implement...
The Queueable Interface
• When should I use it?
- When Batch and @future need to meet in the middle
- Chaining jobs
- You ...
The Queueable Interface
• Advantages
- Asynchronous processing with non-primitive arguments
- Easy access to the job ID
- ...
Which one to use?
Batchable @future Queueable
- Good at processing
large number of
records (50m) and tasks
are not time-cr...
Questions?
Nächste SlideShare
Wird geladen in …5
×

Batchable vs @future vs Queueable

9.405 Aufrufe

Veröffentlicht am

Salesforce Melbourne DUG - Batchable vs @future vs Queueable

Veröffentlicht in: Software
1 Kommentar
9 Gefällt mir
Statistik
Notizen
  • You may like to update the slideshare, After Winter 16 release, getContent() and getContentAsPdf() both are allowed in Asynch apex. That means you can use it in @future or Queueable interface.
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
Keine Downloads
Aufrufe
Aufrufe insgesamt
9.405
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
24
Aktionen
Geteilt
0
Downloads
119
Kommentare
1
Gefällt mir
9
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • All async
    All share same majority of the apex governor limits
    If multiple in the queue, the order is not guaranteed, so use with care
  • Breaking processing into chunks of 200
  • Apex Flex Queue can hold up to 100

  • Batch has max of 5 concurrent jobs
    Future runs faster and can have 1000 submitted at the same time
    50 per apex invocation
    250k per 24h or licences x 200
  • Max depth of 2 in the chain
    You can only chain 1 job from an executing job
    Suicidal chaining (exponential delay up to a minute)

    Can’t chain with callouts
  • Batchable vs @future vs Queueable

    1. 1. Batchable vs. @future vs. Queueable
    2. 2. The Batchable Interface • When should I use it? - Complex long running processes (thousands of records) - Asynchronous processing - Scheduled jobs • How can I define a Batch? - Implement Database.Batchable - Define start(), execute() and finish() methods
    3. 3. The Batchable Interface • Advantages - It can process up to 50m records - It can be scheduled to run at a particular time • Disadvantages - Only 5 concurrent batch jobs running at a time* - It’s difficult to troubleshoot - Execution may be delayed based on server availability - @future methods are not allowed - Can’t use getContent/getContentAsPDF methods - and a few more governor limits…
    4. 4. @future method • When should I use it? - When it’s not a batch (group = 2 or more) - Asynchronous processing (simple and often) - Long-running operations (callouts to external web services) - Separating mixed DML operations • How can I define @future method? - @future annotation - Must be static and return void - Specify (callout=true) to allow callouts
    5. 5. @future method • Advantages - Asynchronous processing without a concurrent limit (queue) - Easier and quicker to implement as opposed to Batch • Disadvantages - Parameters passed in can be only of Primitive type - Can’t use getContent/getContentAsPDF methods - Can’t chain @future methods - Difficult access to job ID
    6. 6. The Queueable Interface • When should I use it? - When Batch and @future need to meet in the middle - Chaining jobs - You need @future method with support for non-primitive types - Asynchronous monitoring • How can I define Queueable Apex? - Implement the Queueable interface - Define execute() method • How can I enqueue a job? - ID jobID = System.enqueueJob(new MyQueueableClass());
    7. 7. The Queueable Interface • Advantages - Asynchronous processing with non-primitive arguments - Easy access to the job ID - Chaining jobs* • Disadvantages - Can’t have more than 1 job in the chain that does callouts
    8. 8. Which one to use? Batchable @future Queueable - Good at processing large number of records (50m) and tasks are not time-crucial - Can be scheduled to run at a certain time - Maximum of 5 concurrent jobs running at a time - You need good error handling for troubleshooting - Quick async processing (typically 1 record at a time) e.g. avoid mixed DML or a web service callout - Faster than a Batch - Easy to implement - Only accepts primitive type arguments - Can’t chain jobs - Hard to monitor - Quick async processing that supports primitive types - Faster than a batch - Ability to chain jobs - Can’t have more than 1 job doing callouts within the chain - Can be monitored
    9. 9. Questions?

    ×