Indexing Methods Compared
Comparing getSignaturesForAddress, getBlock, and Geyser-based indexing approaches.
When building a Solana indexer, you have several methods for sourcing data. Each has different trade-offs in terms of completeness, latency, and operational complexity.
getSignaturesForAddress is the simplest approach — it returns a paginated list of transaction signatures for a given account. This is useful for building wallet history features but has significant limitations: it only covers accounts you explicitly query, pagination is slow for high-volume accounts, and you're limited to ~2 epochs of history on standard nodes.
getBlock / getBlocks fetches complete block data including all transactions. This is the foundation for comprehensive indexers — you process every transaction in every block sequentially. The downside is throughput: even with parallel requests, processing Solana's full history takes significant time and resources.
Geyser Plugin / gRPC Streaming is the production-grade approach for real-time indexing. Data is streamed directly from the validator's memory before it's written to disk, providing the lowest possible latency. Combined with server-side filtering, you receive only the data relevant to your application. This is the recommended approach for any production indexer.
Hybrid approaches combine Geyser streaming for real-time data with RPC-based backfilling for historical data. This is the architecture used by most production indexers.