#SalesforceApexHours #FarmingtonHillsSFDCDug
Agenda :-
• Whats is HyperBatch
• Difference between Old Traditional Apex Batch job and HyperBatch
• Demo
• FAQ
1. Farmington Hills Salesforce Developer User Group
Salesforce Apex Hours :- HyperBatch
#SalesforceApexHours
#FarmingtonHillsSFDCDug
2. Who am I ?
Amit Chaudhary
• Active on Salesforce Developer Community
• Blogging at http://amitsalesforce.blogspot.in/
• Co-Organizer of :- FarmingtonHillsSFDCDug
• @amit_sfdc
• Amit.salesforce21@gmail.com
3. Our Speaker
Daniel Peter
• Salesforce MVP
• 22x Certified
• Bay Area Salesforce Dev Group Leader
• Lead Application Engineer, Kenandy
• dan@danpeter.com
• @danieljpeter
5. Why HyperBatch? Speed!
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.
13. Why HyperBatch? Speed!
Summary
▶ Running all 3 example batch jobs takes only 6 mins instead of 88 mins.
▶ You save 82 mins.
▶ It only takes 6.7% of the time!
17. Why HyperBatch? Concurrency
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 succeeds. Each re-attempt gets a
new context!
18. How it Works - Summary
• 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.
• Wrapping requests in unique identifiers for closed loop execution – JavaScript function binding.
• Each execute can return some state of type Object, it can be anything.
• Async
• Parallel remote actions fire the qeueables for the batch executions methods. (Not serial!)
• JavaScript polls for the status of the qeueables, waiting for them to complete.
• Execute state is stored in a custom object, and a list of them is returned to the finish() method, then they are deleted.
• Sync
• Parallel remote actions fire the synchronous transactions. (Not serial!)
• Execute state is returned synchronously and stored in JavaScript in the browser until they are all complete.
26. Roadmap
• Throttle requests (x number of open connections)
• Enhance the user interface
• 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
• Sequence batches in series (run a batch after a batch)
27. Resources
• 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)
• “French Touch Dreamin’ – The first community-led event in France” by Philippe Ozil
(https://developer.salesforce.com/blogs/developer-relations/2016/11/french-touch-dreamin-first-
community-led-event-france.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)