Core Principles
The batch processing model relies on these key principles:- Minimize database hits by grouping multiple single-row transactions into multi-row batch transactions
- Transform data in memory using vectorized operators for maximum efficiency
- Batch EVM state queries using the MakerDAO
Multicallcontract
How Batch Processing Works
To illustrate batch processing, consider a processor that tracks the current state of on-chain records. It listens toCreate and Update events and receives a batch of events:
Batch boundaries and batch sizes can change between runs. Keep correctness
independent of in-memory state carried between batches, and keep temporary
collections bounded. See
Squid SDK tips and troubleshooting.
The data batch contains
all events from multiple blocks, allowing for efficient batch processing.
Implementation Patterns
Here’s the idiomatic pattern for implementing batch processing withrun():
For a complete implementation of this pattern, see the EVM squid example.
Anti-patterns to Avoid
❌ Anti-pattern: Individual Entity Saves
Here’s an example of what not to do from the Gravatar example:✅ Correct Pattern: Batch Processing
Instead, use in-memory caching and batch operations:Migration from Handler-Based Processing
Batch processing can serve as a drop-in replacement for handler-based mappings (like those used in subgraphs). While handler-based processing is significantly slower due to excessive database operations, it can be a useful intermediary step during migration from subgraphs to Squid SDK.Transitional Approach
You can reuse existing handlers while iterating over batch data:Block Hooks
You can implement pre- and post-block hooks for additional processing logic:Block hooks are useful for implementing cross-block state management, caching,
or cleanup operations that need to run before or after processing each block.