Home CS Fundamentals Database Sharding: Strategies and Patterns for Scalable Systems
Advanced 6 min · July 13, 2026

Database Sharding: Strategies and Patterns for Scalable Systems

Learn database sharding strategies and patterns to scale your database horizontally.

N
Naren Founder & Principal Engineer

20+ years shipping production systems from the metal up. Drawn from code that ran under real load.

Follow
Production
production tested
July 13, 2026
last updated
2,165
articles · all by Naren
Before you start⏱ 15-20 min read
  • Understanding of basic database concepts (tables, queries, indexes).
  • Familiarity with SQL (CREATE, SELECT, INSERT).
  • Basic knowledge of distributed systems (CAP theorem, consistency models).
 ● Production Incident 🔎 Debug Guide ⚙ Triage Commands
Quick Answer
  • Sharding splits a large database into smaller, independent partitions called shards.
  • Each shard holds a subset of data and runs on a separate server.
  • Common strategies: range-based, hash-based, directory-based, and geographic sharding.
  • Sharding improves scalability and performance but adds complexity in queries and maintenance.
  • Choose a sharding key carefully to avoid hotspots and ensure even data distribution.
✦ Definition~90s read
What is Database Sharding?

Database sharding is a technique that splits a large database into smaller, independent databases called shards, each running on separate servers, to achieve horizontal scalability.

Imagine a library with millions of books.
Plain-English First

Imagine a library with millions of books. Instead of one librarian managing all books (which would be slow), you split the books into separate rooms by genre. Each room has its own librarian. When you need a book, you go to the correct room. This is sharding: dividing data across multiple servers to handle more load and speed up access.

As your application grows, a single database server eventually becomes a bottleneck. Queries slow down, writes become contentious, and storage limits loom. Database sharding offers a path to horizontal scalability by partitioning your data across multiple independent databases (shards). Each shard operates as its own database, handling a subset of the data. This tutorial dives into the core sharding strategies—range-based, hash-based, directory-based, and geographic—with practical SQL examples and real-world trade-offs. You'll learn how to choose a sharding key, handle cross-shard queries, and avoid common pitfalls. By the end, you'll be equipped to design a sharded system that scales gracefully under load.

What is Database Sharding?

Database sharding is a horizontal partitioning technique that splits a large database into smaller, independent databases called shards. Each shard holds a subset of the data and runs on a separate server instance. The goal is to distribute load and overcome the limitations of a single server. Sharding is often used in large-scale applications like social networks, e-commerce platforms, and SaaS products. Unlike vertical scaling (adding more power to a single server), sharding scales out by adding more servers. This approach improves write throughput, read performance, and storage capacity. However, it introduces complexity in query routing, data consistency, and maintenance. The key to successful sharding is choosing an appropriate sharding key—the column used to determine which shard a row belongs to. A poor key can lead to uneven data distribution, hotspots, and performance bottlenecks.

shard_creation.sqlSQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- Example: Creating shards for a user table
-- Shard 1: users with user_id 1-10000
CREATE DATABASE shard_1;
USE shard_1;
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

-- Shard 2: users with user_id 10001-20000
CREATE DATABASE shard_2;
USE shard_2;
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);
Output
Databases created successfully.
🔥Sharding vs Partitioning
📊 Production Insight
In production, sharding is often combined with replication for fault tolerance. Each shard may have a primary and multiple replicas.
🎯 Key Takeaway
Sharding splits data across independent databases to scale horizontally, but requires careful key selection to avoid hotspots.

Range-Based Sharding

Range-based sharding divides data based on a range of values of the sharding key. For example, users with IDs 1-10000 go to shard 1, 10001-20000 to shard 2, and so on. This strategy is simple to implement and allows efficient range queries within a shard. However, it can lead to uneven data distribution if the key values are not uniformly distributed. For instance, if new users are assigned increasing IDs, the latest shard may receive all writes, becoming a hotspot. Range sharding also makes rebalancing difficult because splitting a range requires moving large amounts of data. It is best suited for data that is naturally ordered and where access patterns are predictable, such as time-series data partitioned by date.

