HyperBatch
Daniel PETER
Lead Applications Engineer, Kenandy
Salesforce MVP
Bay Area Salesforce Developer User Group Organizer
20x certified
dan@danpeter.com
@danieljpeter
A Hyper-Fast Batchable Interface for Salesforce
Case study: Account / Contact Batches
• Prerequisite: 121K Accounts already in the system
• CreateContactsBatch: Creates 3 Contacts for each Account with a random “probability” field for
each. 363k Contacts total.
• UpdateAccountsBatch: For each Account, update the highest and lowest probability on the Account
by querying the child Contacts. Get the overall highest and lowest probability across all the
Accounts.
• DeleteContactsBatch: Delete all of the Contacts in the system. Keep a running total of how many
get deleted.
Speed!
Why HyperBatch?
Summary
Running all 3 example batch jobs takes only 4 mins instead of
88 mins.
You save 84 mins.
It only takes 4.6% of the time!
Speed!
Why HyperBatch?
Concurrency
Why HyperBatch?
Row lock behavior
Apex Batch: default is a failed batch execution. Retry logic can be built, but it will likely exceed the
transaction limits.
HyperBatch: row locks retry automatically until the transaction succeed. Each re-attempt gets a new
context!
Summary
How it works
• HyperBatch interface that mimics the Database.Batchable interface.
• Browser orchestration for selecting jobs and running them on-demand.
• Lightning Design System, Visualforce (Lightning Components would be a data bottleneck).
• AJAX toolkit for PK chunking the query locator.
• Parallel remote actions fire the qeueables for the batch executions methods. (Not serial!)
• Wrapping requests in unique identifiers for closed loop execution – JavaScript function binding.
• JavaScript polls for the status of the qeueables, waiting for them to complete.
• Each execute can return some state of type Object, it can be anything. These are stored in a
custom object, and a list of them is returned to the finish() method, then they are deleted.
Roadmap
• Enhance the user interface
• Test methods
• Support custom iterators instead of just query locator
• Support simple data operations like update a field or delete records without having to write Apex
• Chunk in 2 dimensions: (Parent Id, then Record Id) to avoid row lock errors
• Salesforce Developer Blogs: “Data Chunking Techniques for Massive Orgs“ by Daniel Peter
(https://developer.salesforce.com/blogs/developer-relations/2015/11/pk-chunking-techniques-
massive-orgs.html)
• Presentation from Forcelandia 2016: “PK Chunking – Divide and conquer massive objects in
Salesforce” (http://www.slideshare.net/danieljpeter/forcelandia-2016-pk-chunking)
• GitHub repo: HyperBatch (https://github.com/danieljpeter/HyperBatch)
Resources
Q & A
Daniel PETER
Lead Applications Engineer, Kenandy
Salesforce MVP
Bay Area Salesforce Developer User Group Organizer
20x certified
dan@danpeter.com
@danieljpeter
Merci
Daniel PETER
Lead Applications Engineer, Kenandy
Salesforce MVP
Bay Area Salesforce Developer User Group Organizer
20x certified
dan@danpeter.com
@danieljpeter