Database Management System (DBMS) / Clustering, Partitioning and Sharding

What is Sharding?

Sharding is a type of horizontal partitioning in which a large database is split into smaller, faster, more manageable pieces called shards. Each shard holds a portion of the total dataset, and the shards are distributed across multiple servers or machines.


🔹 Purpose of Sharding

Sharding is mainly used to:

  • ✅ Scale out large databases horizontally.

  • ✅ Handle massive data volumes and user loads.

  • ✅ Improve performance, availability, and fault tolerance.


🔸 How Sharding Works

Let’s say you have a user database with 1 billion users. Instead of putting all users in a single table on one server, you split them like this:

Shard

Users Covered

🟢 Shard 1

User IDs 1–100M

🔵 Shard 2

User IDs 100M–200M

🟣 Shard 3

User IDs 200M–300M

Each shard is stored on a different server. When a query comes in, the system checks which shard it should go to based on a shard key (e.g., user_id).


🔹 Key Concepts

Term

Meaning

Shard

A partition of data stored on a separate server

Shard Key

A field used to decide how to distribute data (e.g., user_id)

Routing Layer

Determines which shard a query should go to

Replication

Each shard is usually replicated for backup and high availability


🔸 Types of Sharding

Type

Description

Example

Range-Based

Based on value ranges

User IDs 1–1000 in Shard 1, 1001–2000 in Shard 2

Hash-Based

Hash of a key decides the shard

hash(user_id) % 4

Geo/Category-Based

Based on regions or categories

Users from India in one shard, US in another


🧠 Example (MongoDB Sharding)

  1. You choose a shard key, say user_id.

  2. MongoDB splits data based on user_id.

  3. Each shard stores only its range of users.

  4. A mongos router handles incoming queries and routes them to the correct shard.

sh.enableSharding("myDatabase")
sh.shardCollection("myDatabase.users", { user_id: 1 })

🔸 Advantages of Sharding

Benefit

Explanation

✅ Scalability

Distribute data across many machines

✅ High Performance

Reduces load on any single server

✅ High Availability

If one shard fails, others still work

✅ Efficient Storage

Shards can be distributed geographically


🔺 Challenges in Sharding

Challenge

Description

❌ Complexity

More difficult to manage, deploy, and troubleshoot

❌ Choosing the Right Shard Key

Poor choices can lead to unbalanced shards

❌ Cross-Shard Queries

Slower and more resource-heavy

❌ Data Rebalancing

When adding/removing shards, data must be moved around


🔚 Summary

  • Sharding is a horizontal scaling technique that splits large datasets across multiple servers.

  • It enables faster reads/writes, greater storage capacity, and better system availability.

  • It is used in NoSQL systems like MongoDB, Cassandra, and also in SQL systems with manual or built-in sharding support.