range_sharding.sqlSQL
1
2
3
4
5
6
7
8
9
10
11
12
-- Range-based sharding: determine shard for user_id
-- Application logic (pseudocode in SQL)
SELECT CASE
    WHEN user_id BETWEEN 1 AND 10000 THEN 'shard_1'
    WHEN user_id BETWEEN 10001 AND 20000 THEN 'shard_2'
    WHEN user_id BETWEEN 20001 AND 30000 THEN 'shard_3'
    ELSE 'shard_4'
END AS shard;

-- Querying a specific user
-- Application routes to correct shard
SELECT * FROM shard_2.users WHERE user_id = 15000;
Output
Shard determined by range.
⚠ Hotspot Risk
📊 Production Insight
In production, range sharding is often used for time-series data where each shard covers a time period (e.g., daily shards). This allows easy archival of old shards.
🎯 Key Takeaway
Range sharding is simple but prone to hotspots and uneven distribution; use when data is naturally ordered and access is balanced.

Hash-Based Sharding

Hash-based sharding applies a hash function to the sharding key to determine the shard. This ensures a uniform distribution of data across shards, reducing the risk of hotspots. Common hash functions include MD5, SHA-1, or a simple modulo operation. For example, shard = hash(user_id) % number_of_shards. This strategy works well for write-heavy workloads because writes are spread evenly. However, it makes range queries inefficient because data is scattered across shards. Also, adding or removing shards requires rehashing and moving data (re-sharding). Consistent hashing can mitigate this by minimizing data movement. Hash-based sharding is widely used in systems like Cassandra and DynamoDB.

hash_sharding.sqlSQL
1
2
3
4
5
6
7
8
9
10
11
12
-- Hash-based sharding using modulo
-- Application computes shard
-- Example: 4 shards, shard = user_id % 4
SELECT user_id % 4 AS shard_id;

-- Insert into appropriate shard
-- For user_id = 15000, shard = 15000 % 4 = 0 -> shard_0
INSERT INTO shard_0.users (user_id, name, email)
VALUES (15000, 'Alice', 'alice@example.com');

-- Query: must compute shard again
SELECT * FROM shard_0.users WHERE user_id = 15000;
Output
Data evenly distributed across shards.
💡Consistent Hashing
📊 Production Insight
Many NoSQL databases use hash-based sharding by default. For relational databases, you may need to implement the routing logic in your application layer.
🎯 Key Takeaway
Hash sharding provides even distribution but complicates range queries and re-sharding; use for write-heavy, key-value access patterns.

Directory-Based Sharding

Directory-based sharding uses a lookup table (directory) to map each shard key to a specific shard. This offers flexibility: you can change the mapping without moving data, and you can assign different shards to different keys based on custom logic. For example, you might map high-value customers to dedicated shards. The downside is that the directory becomes a single point of failure and a performance bottleneck if not cached. It also adds latency for each query (one extra lookup). Directory-based sharding is useful when data distribution is uneven or when you need to support dynamic shard allocation. It is often used in combination with other strategies.

directory_sharding.sqlSQL
1
2
3
4
5
6
7
8
9
10
11
12
13
-- Directory table mapping shard keys to shards
CREATE TABLE shard_directory (
    shard_key VARCHAR(100) PRIMARY KEY,
    shard_name VARCHAR(100)
);

INSERT INTO shard_directory VALUES ('user_1', 'shard_1');
INSERT INTO shard_directory VALUES ('user_2', 'shard_2');

-- Application queries directory first
SELECT shard_name FROM shard_directory WHERE shard_key = 'user_1';
-- Then queries the actual shard
SELECT * FROM shard_1.users WHERE user_id = 1;
Output
Shard name retrieved from directory.
🔥Caching the Directory
📊 Production Insight
In production, the directory itself should be replicated and highly available. Consider using a distributed key-value store like etcd or ZooKeeper.
🎯 Key Takeaway
Directory sharding offers flexibility but introduces a lookup bottleneck; cache the directory to mitigate performance impact.

Geographic Sharding

Geographic sharding distributes data based on the geographic location of users or data. For example, users in North America go to a shard in US-East, European users to a shard in EU-West, etc. This reduces latency by placing data closer to users and can help comply with data residency regulations (e.g., GDPR). Geographic sharding is often combined with other strategies (e.g., hash within a region). The main challenge is handling users who move or travel, and ensuring consistent data across regions if needed. This strategy is common in global applications like social media and streaming services.

