Bird
Raised Fist0
HLDsystem_design~12 mins

Horizontal vs vertical partitioning in HLD - Architecture Patterns Compared

Choose your learning style10 modes available
System Overview - Horizontal vs vertical partitioning

This system demonstrates two common database partitioning methods: horizontal and vertical partitioning. Horizontal partitioning splits data rows across multiple tables or databases, while vertical partitioning splits data columns. The goal is to improve performance, scalability, and manageability of large datasets.

Architecture Diagram
User
  |
  v
Load Balancer
  |
  v
API Gateway
  |
  +-----------------------+
  |                       |
  v                       v
Horizontal Partitioning   Vertical Partitioning
  |                       |
  v                       v
DB Shard 1               DB Table A (Columns 1-3)
DB Shard 2               DB Table B (Columns 4-6)
DB Shard 3               DB Table C (Columns 7-9)
  |                       |
  +----------+------------+
             v
           Cache
             |
             v
          Response
Components
User
user
Initiates requests to the system
Load Balancer
load_balancer
Distributes incoming requests evenly to API Gateway instances
API Gateway
api_gateway
Routes requests to appropriate partitioning strategy services
Horizontal Partitioning
service
Handles data split by rows across multiple database shards
Vertical Partitioning
service
Handles data split by columns across multiple database tables
DB Shard 1
database
Stores a subset of rows for horizontal partitioning
DB Shard 2
database
Stores another subset of rows for horizontal partitioning
DB Shard 3
database
Stores another subset of rows for horizontal partitioning
DB Table A (Columns 1-3)
database
Stores first group of columns for vertical partitioning
DB Table B (Columns 4-6)
database
Stores second group of columns for vertical partitioning
DB Table C (Columns 7-9)
database
Stores third group of columns for vertical partitioning
Cache
cache
Stores frequently accessed data to reduce database load
Response
response
Sends processed data back to the user
Request Flow - 18 Hops
User → Load Balancer
Load Balancer → API Gateway
API Gateway → Horizontal Partitioning
Horizontal Partitioning → Cache
Cache → Horizontal Partitioning
Horizontal Partitioning → DB Shard 1/2/3
DB Shard 1/2/3 → Horizontal Partitioning
Horizontal Partitioning → Cache
Horizontal Partitioning → Response
API Gateway → User
API Gateway → Vertical Partitioning
Vertical Partitioning → Cache
Cache → Vertical Partitioning
Vertical Partitioning → DB Table A/B/C
DB Table A/B/C → Vertical Partitioning
Vertical Partitioning → Cache
Vertical Partitioning → Response
API Gateway → User
Failure Scenario
Component Fails:Cache
Impact:Cache misses increase, causing more direct database queries and higher latency
Mitigation:System continues working by querying databases directly; cache rebuilds over time
Architecture Quiz - 3 Questions
Test your understanding
Which component directs requests to either horizontal or vertical partitioning?
ACache
BLoad Balancer
CAPI Gateway
DUser
Design Principle
This architecture shows how horizontal and vertical partitioning improve database scalability by splitting data either by rows or columns. Using a cache reduces database load and latency. The API Gateway cleanly routes requests to the appropriate partitioning strategy, enabling flexible data access patterns.

Practice

(1/5)
1. Which of the following best describes horizontal partitioning in system design?
easy
A. Combining multiple tables into one large table
B. Splitting a database table into multiple tables by columns
C. Splitting a database table into multiple tables by rows
D. Duplicating the entire database for backup

Solution

  1. Step 1: Understand horizontal partitioning

    Horizontal partitioning means dividing data by rows, so each partition holds a subset of rows.
  2. Step 2: Compare with other options

    Vertical partitioning splits by columns, combining tables merges data, and duplication is for backup, not partitioning.
  3. Final Answer:

    Splitting a database table into multiple tables by rows -> Option C
  4. Quick Check:

    Horizontal partitioning = splitting by rows [OK]
Hint: Rows split = horizontal, columns split = vertical [OK]
Common Mistakes:
  • Confusing horizontal with vertical partitioning
  • Thinking partitioning means duplicating data
  • Mixing partitioning with database backup
2. Which syntax correctly describes vertical partitioning?
easy
A. Splitting data by rows into multiple tables
B. Splitting data by columns into multiple tables
C. Merging rows from different tables
D. Backing up the entire database

Solution

  1. Step 1: Define vertical partitioning

    Vertical partitioning splits a table by columns, separating attributes into different tables.
  2. Step 2: Eliminate incorrect options

    Options about rows, merging, or backup do not describe vertical partitioning.
  3. Final Answer:

    Splitting data by columns into multiple tables -> Option B
  4. Quick Check:

    Vertical partitioning = splitting by columns [OK]
Hint: Columns split = vertical partitioning [OK]
Common Mistakes:
  • Confusing vertical with horizontal partitioning
  • Assuming partitioning means merging tables
  • Mixing partitioning with backup processes
3. Consider a user database table with columns: 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?
medium
A. Table 1: id, password; Table 2: name, email, address
B. Table 1: id, name; Table 2: email, password, address
C. Table 1: id, name, password; Table 2: email, address
D. Table 1: id, name, email; Table 2: id, password, address

Solution

  1. Step 1: Identify sensitive data columns

    Password and address are sensitive, so they should be separated from general info.
  2. 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.
  3. Final Answer:

    Table 1: id, name, email; Table 2: id, password, address -> Option D
  4. Quick Check:

    Vertical partitioning splits columns, sensitive data separated [OK]
Hint: Sensitive columns go to separate table in vertical partitioning [OK]
Common Mistakes:
  • Mixing rows and columns in partitioning
  • Not separating sensitive data properly
  • Splitting columns unevenly without reason
4. A system uses horizontal partitioning by user region but experiences slow queries on user emails. What is the likely cause and fix?
medium
A. Cause: Partitioning by rows only; Fix: Add vertical partitioning to separate email column
B. Cause: Partitioning by columns only; Fix: Add horizontal partitioning by region
C. Cause: No partitioning; Fix: Add horizontal partitioning by email
D. Cause: Too many partitions; Fix: Merge all partitions into one

Solution

  1. Step 1: Analyze the problem

    Horizontal partitioning splits by rows (region), but email queries are slow because email column is not separated.
  2. Step 2: Suggest fix

    Adding vertical partitioning to separate email column improves query speed on emails.
  3. Final Answer:

    Cause: Partitioning by rows only; Fix: Add vertical partitioning to separate email column -> Option A
  4. Quick Check:

    Slow email queries fixed by vertical partitioning [OK]
Hint: Slow column queries? Add vertical partitioning [OK]
Common Mistakes:
  • Confusing cause with partition type
  • Suggesting wrong partitioning fix
  • Ignoring query patterns in design
5. You design a large e-commerce database with millions of orders. You want to improve performance by splitting data. Which approach is best and why?
hard
A. Use horizontal partitioning by customer ID and vertical partitioning by payment info for balanced load
B. Use vertical partitioning by splitting order details and customer info into separate tables to reduce row size
C. Use no partitioning and rely on caching for performance
D. Use horizontal partitioning by order date to distribute rows across servers, improving query speed on recent orders

Solution

  1. 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.
  2. 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.
  3. Final Answer:

    Use horizontal partitioning by customer ID and vertical partitioning by payment info for balanced load -> Option A
  4. Quick Check:

    Combine horizontal and vertical partitioning for large data [OK]
Hint: Combine horizontal and vertical for big, complex data [OK]
Common Mistakes:
  • Using only one partitioning type for complex data
  • Ignoring query patterns and data distribution
  • Relying solely on caching without partitioning
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard