Skip to content
intermediatePhase 45 · Databases

Partitioning

Split large tables by range, hash, or list for manageability.

45m
0 problems
Topic Progress0%

Range Partitioning

Range partitioning divides data based on value ranges.

How Range Partitioning Works

Table: orders
Partition by: created_at

Partition 2024-Q1: Jan-Mar 2024
Partition 2024-Q2: Apr-Jun 2024
Partition 2024-Q3: Jul-Sep 2024
Partition 2024-Q4: Oct-Dec 2024

Range Partitioning Example

-- PostgreSQL
CREATE TABLE orders (
    id SERIAL,
    user_id INTEGER,
    amount DECIMAL,
    created_at TIMESTAMP
) PARTITION BY RANGE (created_at);

CREATE TABLE orders_2024_q1 PARTITION OF orders
    FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');

CREATE TABLE orders_2024_q2 PARTITION OF orders
    FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');

Range Partitioning Benefits

Benefit Description
Query efficiency Scan only relevant partitions
Data management Easy archival of old partitions
Maintenance Drop old partitions quickly
Time-series Natural fit for time-based data

Range Partitioning Challenges

1. Hotspots
   - Recent partitions get more traffic
   - Current quarter is busiest

2. Uneven Distribution
   - Some partitions may be larger
   - Uneven data distribution

3. Partition Management
   - Must create new partitions proactively
   - Future partitions needed

When to Use Range Partitioning

Use when:
- Time-series data (logs, events)
- Data has natural range
- Queries often filter by range
- Old data can be archived/dropped

Examples:
- Order history by date
- Log entries by timestamp
- Sensor data by time

Partition Pruning

Query: SELECT * FROM orders WHERE created_at > '2024-04-01'

Without pruning: Scan all partitions
With pruning: Scan only Q2, Q3, Q4 partitions

Partition pruning = query only relevant partitions

Partition Maintenance

-- Create new partition
CREATE TABLE orders_2025_q1 PARTITION OF orders
    FOR VALUES FROM ('2025-01-01') TO ('2025-04-01');

-- Drop old partition (fast delete)
DROP TABLE orders_2023_q1;

-- Detach for archival
ALTER TABLE orders DETACH PARTITION orders_2023_q1;

Hash Partitioning

Hash partitioning distributes data using a hash function.

How Hash Partitioning Works

Table: users
Partition by: hash(user_id)

Partition 0: hash(user_id) % 4 = 0
Partition 1: hash(user_id) % 4 = 1
Partition 2: hash(user_id) % 4 = 2
Partition 3: hash(user_id) % 4 = 3

user_id 1 → hash(1) % 4 = 1 → Partition 1
user_id 2 → hash(2) % 4 = 2 → Partition 2

Hash Partitioning Example

-- PostgreSQL
CREATE TABLE users (
    id SERIAL,
    name VARCHAR(100),
    email VARCHAR(255)
) PARTITION BY HASH (id);

CREATE TABLE users_p0 PARTITION OF users
    FOR VALUES WITH (MODULUS 4, REMAINDER 0);

CREATE TABLE users_p1 PARTITION OF users
    FOR VALUES WITH (MODULUS 4, REMAINDER 1);

CREATE TABLE users_p2 PARTITION OF users
    FOR VALUES WITH (MODULUS 4, REMAINDER 2);

CREATE TABLE users_p3 PARTITION OF users
    FOR VALUES WITH (MODULUS 4, REMAINDER 3);

Hash Partitioning Benefits

Benefit Description
Even distribution Hash function spreads data evenly
No hotspots Uniform access pattern
Simple Easy to implement
Scalable Add more partitions as needed

Hash Partitioning Challenges

1. Range queries inefficient
   - Must scan all partitions
   - No partition pruning for ranges

2. Rebalancing
   - Adding partitions requires rehashing
   - Data movement needed

3. No ordering
   - Data not sorted within partitions

When to Use Hash Partitioning

Use when:
- Even distribution needed
- Primary access is by key
- Range queries not important
- High write throughput needed

Examples:
- User sessions by session_id
- Product catalog by product_id
- Session storage by user_id

Hash vs Range Partitioning

Aspect Hash Range
Distribution Even May be uneven
Range queries Inefficient Efficient
Key lookups Efficient Efficient
Hotspots None Recent ranges
Ordering No Yes

List Partitioning

List partitioning divides data based on discrete values.

How List Partitioning Works

Table: users
Partition by: country

Partition US: country = 'US'
Partition EU: country IN ('UK', 'DE', 'FR')
Partition Asia: country IN ('JP', 'CN', 'IN')
Partition Other: all other countries

List Partitioning Example

-- PostgreSQL
CREATE TABLE users (
    id SERIAL,
    name VARCHAR(100),
    country VARCHAR(2)
) PARTITION BY LIST (country);