geo_sharding.sqlSQL
1
2
3
4
5
6
7
8
9
10
-- Geographic sharding: map region to shard
-- Application determines region from user's IP or profile
SELECT CASE
    WHEN region = 'NA' THEN 'shard_na'
    WHEN region = 'EU' THEN 'shard_eu'
    WHEN region = 'APAC' THEN 'shard_apac'
END AS shard;

-- Insert user into appropriate shard
INSERT INTO shard_na.users (user_id, name, region) VALUES (1, 'John', 'NA');
Output
User inserted into North America shard.
⚠ Data Residency
📊 Production Insight
Many CDNs use geographic sharding for content delivery. For databases, consider using a multi-master replication setup across regions.
🎯 Key Takeaway
Geographic sharding reduces latency and aids compliance but adds complexity for cross-region data access.

Choosing a Sharding Key

The sharding key is the most critical design decision. It determines how data is distributed and how queries are routed. A good sharding key should: (1) evenly distribute data to avoid hotspots, (2) support common query patterns (ideally, most queries target a single shard), (3) be stable (rarely changes), and (4) allow for future growth. Common choices include user ID, customer ID, or a hash of a natural key. Avoid using columns with low cardinality (e.g., gender) or that are frequently updated. Test your key choice with realistic data volumes. Also consider the trade-off between even distribution and query locality. For example, sharding by user ID spreads writes evenly but may scatter a user's related data across shards if not careful. Denormalization can help keep related data together.

sharding_key_example.sqlSQL
1
2
3
4
5
6
7
8
9
-- Example: Sharding by customer_id (hash-based)
-- Application computes shard: shard = customer_id % 10
-- This ensures even distribution

-- Query for a specific customer
SELECT * FROM shard_3.orders WHERE customer_id = 123;

-- But querying all orders for a customer is efficient (single shard)
-- However, joining orders with payments may cross shards if payments are sharded differently
Output
Single shard query.
💡Composite Sharding Key
📊 Production Insight
In production, monitor shard sizes and query latency. If a shard grows too large, you may need to split it. Plan for rebalancing from the start.
🎯 Key Takeaway
Choose a sharding key that balances data evenly and aligns with your query patterns; avoid keys that cause hotspots or frequent updates.

Handling Cross-Shard Queries

Cross-shard queries (queries that need data from multiple shards) are expensive and should be minimized. They require scatter-gather: send the query to all shards, collect results, and combine. This increases latency and load. Strategies to reduce cross-shard queries include: (1) denormalization to keep related data in the same shard, (2) using a separate read-only replica for aggregations, (3) implementing application-level joins, and (4) using a distributed query engine (e.g., Presto, Spark). For transactions that span shards, consider using two-phase commit or eventual consistency with compensation logic. In many cases, it's better to design your data model to avoid cross-shard operations altogether.

cross_shard_query.sqlSQL
1
2
3
4
5
6
7
8
-- Cross-shard query: find orders for customers in multiple shards
-- Application must query each shard and merge

-- Query shard_1
SELECT * FROM shard_1.orders WHERE customer_id IN (1,2,3);
-- Query shard_2
SELECT * FROM shard_2.orders WHERE customer_id IN (4,5,6);
-- Then merge results in application
Output
Results from each shard merged.
⚠ Performance Impact
📊 Production Insight
In production, set timeouts for cross-shard queries to avoid cascading failures. Use async patterns for non-critical aggregations.
🎯 Key Takeaway
Minimize cross-shard queries by denormalizing and keeping related data together; use scatter-gather only when necessary.

Rebalancing and Resharding

Over time, data distribution may become uneven due to growth or changing access patterns. Rebalancing (moving data between shards) or resharding (changing the number of shards) may be necessary. This is a complex operation that must be done carefully to avoid downtime. Strategies include: (1) using consistent hashing to minimize data movement, (2) performing rebalancing in the background with throttling, (3) using a double-write pattern during migration (write to both old and new shards), and (4) using a proxy layer that handles routing changes. Tools like Vitess, Citus, and MongoDB's sharding features provide automated rebalancing. Plan for rebalancing from the start by designing your system to handle dynamic shard membership.

rebalancing.sqlSQL
1
2
3
4
5
6
7
8
9
10
11
12
-- Example: Adding a new shard and moving data
-- Step 1: Create new shard
CREATE DATABASE shard_5;

