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 Solana state queries using efficient account data retrieval patterns
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():
Anti-patterns to Avoid
❌ Anti-pattern: Individual Entity Saves
Here’s an example of what not to do - individual saves per data item:✅ 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.