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
- Choose partition key wisely: Based on query patterns
- Monitor partition sizes: Ensure even distribution
- Plan for growth: Create partitions proactively
- Archive old partitions: Drop or detach old data
- Test partition pruning: Verify queries use partitions
Practice Problems
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 & reliabilityHow 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 decompositionAnalyze 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 degradationQuiz
1. What is range partitioning?
2. When should you use hash partitioning?
3. What is partition pruning?
4. What is list partitioning?
Flashcards
Question
What is range partitioning?
Click to reveal answer
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?
Click to reveal answer
Answer
Distributing data using hash function. Provides even distribution, no hotspots. Challenge: range queries inefficient, rebalancing hard.
Question
What is list partitioning?
Click to reveal answer
Answer
Dividing data by discrete values (country, status). Good for compliance and logical grouping. Challenge: uneven distribution.
Question
What is partition pruning?
Click to reveal answer
Answer
Query optimization where database only scans relevant partitions based on partition key, skipping irrelevant ones. Improves query performance.
Question
What is Partitioning?
Click to reveal answer
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:
- Choose key based on queries
- Monitor partition sizes
- Plan for growth
- Archive old partitions
- Test partition pruning