-- Step 2: Migrate a subset of data from shard_1 to shard_5
-- (Simplified: copy rows where user_id % 5 = 0)
INSERT INTO shard_5.users SELECT * FROM shard_1.users WHERE user_id % 5 = 0;

-- Step 3: Delete migrated data from shard_1
DELETE FROM shard_1.users WHERE user_id % 5 = 0;

-- Step 4: Update routing logic to include shard_5
Output
Data migrated successfully.
🔥Downtime vs Complexity
📊 Production Insight
In production, test rebalancing in a staging environment first. Monitor replication lag and throttling to avoid overload.
🎯 Key Takeaway
Rebalancing is inevitable; design for it by using consistent hashing and automated tools to minimize disruption.

Distributed SQL: Automatic Sharding in CockroachDB, Spanner, Yugabyte

Distributed SQL databases like CockroachDB, Google Spanner, and YugabyteDB offer automatic sharding, abstracting the complexity of manual shard management. These systems use a consistent hash ring or range-based partitioning to distribute data across nodes, with automatic rebalancing and fault tolerance. For example, in CockroachDB, data is split into ranges (default ~64MB) and distributed across nodes. When a range grows, it automatically splits; when nodes are added or removed, ranges are rebalanced without downtime. This is achieved through a consensus protocol (Raft) ensuring strong consistency. Below is an example of creating a table in CockroachDB that is automatically sharded by the primary key:

``sql CREATE TABLE users ( user_id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name STRING, email STRING UNIQUE, created_at TIMESTAMP ); ``

CockroachDB automatically shards the users table by user_id. Queries are routed to the appropriate shard based on the key. For range scans, the system may fan out to multiple shards. Spanner uses a similar approach with interleaved tables and global indexes. YugabyteDB offers both hash and range sharding with automatic splitting. These databases handle cross-shard transactions using distributed transactions (e.g., Percolator in Spanner). The key benefit is that developers write standard SQL without manual sharding logic, though careful schema design (e.g., choosing a good primary key) is still important to avoid hot spots.

cockroachdb_auto_sharding.sqlSQL
1
2
3
4
5
6
CREATE TABLE users (
    user_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name STRING,
    email STRING UNIQUE,
    created_at TIMESTAMP
);
🔥Automatic Sharding in Distributed SQL
📊 Production Insight
In production, monitor range sizes and split thresholds. For CockroachDB, use SHOW RANGES to inspect distribution. Avoid monotonically increasing keys (e.g., auto-increment) to prevent write hotspots.
🎯 Key Takeaway
Distributed SQL databases like CockroachDB and Spanner automate sharding, rebalancing, and fault tolerance, allowing developers to write standard SQL without manual shard management.

Application-Level Sharding vs Database-Level Sharding

Sharding can be implemented at the application level or the database level. Application-level sharding means the application code determines which database shard to use, often via a sharding library or custom logic. For example, the application might hash a user ID to select a shard and then connect to the appropriate database. This approach gives full control but requires the application to manage connections, handle cross-shard queries, and rebalance data. Below is a Python example using a simple hash-based shard router:

```python import hashlib

def get_shard(user_id, num_shards=4): hash_val = int(hashlib.md5(user_id.encode()).hexdigest(), 16) return hash_val % num_shards

# Usage shard_id = get_shard("user123") db = connect_to_shard(shard_id) ```

Database-level sharding is handled by the database system itself, such as in distributed SQL databases or middleware like Vitess. The application sends queries to a single endpoint, and the database routes them to the correct shard. This reduces application complexity but may limit flexibility. For example, in Vitess, you define a VSchema that maps tables to shards, and Vitess handles routing and aggregation. The choice depends on your team's expertise and requirements: application-level offers more control but higher maintenance, while database-level simplifies development but may have vendor lock-in. Hybrid approaches also exist, such as using a proxy layer like ProxySQL or MaxScale.

app_level_sharding.pySQL
1
2
3
4
5
6
7
8
9
import hashlib

def get_shard(user_id, num_shards=4):
    hash_val = int(hashlib.md5(user_id.encode()).hexdigest(), 16)
    return hash_val % num_shards

