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 Starknet state queries using efficient Cairo contract queries
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:
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.