| Users/Data Size | Horizontal Partitioning | Vertical Partitioning |
|---|---|---|
| 100 users / small data | Single database instance; simple queries | Single database; all columns together |
| 10,000 users / medium data | Split data rows across shards by user ID; reduces row size per shard | Split tables by columns (e.g., user info separate from logs); reduces column size per query |
| 1 million users / large data | Many shards; each handles subset of users; easier to scale writes | Tables split by feature sets; some queries need joins across vertical partitions |
| 100 million users / huge data | Hundreds of shards; complex routing; cross-shard queries costly | Multiple vertical partitions across clusters; increased join complexity; possible duplication |
Horizontal vs vertical partitioning in HLD - Scaling Approaches Compared
At small scale, the database handles all data easily. As users grow, the first bottleneck is usually the database storage and query performance.
Horizontal partitioning bottleneck: Single shard storage and write throughput limits.
Vertical partitioning bottleneck: Complex joins across partitions slow queries.
- Horizontal Partitioning: Add more shards to distribute rows; use consistent hashing or range-based sharding; implement routing layer to direct queries.
- Vertical Partitioning: Separate tables by feature or column groups; optimize queries to avoid unnecessary joins; replicate frequently joined partitions.
- Combine both: Use horizontal partitioning within vertical partitions for very large scale.
- Use caching layers to reduce database load.
- Use read replicas to scale read-heavy workloads.
Assuming 1 million users, each generating 10 requests per second:
- Total requests: 10 million QPS (queries per second).
- Single DB instance handles ~5,000 QPS → Need ~2,000 shards for horizontal partitioning.
- Storage per user: 1 MB → Total 1 TB data; split across shards or vertical tables.
- Network bandwidth: 1 Gbps = 125 MB/s; large data transfers require multiple network interfaces or data centers.
Start by explaining the difference: horizontal splits rows, vertical splits columns.
Discuss pros and cons of each with examples.
Identify bottlenecks based on data size and query patterns.
Suggest scaling steps logically: start with vertical if columns are large, horizontal if rows grow fast.
Mention combining both for complex systems.
Your database handles 1000 QPS. Traffic grows 10x to 10,000 QPS. What do you do first?
Answer: Implement horizontal partitioning (sharding) to distribute load across multiple database instances, because a single instance cannot handle 10x the queries.
Practice
Solution
Step 1: Understand horizontal partitioning
Horizontal partitioning means dividing data by rows, so each partition holds a subset of rows.Step 2: Compare with other options
Vertical partitioning splits by columns, combining tables merges data, and duplication is for backup, not partitioning.Final Answer:
Splitting a database table into multiple tables by rows -> Option CQuick Check:
Horizontal partitioning = splitting by rows [OK]
- Confusing horizontal with vertical partitioning
- Thinking partitioning means duplicating data
- Mixing partitioning with database backup
Solution
Step 1: Define vertical partitioning
Vertical partitioning splits a table by columns, separating attributes into different tables.Step 2: Eliminate incorrect options
Options about rows, merging, or backup do not describe vertical partitioning.Final Answer:
Splitting data by columns into multiple tables -> Option BQuick Check:
Vertical partitioning = splitting by columns [OK]
- Confusing vertical with horizontal partitioning
- Assuming partitioning means merging tables
- Mixing partitioning with backup processes
id, name, email, password, address. If we apply vertical partitioning by splitting sensitive data into a separate table, which of the following is a valid partition?Solution
Step 1: Identify sensitive data columns
Password and address are sensitive, so they should be separated from general info.Step 2: Check partitioning by columns
Table 1: id, name, email; Table 2: id, password, address separates password and address into one table, and id, name, email into another, matching vertical partitioning.Final Answer:
Table 1: id, name, email; Table 2: id, password, address -> Option DQuick Check:
Vertical partitioning splits columns, sensitive data separated [OK]
- Mixing rows and columns in partitioning
- Not separating sensitive data properly
- Splitting columns unevenly without reason
Solution
Step 1: Analyze the problem
Horizontal partitioning splits by rows (region), but email queries are slow because email column is not separated.Step 2: Suggest fix
Adding vertical partitioning to separate email column improves query speed on emails.Final Answer:
Cause: Partitioning by rows only; Fix: Add vertical partitioning to separate email column -> Option AQuick Check:
Slow email queries fixed by vertical partitioning [OK]
- Confusing cause with partition type
- Suggesting wrong partitioning fix
- Ignoring query patterns in design
Solution
Step 1: Understand data and query patterns
Orders have many rows and columns; splitting by customer ID (horizontal) balances load; splitting payment info (vertical) reduces row size.Step 2: Evaluate options
Use horizontal partitioning by customer ID and vertical partitioning by payment info for balanced load combines horizontal and vertical partitioning for scalability and performance, better than single approach or no partitioning.Final Answer:
Use horizontal partitioning by customer ID and vertical partitioning by payment info for balanced load -> Option AQuick Check:
Combine horizontal and vertical partitioning for large data [OK]
- Using only one partitioning type for complex data
- Ignoring query patterns and data distribution
- Relying solely on caching without partitioning
Ready to prove it?
Pass the test and this pattern moves unknown