# Usage
shard_id = get_shard("user123")
db = connect_to_shard(shard_id)
💡Choosing Between Application and Database Sharding
📊 Production Insight
In production, application-level sharding often requires a configuration service (e.g., ZooKeeper) to manage shard mappings. For database-level sharding, monitor query latency to ensure the routing layer isn't a bottleneck.
🎯 Key Takeaway
Application-level sharding gives full control but adds complexity, while database-level sharding simplifies the application but may limit flexibility. Choose based on your team's expertise and scalability needs.

Resharding and Rebalancing: Strategies for Zero Downtime

Resharding (changing the number of shards or sharding key) and rebalancing (redistributing data across shards) are critical for scaling. Zero-downtime strategies include logical sharding, consistent hashing, and using a proxy layer. One common approach is to use a two-phase process: first, add new shards and start replicating data from old shards to new ones (dual writes). Then, once caught up, switch reads to the new shards. For example, with a consistent hash ring, you can add virtual nodes and gradually migrate data. Below is a simplified SQL example for a migration table that tracks rebalancing:

``sql CREATE TABLE shard_migration ( id SERIAL PRIMARY KEY, old_shard INT, new_shard INT, key_range_start INT, key_range_end INT, status VARCHAR(20) DEFAULT 'pending' ); ``

Tools like Vitess use a 'MoveTables' workflow to reshard with minimal downtime. Another strategy is to use a shard proxy that supports online schema changes and data migration. For range-based sharding, you can split a hot shard by dividing its key range. For hash-based sharding, you can increase the number of shards by rehashing (e.g., from 4 to 8 shards) using a double-write pattern during migration. The key is to ensure data consistency and minimal impact on users. Techniques like read-only mode for old shards during final cutover can help. Always test the migration process in a staging environment.

resharding_migration.sqlSQL
1
2
3
4
5
6
7
8
CREATE TABLE shard_migration (
    id SERIAL PRIMARY KEY,
    old_shard INT,
    new_shard INT,
    key_range_start INT,
    key_range_end INT,
    status VARCHAR(20) DEFAULT 'pending'
);
⚠ Zero-Downtime Resharding Requires Careful Planning
📊 Production Insight
In production, automate resharding workflows using tools like Vitess or CockroachDB's built-in rebalancing. For custom solutions, use a configuration service to manage shard mappings and a monitoring system to track migration progress.
🎯 Key Takeaway
Zero-downtime resharding and rebalancing can be achieved through dual writes, consistent hashing, and proxy-based migration, but requires careful planning and testing.
● Production incidentPOST-MORTEMseverity: high

The Hot Shard That Brought Down a Social Media Feed