CREATE TABLE users_us PARTITION OF users
    FOR VALUES IN ('US', 'CA', 'MX');

CREATE TABLE users_eu PARTITION OF users
    FOR VALUES IN ('UK', 'DE', 'FR', 'ES');

CREATE TABLE users_asia PARTITION OF users
    FOR VALUES IN ('JP', 'CN', 'IN', 'KR');

List Partitioning Benefits

Benefit Description
Logical grouping Data organized by category
Compliance Data residency requirements
Query efficiency Query specific category
Easy management Drop/backup by category

List Partitioning Challenges

1. Uneven distribution
   - Some lists may have more data
   - US partition much larger than others

2. Adding new values
   - Must add new partition
   - Or handle in 'other' partition

3. Cross-partition queries
   - Queries across lists scan multiple partitions

When to Use List Partitioning

Use when:
- Data has clear categories
- Compliance requirements (data residency)
- Queries filter by category
- Different retention policies per category

Examples:
- Users by country/region
- Orders by status
- Products by category
- Multi-tenant systems

Multi-Level Partitioning

-- Combine partitioning types
CREATE TABLE orders (
    id SERIAL,
    user_id INTEGER,
    created_at TIMESTAMP,
    region VARCHAR(10)
) PARTITION BY LIST (region)
  SUBPARTITION BY RANGE (created_at);

-- Level 1: By region
-- Level 2: By date within region

Partitioning Best Practices

  1. Choose partition key wisely: Based on query patterns
  2. Monitor partition sizes: Ensure even distribution
  3. Plan for growth: Create partitions proactively
  4. Archive old partitions: Drop or detach old data
  5. Test partition pruning: Verify queries use partitions

Practice Problems

0/3solved
Design Partitioning System

Design a scalable Partitioning system. Cover high-level architecture, data model, and API design.

Solution
// Complete system design:
// - Functional + Non-functional requirements
// - Capacity estimation
// - Data model (SQL/NoSQL choice)
// - API endpoints
// - Component architecture
// - Scaling strategy
// - Monitoring & reliability
Partitioning Scaling

How would you scale Partitioning to handle 10x the current load? Identify bottlenecks and solutions.

Solution
// Scaling approach:
// 1. Load balancing
// 2. Database sharding/replication
// 3. Cache layer (Redis)
// 4. CDN for static assets
// 5. Async processing (queues)
// 6. Microservices decomposition
Partitioning Failure Modes

Analyze potential failure modes for Partitioning and design mitigation strategies.

Solution
// Failure mitigation:
// 1. Redundancy (multi-AZ)
// 2. Circuit breakers
// 3. Retry with backoff
// 4. Dead letter queues
// 5. Health checks
// 6. Graceful degradation

Quiz

1. What is range partitioning?

Question 1 options

2. When should you use hash partitioning?

Question 2 options

3. What is partition pruning?

Question 3 options

4. What is list partitioning?

Question 4 options

Flashcards

Question

What is range partitioning?

Answer

Dividing data by value ranges (dates, numbers). Good for time-series data. Enables partition pruning for range queries. Challenge: hotspots in recent partitions.

Question

What is hash partitioning?

Answer

Distributing data using hash function. Provides even distribution, no hotspots. Challenge: range queries inefficient, rebalancing hard.

Question

What is list partitioning?

Answer

Dividing data by discrete values (country, status). Good for compliance and logical grouping. Challenge: uneven distribution.

Question

What is partition pruning?

Answer

Query optimization where database only scans relevant partitions based on partition key, skipping irrelevant ones. Improves query performance.

Question

What is Partitioning?

Answer

Partitioning is a key concept in system design.

Revision Notes

Key Takeaways

  • 1.Range partitioning for time-series and range queries
  • 2.Hash partitioning for even distribution and key lookups
  • 3.List partitioning for compliance and logical grouping
  • 4.Partition pruning optimizes queries to scan only relevant partitions
  • 5.Choose partition key based on query patterns

Interview Tips

  • Discuss partitioning strategy based on data access patterns
  • Explain partition pruning benefits for query performance
  • Consider compliance requirements for data residency
  • Plan partition management for data growth

Cheat Sheet

Partitioning - Cheat Sheet

Range Partitioning:

  • By value ranges (dates, numbers)
  • Good for time-series
  • Enables partition pruning
  • Challenge: hotspots

Hash Partitioning:

  • By hash function
  • Even distribution
  • Good for key lookups
  • Challenge: range queries

List Partitioning:

  • By discrete values
  • Good for compliance
  • Logical grouping
  • Challenge: uneven distribution

Best Practices:

  1. Choose key based on queries
  2. Monitor partition sizes
  3. Plan for growth
  4. Archive old partitions
  5. Test partition pruning