AI
Database Partitioning, Sharding ও Replication: Large-Scale Database কীভাবে Scale করে?
Partitioning, Sharding ও Replication হলো scalable database architecture-এর গুরুত্বপূর্ণ তিনটি concept। Partitioning data-কে ভাগ করে, Sharding data-কে একাধিক server-এ distribute করে এবং Replication একই data-এর multiple copy রাখে—যার মাধ্যমে system-এর performance, scalability, availability ও reliability উন্নত করা যায়।

একটি application যখন ছোট থাকে, তখন একটি database server দিয়েই প্রায় সব কাজ সুন্দরভাবে করা যায়। কয়েক হাজার বা কয়েক লাখ user, moderate traffic এবং তুলনামূলক ছোট dataset হলে সাধারণত database scaling নিয়ে খুব বেশি চিন্তা করতে হয় না।
কিন্তু application বড় হতে শুরু করলে পরিস্থিতি দ্রুত পরিবর্তিত হয়।
ধরুন আপনার application-এ:
- কোটি কোটি user
- শত কোটি order/message
- প্রতি সেকেন্ডে হাজার হাজার request
- একই সময়ে প্রচুর read ও write operation
- 24/7 availability-এর requirement
তখন একটি মাত্র database server-এর উপর পুরো system নির্ভর করানো ধীরে ধীরে bottleneck তৈরি করতে পারে।
এই সমস্যা সমাধানের জন্য distributed database architecture-এ আমরা তিনটি গুরুত্বপূর্ণ concept দেখতে পাই:
Partitioning, Sharding এবং Replication।
তিনটিই database-এর performance, scalability এবং reliability উন্নত করতে সাহায্য করে। কিন্তু তাদের কাজ এক নয়।
সবচেয়ে সহজভাবে বললে:
Partitioning = Data-কে ভাগ করা
Sharding = Data-কে বিভিন্ন server-এ ভাগ করা
Replication = একই Data-এর একাধিক copy রাখা
এখন প্রতিটি concept বিস্তারিতভাবে বোঝা যাক।
---
১. প্রথমে বুঝি Database Scaling কী?
Database scaling মূলত দুইভাবে করা যায়:
Vertical Scaling
একটি server-কেই আরও powerful করা।
যেমন:
8 CPU
32 GB RAM
1 TB SSDথেকে:
32 CPU
128 GB RAM
4 TB SSDএতে existing database server আরও বেশি workload handle করতে পারে।
কিন্তু এর একটি সীমা আছে।
Server যত powerful করতে থাকবেন, hardware cost তত বাড়বে এবং এক পর্যায়ে physical limitation-এ পৌঁছে যাবেন।
তখন আসে:
Horizontal Scaling
একটি server-এর ক্ষমতা অসীমভাবে বাড়ানোর পরিবর্তে একাধিক server ব্যবহার করা।
Server 1
Server 2
Server 3
Server 4এখান থেকেই Sharding এবং Replication-এর মতো architecture গুরুত্বপূর্ণ হয়ে ওঠে।
---
২. Partitioning কী?
Partitioning হলো একটি বড় dataset বা table-কে logicalভাবে ছোট ছোট অংশে ভাগ করা।
ধরুন আপনার orders table-এ ১০ কোটি record আছে।
orders
--------------------------------
100,000,000 recordsএত বড় table নিয়ে query, indexing এবং maintenance করা কঠিন হতে পারে।
তাই table-টিকে বিভিন্ন partition-এ ভাগ করা যায়।
যেমন:
Orders Table
├── 2023 Partition
├── 2024 Partition
├── 2025 Partition
└── 2026 Partitionএখানে গুরুত্বপূর্ণ বিষয় হলো:
Partitioning করলেই data বিভিন্ন server-এ চলে যায় না।
এগুলো একই database system-এর মধ্যে logicalভাবে আলাদা অংশ হতে পারে।
---
৩. Partitioning কীভাবে কাজ করে?
ধরুন আমাদের একটি table আছে:
orders
id | customer_id | amount | order_dateআমরা order_date অনুযায়ী partition করলাম।
orders
│
├── orders_2023
├── orders_2024
├── orders_2025
└── orders_2026এখন query:
SELECT *
FROM orders
WHERE order_date >= '2026-01-01';Database বুঝতে পারে যে পুরোনো partition-গুলোতে search করার প্রয়োজন নেই।
তাই শুধুমাত্র relevant partition-এ কাজ করতে পারে।
এটাকে সাধারণভাবে partition pruning বলা হয়।
এর ফলে বড় dataset-এর query efficiency অনেক ক্ষেত্রে উন্নত হতে পারে।
---
৪. Partitioning-এর ধরন
Database system অনুযায়ী implementation ভিন্ন হতে পারে। তবে সাধারণভাবে কয়েকটি জনপ্রিয় partitioning strategy হলো:
Range Partitioning
কোনো range অনুযায়ী data ভাগ করা।
Partition 1 → ID 1-1M
Partition 2 → ID 1M-2M
Partition 3 → ID 2M-3Mঅথবা date অনুযায়ী:
2024
2025
2026---
List Partitioning
নির্দিষ্ট category বা value অনুযায়ী ভাগ করা।
Bangladesh
India
USA
UK---
Hash Partitioning
একটি hash function ব্যবহার করে data বিভিন্ন partition-এ distribute করা।
ধরুন:
hash(user_id) % 4তাহলে data বিভিন্ন partition-এ ছড়িয়ে যেতে পারে।
এটি data distribution তুলনামূলক balanced রাখতে সাহায্য করতে পারে।
---
৫. Partitioning-এর সুবিধা
Partitioning-এর প্রধান সুবিধাগুলো হলো:
Query Optimization
Relevant partition-এ query সীমাবদ্ধ করা যায়।
Maintenance
পুরোনো data আলাদা partition হিসেবে manage করা সহজ হতে পারে।
যেমন:
2023 partitionপুরোনো হলে সেটি archive বা remove করা সহজ।
Index Management
বড় একটি index-এর পরিবর্তে partition অনুযায়ী ছোট index structure ব্যবহার করা যেতে পারে।
---
৬. Partitioning-এর limitation
Partitioning সব সমস্যার সমাধান নয়।
সবচেয়ে গুরুত্বপূর্ণ বিষয়:
Partitioning সাধারণত নিজে থেকে database-এর server capacity বাড়ায় না।
যদি আপনার database server-এর CPU, RAM বা disk capacity শেষ হয়ে যায়, শুধু partitioning করলেই সেই সমস্যা সমাধান হবে না।
সেখানে Sharding দরকার হতে পারে।
---
৭. Sharding কী?
Sharding হলো dataset-কে এমনভাবে ভাগ করা যাতে data একাধিক database server বা node-এর মধ্যে distributed থাকে।
এখানে প্রতিটি server dataset-এর একটি অংশ রাখে।
ধরুন আমাদের ৩০ কোটি user আছে।
একটি database server-এর পরিবর্তে:
Shard 1
Users 1-10 Crore
Shard 2
Users 10-20 Crore
Shard 3
Users 20-30 Croreএখন প্রতিটি shard আলাদা server বা server cluster-এ থাকতে পারে।
Application
│
Sharding Layer
┌───────┼───────┐
↓ ↓ ↓
Shard 1 Shard 2 Shard 3
Server A Server B Server Cএখানে dataset distributed হয়েছে।
---
৮. Shard Key কী?
Sharding-এর সবচেয়ে গুরুত্বপূর্ণ concept হলো Shard Key।
Shard key হলো এমন একটি field যার ভিত্তিতে database সিদ্ধান্ত নেয় কোন data কোন shard-এ যাবে।
উদাহরণ:
user_idঅথবা:
tenant_idঅথবা:
regionধরুন:
user_id = 12345Database shard key-এর ভিত্তিতে determine করবে:
Shard 1এ data রাখতে হবে।
আবার:
user_id = 98234567হয়তো যাবে:
Shard 3---
৯. ভালো Shard Key কেন গুরুত্বপূর্ণ?
ভুল shard key পুরো distributed system-কে inefficient করে দিতে পারে।
ধরুন আপনি এমন একটি field ব্যবহার করলেন যার বেশিরভাগ value একই।
তাহলে:
Shard 1 → 90% Data
Shard 2 → 5% Data
Shard 3 → 5% Dataএখানে Shard 1 overloaded হয়ে যাবে।
এটাকে সাধারণভাবে hotspot বা uneven distribution-এর সমস্যা বলা হয়।
ভালো shard key ideally:
- data evenly distribute করবে
- query pattern-এর সাথে align করবে
- excessive hotspot তৈরি করবে না
- খুব বেশি cross-shard query তৈরি করবে না
---
১০. Sharding-এর মূল সুবিধা
Horizontal Scaling
সবচেয়ে বড় সুবিধা হলো database capacity একাধিক server-এ distribute করা যায়।
1 Server
↓
3 Servers
↓
10 Servers
↓
100 ServersSystem-এর architecture অনুযায়ী নতুন node যোগ করে capacity বাড়ানো সম্ভব।
Storage Scaling
একটি server-এর disk limitation-এর পরিবর্তে অনেক server-এর storage ব্যবহার করা যায়।
Load Distribution
Database workload বিভিন্ন shard-এ ভাগ হয়ে যায়।
---
১১. Sharding-এর অসুবিধা
Sharding powerful হলেও complexity অনেক বাড়ায়।
ধরুন:
Shard 1
Shard 2
Shard 3এখন application-এর একটি query যদি তিন shard-এর data দরকার হয়:
Query
↓
Shard 1
Shard 2
Shard 3
↓
Merge Resultsএতে distributed query তৈরি হয়।
তাই sharding design করার সময় application-এর query pattern খুব গুরুত্বপূর্ণ।
---
১২. এবার Replication কী?
Replication-এর উদ্দেশ্য data ভাগ করা নয়।
Replication-এর উদ্দেশ্য হলো:
একই data-এর একাধিক copy রাখা।
ধরুন:
Primary
│
├── Replica 1
└── Replica 2এখানে তিনটি node থাকতে পারে, কিন্তু প্রত্যেকটিতে একই dataset-এর copy থাকে।
---
১৩. Primary ও Replica কী?
একটি সাধারণ architecture:
Application
│
┌───────┴───────┐
↓ ↓
Primary Replica
(Write) (Read)Application সাধারণত write operation Primary-তে পাঠাতে পারে।
যেমন:
INSERT
UPDATE
DELETEতারপর Primary-এর changes replica node-গুলোর কাছে replicate হয়।
Replica-গুলো read workload handle করতে পারে—যদি architecture এবং consistency requirements তা allow করে।
---
১৪. Replication কেন দরকার?
High Availability
ধরুন Primary server হঠাৎ down হয়ে গেল।
যদি replica থাকে:
Primary ❌
Replica 1
Replica 2তাহলে system failover mechanism ব্যবহার করে অন্য node-কে primary হিসেবে নির্বাচন করতে পারে।
ফলে পুরো database service বন্ধ হয়ে যাওয়ার ঝুঁকি কমে।
---
Read Scaling
ধরুন:
100,000 requests/secএর মধ্যে:
95,000 Read
5,000 Writeতাহলে read traffic বিভিন্ন replica-তে distribute করা যেতে পারে।
Application
│
┌─────────┼─────────┐
↓ ↓ ↓
Primary Replica 1 Replica 2
Write Read Readএতে primary-এর read pressure কমতে পারে।
---
১৫. Replication-এর একটি গুরুত্বপূর্ণ বিষয়: Replication Lag
Replication সবসময় instantaneous নাও হতে পারে।
ধরুন:
Primary
│
│ 100 ms
↓
ReplicaPrimary-তে data write হওয়ার পরে replica-তে পৌঁছাতে কিছু সময় লাগতে পারে।
এটাকে Replication Lag বলা হয়।
তাই distributed system-এ কখনো কখনো এমন পরিস্থিতি হতে পারে:
Write → Primary
Immediately Read → Replica
Result → Old Dataএটি application design-এর জন্য গুরুত্বপূর্ণ বিষয়।
---
১৬. Partitioning বনাম Sharding
এখন সবচেয়ে গুরুত্বপূর্ণ comparison:
Partitioning
One Database
│
├── Partition A
├── Partition B
└── Partition CData logicalভাবে ভাগ করা হয়েছে।
Sharding
Database Cluster
│
├── Server A → Shard A
├── Server B → Shard B
└── Server C → Shard CData বিভিন্ন server/node-এ distributed হয়েছে।
সহজভাবে:
Partitioning হলো data-এর logical division।
Sharding হলো distributed infrastructure-এর মধ্যে data-এর horizontal division।
তবে বাস্তব database technology-তে terminology এবং implementation system অনুযায়ী ভিন্ন হতে পারে; কিছু database sharding-এর ভিতরে partitioning-এর মতো mechanisms ব্যবহার করে।
---
১৭. Sharding বনাম Replication
এখানেই সবচেয়ে বেশি confusion হয়।
Sharding:
Server A → Data A
Server B → Data B
Server C → Data CReplication:
Server A → Data A
Server B → Copy of Data A
Server C → Copy of Data Aঅর্থাৎ:
Sharding = different data
Replication = same data
---
১৮. Sharding + Replication একসাথে
বাস্তব বড়-scale system-এ অনেক সময় দুটো একসাথেও ব্যবহার করা হয়।
ধরুন:
Database Cluster
│
┌───────────────┼───────────────┐
↓ ↓ ↓
Shard 1 Shard 2 Shard 3
│ │ │
┌───┴───┐ ┌───┴───┐ ┌───┴───┐
↓ ↓ ↓ ↓ ↓ ↓
Primary Replica Primary Replica Primary Replicaএখানে:
Sharding
Dataset-কে তিনটি shard-এ ভাগ করেছে।
Shard 1
Shard 2
Shard 3Replication
প্রতিটি shard-এর আবার multiple copy আছে।
Shard 1
├── Primary
└── Replica
Shard 2
├── Primary
└── Replica
Shard 3
├── Primary
└── Replicaএ ধরনের architecture বড় distributed system-এ অত্যন্ত গুরুত্বপূর্ণ।
---
১৯. MongoDB-তে কীভাবে দেখা যায়?
MongoDB-তে দুটি গুরুত্বপূর্ণ concept হলো:
Replica Set
এটি মূলত replication এবং high availability-এর জন্য ব্যবহৃত হয়।
Replica Set
Primary
│
├── Secondary
└── Secondaryঅন্যদিকে:
Sharded Cluster
বড় dataset এবং workload বিভিন্ন shard-এ distribute করতে ব্যবহৃত হয়।
একটি simplified architecture:
Application
│
mongos/router
│
┌──────────┼──────────┐
↓ ↓ ↓
Shard 1 Shard 2 Shard 3
│ │ │
Replica Replica Replica
Set Set Setঅর্থাৎ MongoDB-তে:
Sharding → Horizontal Scaling
Replica Set → High Availability + Redundancy
দুটিকে একসাথে ব্যবহার করলে বড়-scale distributed architecture তৈরি করা যায়।
---
২০. একটি E-commerce Example
ধরুন আপনি একটি বড় e-commerce platform তৈরি করেছেন।
আপনার database-এ আছে:
500 Million Users
2 Billion Orders
5 Billion Messagesএখন একটি server যথেষ্ট নয়।
প্রথমে আপনি partitioning ব্যবহার করতে পারেন।
Orders
2024
2025
2026এতে বড় table manageable করা যায়।
কিন্তু storage এবং workload আরও বেড়ে গেলে:
Shard 1
Users 1-100M
Shard 2
Users 100M-200M
Shard 3
Users 200M-300Mএভাবে sharding করা যেতে পারে।
তারপর availability-এর জন্য:
Shard 1
Primary + Replicas
Shard 2
Primary + Replicas
Shard 3
Primary + Replicasএখন তিনটি concept একসাথে কাজ করছে।
---
২১. কখন কোনটি ব্যবহার করবেন?
Partitioning ব্যবহার করবেন যখন:
- Table অনেক বড়
- Data logical range অনুযায়ী ভাগ করা যায়
- Query optimization দরকার
- Data lifecycle management দরকার
---
Sharding ব্যবহার করবেন যখন:
- একটি server-এর capacity যথেষ্ট নয়
- Dataset অত্যন্ত বড়
- Horizontal scaling দরকার
- Database workload বিভিন্ন server-এ distribute করতে হবে
---
Replication ব্যবহার করবেন যখন:
- High availability দরকার
- Failover দরকার
- Data redundancy দরকার
- Read workload scale করতে হবে
---
২২. তিনটি Concept একসাথে মনে রাখার সহজ উপায়
ধরুন আপনার কাছে একটি বিশাল warehouse আছে।
Partitioning
একটি warehouse-এর ভেতরে products আলাদা section-এ ভাগ করলেন।
Warehouse
Section A
Section B
Section CSharding
Products এত বেশি হয়ে গেল যে এক warehouse যথেষ্ট নয়।
Warehouse A
Warehouse B
Warehouse CProducts বিভিন্ন warehouse-এ ভাগ হয়ে গেল।
Replication
একই গুরুত্বপূর্ণ product-এর inventory একাধিক warehouse-এ রাখলেন।
Warehouse A → Product X
Warehouse B → Product X
Warehouse C → Product Xএখন কোনো একটি warehouse unavailable হলেও অন্য warehouse থেকে product পাওয়া যাবে।
---
২৩. সবচেয়ে গুরুত্বপূর্ণ Difference
শেষবারের মতো তিনটিকে পাশাপাশি দেখলে:
| বিষয় | Partitioning | Sharding | Replication |
| ---------------------- | ---------------- | ---------------------------- | -------------------------- |
| মূল উদ্দেশ্য | Data ভাগ করা | Server-এর মধ্যে Data ভাগ করা | Data-এর Copy তৈরি করা |
| Data কি আলাদা? | হ্যাঁ | হ্যাঁ | না |
| Multiple Server দরকার? | সবসময় নয় | হ্যাঁ | সাধারণত হ্যাঁ |
| Horizontal Scaling | সাধারণত নয় | হ্যাঁ | Read scaling-এ সাহায্য করে |
| High Availability | মূল উদ্দেশ্য নয় | মূল উদ্দেশ্য নয় | প্রধান উদ্দেশ্যগুলোর একটি |
| Redundancy | না | না | হ্যাঁ |
| Complexity | কম/মাঝারি | বেশি | মাঝারি |
---
Conclusion
Database scaling বুঝতে হলে Partitioning, Sharding এবং Replication-এর পার্থক্য পরিষ্কারভাবে বোঝা অত্যন্ত গুরুত্বপূর্ণ।
Partitioning মূলত একটি বড় dataset বা table-কে logicalভাবে ছোট ছোট অংশে ভাগ করার technique। এটি query performance, indexing এবং data management সহজ করতে পারে।
Sharding হলো distributed database scaling-এর একটি গুরুত্বপূর্ণ approach, যেখানে dataset-কে বিভিন্ন database node বা server-এর মধ্যে distribute করা হয়। এর মূল লক্ষ্য হলো horizontal scalability।
অন্যদিকে Replication একই data-এর একাধিক copy তৈরি করে। এর মাধ্যমে high availability, redundancy, failover এবং read scaling অর্জন করা যায়।
সবচেয়ে সহজভাবে মনে রাখুন:
Partitioning
→ One dataset → Multiple logical parts
Sharding
→ One dataset → Multiple servers
Replication
→ One dataset → Multiple copiesআর বড় distributed system-এ এগুলো একে অপরের alternative নয়। বরং প্রয়োজন অনুযায়ী একসাথে ব্যবহার করা যায়:
Application
│
Database Router
│
┌──────────────┼──────────────┐
↓ ↓ ↓
Shard 1 Shard 2 Shard 3
│ │ │
Primary Primary Primary
│ │ │
Replicas Replicas Replicasএটাই distributed database architecture বোঝার একটি গুরুত্বপূর্ণ foundation।
একজন backend বা full-stack developer হিসেবে শুধু CRUD query জানা যথেষ্ট নয়। Application যখন production-এ বড় হতে শুরু করে, তখন data distribution, scalability, availability, consistency এবং failure handling কীভাবে কাজ করে—এসব ধারণাও বোঝা জরুরি।
Database বড় হওয়ার আগেই database architecture বুঝে রাখা একজন developer-কে শুধু application builder নয়, বরং একজন systems-oriented engineer হিসেবে চিন্তা করতে সাহায্য করে।