← Home
🏗Crack System Design with DSA AnimatorSystem DesignNEW
🏗 System Design›Databases & API Data Access

🧩Database Sharding & Partitioning

Scale data storage and query performance by splitting large datasets intelligently.

📌 Key IdeaPartitioning splits data within a database (often by range/hash/list) for manageability and performance. Sharding splits data across multiple database nodes for horizontal scale. The hardest part is shard-key design and rebalancing without hotspots.
📖

Definition

Partitioning organizes large tables into smaller logical pieces. Sharding distributes those pieces across separate database servers. Both aim to improve scale, performance, and operational control.

✨

Why It Matters

  • Single database node hits limits on storage, CPU, or throughput.
  • Large tables cause slower maintenance, vacuum/index operations, and backup windows.
  • Regional/user-segment traffic can be isolated for better performance and resilience.
✅

When to Use

  • Table sizes and write/read throughput exceed single-node comfort limits.
  • Natural partition keys exist (time, tenant, geography, user).
  • Operational team can support routing, observability, and migration tooling.
🚫

When NOT to Use

  • Early-stage systems where vertical scaling still meets SLOs.
  • Workloads dominated by global joins/transactions across all keys.
  • Teams without automation for migration, backup, and shard health.
💻

Code Variations

1️⃣ Range partition example (orders by month)sql
CREATE TABLE orders (
  id BIGINT PRIMARY KEY,
  user_id BIGINT NOT NULL,
  created_at TIMESTAMP NOT NULL,
  amount NUMERIC(12,2) NOT NULL
) PARTITION BY RANGE (created_at);
Common for time-series/event-like data with lifecycle/retention windows.
2️⃣ Shard routing sketchtext
shardId = hash(userId) % N
route query to db_shard_[shardId]

Example:
userId=12345 -> shard 2
Use consistent hashing or virtual shards to reduce movement during scale-out.
3️⃣ Rebalancing playbook (high level)text
1) Add new shard capacity
2) Move selected key ranges/virtual shards in batches
3) Dual-read/consistency verify
4) Switch router ownership
5) Decommission old placement
Plan for throttled migration to avoid production latency spikes.
📊

Partitioning vs Sharding

AspectPartitioningSharding
ScopeInside one database cluster/node familyAcross multiple independent database nodes/clusters
Primary goalManageability + query pruningHorizontal scale beyond single node limits
App complexityLower to mediumHigher (routing, cross-shard queries, rebalancing)
Operational complexityModerateHigh
Failure domainOften shared infraCan isolate shard-level failures
🔀

Common Confusions Cleared Up

Hot partition vs hot shard

Partitioning can still hotspot one partition if key distribution is skewed. Sharding can hotspot one node if shard key is poor or traffic is non-uniform.

Cross-shard joins are expensive

Data model should minimize cross-shard transactions/joins. Denormalization or async materialized views are often used to avoid fan-out queries.

Scale-out solves capacity, not schema/query inefficiency

Bad indexes and poor query design remain costly even after sharding; first fix query/index fundamentals.

🧪

Variations / Implementations

Partitioning strategies

Range partitioning (time/order ranges), hash partitioning (uniform spread), and list partitioning (category/tenant class). Choose based on query patterns.

Sharding strategies

Hash-based sharding for even distribution, range-based sharding for locality, and directory/lookup-based sharding for flexible control.

Shard key design

Best shard key has high cardinality, stable value, and aligns with dominant query filters. Poor key choice creates hotspots and expensive cross-shard fan-out.

⚠️

Common Mistakes / Anti-Patterns

  • Choosing low-cardinality shard key (few massive hotspots).
  • Ignoring rebalancing strategy until shard is full.
  • Random cross-shard queries from application without query discipline.
  • No per-shard metrics/alerting.
  • Assuming shard count is permanent (no future expansion design).
🎤

Interview Q&A

🧾

Quick Cheat Sheet

PartitioningSplit table inside DB for pruning/manageability.
ShardingSplit data across DB nodes for horizontal scale.
Critical decisionShard key quality determines long-term success.
Migration ruleDesign rebalancing before you need it.
🔗

Related Topics