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 উন্নত করা যায়।

Walid11 min read10 views
Database Partitioning, Sharding ও Replication: Large-Scale Database কীভাবে Scale করে?

একটি 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 = 12345

Database 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 Servers

System-এর 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
   ↓
Replica

Primary-তে 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 C

Data logicalভাবে ভাগ করা হয়েছে।

Sharding

Database Cluster
│
├── Server A → Shard A
├── Server B → Shard B
└── Server C → Shard C

Data বিভিন্ন 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 C

Replication:

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 3

Replication

প্রতিটি 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 C

Sharding

Products এত বেশি হয়ে গেল যে এক warehouse যথেষ্ট নয়।

Warehouse A
Warehouse B
Warehouse C

Products বিভিন্ন 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 হিসেবে চিন্তা করতে সাহায্য করে।