| Users | Requests per Second (QPS) | Data Size | Latency Requirement | System Changes |
|---|---|---|---|---|
| 100 users | ~50 QPS | Thousands of keywords | <1 second | Single server, in-memory trie, simple cache |
| 10,000 users | ~5,000 QPS | Millions of keywords and queries | <200 ms | Load balancer, multiple app servers, Redis cache, read replicas |
| 1,000,000 users | ~500,000 QPS | Hundreds of millions keywords, user personalization data | <100 ms | Sharded databases, distributed cache, CDN for static assets, async updates |
| 100,000,000 users | ~50 million QPS | Billions of keywords, global personalization | <50 ms | Global data centers, multi-level caching, advanced sharding, ML model serving clusters |
Design a search autocomplete in HLD - Scalability & System Analysis
Start learning this pattern below
Jump into concepts and practice - no test required
The first bottleneck is the database that stores keywords and query statistics. At low scale, a single database can handle autocomplete queries. As users grow, the database query rate and data size increase, causing slow response times and connection limits.
- Read Replicas: Add read-only database replicas to distribute query load.
- Caching: Use in-memory caches (Redis, Memcached) to store popular autocomplete results.
- Horizontal Scaling: Add more application servers behind a load balancer to handle concurrent requests.
- Sharding: Partition the keyword data by prefix or user region to reduce single database load.
- CDN: Cache static autocomplete assets globally to reduce latency.
- Asynchronous Updates: Update autocomplete indexes asynchronously to avoid blocking queries.
At 10,000 users with 5,000 QPS, assuming each autocomplete request is ~1 KB, bandwidth needed is ~5 MB/s. A Redis instance can handle ~100K ops/sec, so a few Redis nodes suffice. Database must handle 5K QPS; multiple read replicas needed. Storage for millions of keywords and user data can be tens of GBs. Network and CPU scale with request volume.
Start by clarifying scale and latency needs. Identify bottlenecks step-by-step: database, cache, network. Propose solutions matching bottlenecks: caching for read-heavy, sharding for data size, horizontal scaling for concurrency. Discuss trade-offs and monitoring strategies.
Your database handles 1000 QPS. Traffic grows 10x to 10,000 QPS. What do you do first?
Answer: Add read replicas to distribute read queries and reduce load on the primary database. Also, implement caching for popular autocomplete results to reduce database hits.
Practice
Solution
Step 1: Understand autocomplete function
Autocomplete helps users by suggesting search terms while they type, improving speed and experience.Step 2: Eliminate unrelated options
Options about password storage, blocking users, or showing full results do not match autocomplete's purpose.Final Answer:
To suggest possible search terms as the user types -> Option CQuick Check:
Autocomplete = Suggest terms [OK]
- Confusing autocomplete with full search results
- Thinking autocomplete handles security
- Assuming autocomplete blocks users
Solution
Step 1: Identify prefix search needs
Autocomplete requires fast prefix matching, which means quickly finding all words starting with a given prefix.Step 2: Match data structure to prefix search
Trie (prefix tree) stores characters in a tree structure, enabling efficient prefix lookups compared to hash maps or linear structures.Final Answer:
Trie (Prefix Tree) -> Option AQuick Check:
Prefix search = Trie [OK]
- Choosing hash map which is not prefix-optimized
- Using stack or queue which are not for prefix search
- Ignoring prefix search efficiency
"app", which of the following outputs is correct assuming the Trie contains words: ["apple", "app", "application", "apt"]?Solution
Step 1: Identify words starting with prefix "app"
From the list, words starting with "app" are "apple", "app", and "application".Step 2: Exclude words not matching prefix
"apt" starts with "ap" but not "app", so it is excluded.Final Answer:
["apple", "app", "application"] -> Option DQuick Check:
Prefix "app" matches apple, app, application [OK]
- Including words that don't fully match prefix
- Confusing prefix length
- Ignoring exact prefix matching
"xyz". What is the most likely cause?Solution
Step 1: Analyze no suggestions for prefix
No suggestions means no matching entries for the typed prefix in the autocomplete data.Step 2: Evaluate other options
Cache full or service overload might cause delays but not necessarily zero suggestions; no internet affects connectivity but question focuses on autocomplete output.Final Answer:
The prefix "xyz" does not exist in the data store -> Option AQuick Check:
No suggestions = No matching prefix [OK]
- Assuming cache full causes no suggestions
- Blaming internet without checking data
- Confusing overload with empty results
Solution
Step 1: Identify scalable components for autocomplete
Trie-based service enables fast prefix search; distributed cache reduces latency and load; client-side cache improves responsiveness.Step 2: Eliminate inefficient options
Full table scans and flat files cause slow searches; monolithic servers without caching do not scale well.Final Answer:
Client-side cache + Trie-based service + Distributed cache layer -> Option BQuick Check:
Scalable autocomplete = Trie + caching layers [OK]
- Ignoring caching for latency
- Using full scans causing slow response
- Relying on monolithic servers only