Symptom
Users experienced slow feed loading, timeouts, and eventually errors when accessing the main feed. The system was unresponsive for 20 minutes.
Assumption
The team assumed the load was evenly distributed across shards because they used a hash-based sharding strategy on user ID.
Root cause
A celebrity with millions of followers posted simultaneously. All followers' feed requests hit the shard containing that celebrity's data (since the celebrity's user ID was the sharding key). That single shard became a hotspot, overwhelmed by read requests.
Fix
The team implemented a two-level sharding: first by user ID for writes, then by a secondary key (e.g., content ID) for reads. They also added a cache layer to absorb read spikes for popular content.
Key lesson
  • Always monitor shard load distribution; hotspots can appear unexpectedly.
  • Consider read-heavy workloads separately from write-heavy workloads when designing sharding keys.
  • Use caching to reduce read pressure on hot shards.
  • Plan for capacity scaling per shard, not just overall.
  • Implement automatic rebalancing to handle skewed data distribution.
Production debug guideSymptom to Action4 entries
Symptom · 01
High latency on specific queries
Fix
Check if those queries are hitting a single shard. Use query logs to identify the shard key value and verify distribution.
Symptom · 02
Uneven disk usage across shards
Fix
Analyze data distribution by shard. If skewed, consider rebalancing or changing the sharding key.
Symptom · 03
Cross-shard queries timing out
Fix
Review query patterns. Optimize by denormalizing or using a separate read-only replica for aggregations.
Symptom · 04
Application errors: 'Shard not found'
Fix
Verify the shard mapping configuration. Ensure the routing logic is consistent across all application instances.
★ Quick Debug Cheat SheetCommon sharding issues and immediate actions.
Hot shard (high CPU/IO on one shard)
Immediate action
Identify the shard key causing the hotspot. Temporarily route read traffic to replicas or cache.
Commands
SELECT shard_id, COUNT(*) FROM request_log GROUP BY shard_id;
SHOW PROCESSLIST;
Fix now
Add caching for the hot data or split the shard into smaller shards.
Data inconsistency across shards+
Immediate action
Check if transactions span shards without proper coordination. Use distributed transaction coordinator.
Commands
SELECT * FROM shard_1.orders WHERE id = 123;
SELECT * FROM shard_2.orders WHERE id = 123;
Fix now
Implement two-phase commit or use eventual consistency with reconciliation jobs.
Slow cross-shard joins+
Immediate action
Avoid joins across shards. Denormalize or use application-level aggregation.
Commands
EXPLAIN SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id;
Check query plan for shard routing.
Fix now
Redesign schema to keep related data in the same shard.
StrategyDistributionRange QueriesRebalancing ComplexityUse Case
Range-BasedUneven (hotspots possible)EfficientHighTime-series data
Hash-BasedEvenInefficientMedium (with consistent hashing)Key-value workloads
Directory-BasedFlexibleDepends on mappingLow (change mapping)Dynamic allocation
GeographicBy regionEfficient per regionMediumGlobal applications
⚙ Quick Reference
11 commands from this guide
FileCommand / CodePurpose
shard_creation.sqlCREATE DATABASE shard_1;What is Database Sharding?
range_sharding.sqlSELECT CASERange-Based Sharding
hash_sharding.sqlSELECT user_id % 4 AS shard_id;Hash-Based Sharding
directory_sharding.sqlCREATE TABLE shard_directory (Directory-Based Sharding
geo_sharding.sqlSELECT CASEGeographic Sharding
sharding_key_example.sqlSELECT * FROM shard_3.orders WHERE customer_id = 123;Choosing a Sharding Key
cross_shard_query.sqlSELECT * FROM shard_1.orders WHERE customer_id IN (1,2,3);Handling Cross-Shard Queries
rebalancing.sqlCREATE DATABASE shard_5;Rebalancing and Resharding
cockroachdb_auto_sharding.sqlCREATE TABLE users (Distributed SQL
app_level_sharding.pydef get_shard(user_id, num_shards=4):Application-Level Sharding vs Database-Level Sharding
resharding_migration.sqlCREATE TABLE shard_migration (Resharding and Rebalancing

Key takeaways

1
Sharding horizontally scales databases by splitting data across independent servers.
2
Choose a sharding key that ensures even distribution and aligns with query patterns.
3
Minimize cross-shard queries through denormalization and careful schema design.
4
Plan for rebalancing and resharding from the start to avoid future pain.
5
Monitor shard health and load distribution continuously in production.

Common mistakes to avoid

4 patterns
×

Choosing a sharding key that causes hotspots

×

Ignoring cross-shard query performance

×

Not planning for rebalancing

×

Using sharding as a silver bullet

INTERVIEW PREP · PRACTICE MODE

Interview Questions on This Topic

Q01SENIOR
Explain the difference between range-based and hash-based sharding. When...
Q02SENIOR
How do you handle transactions that span multiple shards?
Q03SENIOR
What is consistent hashing and how does it help with sharding?
Q04JUNIOR
Describe a scenario where sharding might not be the right solution.
Q01 of 04SENIOR

Explain the difference between range-based and hash-based sharding. When would you use each?

ANSWER
Range-based sharding divides data by key ranges; it's simple but can cause hotspots. Hash-based sharding uses a hash function for even distribution; it's better for write-heavy workloads but complicates range queries. Use range for ordered data (e.g., time-series) and hash for uniform distribution.
FAQ · 5 QUESTIONS

Frequently Asked Questions

01
What is the difference between sharding and partitioning?
02
How do I choose a sharding key?
03
Can I change the number of shards after deployment?
04
What are the downsides of sharding?
05
Is sharding only for NoSQL databases?
N
Naren Founder & Principal Engineer

20+ years shipping production systems from the metal up. Drawn from code that ran under real load.

Follow
Verified
production tested
July 13, 2026
last updated
2,165
articles · all by Naren
🔥

That's . Mark it forged?

6 min read · try the examples if you haven't

Previous
SQL vs NoSQL: Database Decision Guide
1 / 1 ·
Next
Database Replication: Synchronous and Asynchronous