Subgraph definition in GraphQL - Time & Space Complexity
When defining a subgraph in GraphQL, it is important to understand how the size of the data affects the work done.
We want to know how the time to process a subgraph grows as the data grows.
Analyze the time complexity of the following subgraph definition.
type Product @key(fields: "id") {
id: ID!
name: String
reviews: [Review]
}
type Review {
id: ID!
content: String
product: Product
}
This defines a subgraph with products and their reviews linked together.
Look for repeated data fetching or linking steps.
- Primary operation: Fetching each product and then fetching its list of reviews.
- How many times: For each product, the reviews are fetched, so the operation repeats for every product.
As the number of products and reviews grows, the total work grows too.
| Input Size (n products) | Approx. Operations |
|---|---|
| 10 | Fetch 10 products + their reviews |
| 100 | Fetch 100 products + their reviews |
| 1000 | Fetch 1000 products + their reviews |
Pattern observation: The work grows roughly in proportion to the number of products and their reviews.
Time Complexity: O(n + m)
This means the time grows linearly with the number of products (n) plus the number of reviews (m).
[X] Wrong: "Fetching a subgraph is always constant time because it's just one query."
[OK] Correct: Even one query can fetch many items, so the time depends on how many products and reviews are included.
Understanding how subgraph definitions affect data fetching helps you explain performance in real projects.
What if the reviews field was paginated? How would that change the time complexity?