> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/databases.md).

# Databases

&#x20;সিস্টেম ডিজাইন করতে গেলে Database  খুব গুরুত্বপূর্ণ একটি বিষয়। এটি মূলত একটি  Storage যেখানে সফটওয়্যারের ডাটা সঠিকভাবে সংরক্ষণ, পরিচালনা ও প্রক্রিয়াকরণ করা হয়। সহজ ভাষায় বলতে গেলে, ডাটাবেস হলো সফটওয়্যারের মেমরি, যেখানে ব্যবহারকারীর তথ্য সংরক্ষিত থাকে।

***

### **ডাটাবেস কী এবং কেন প্রয়োজন?**

ডাটাবেস হলো এমন একটি Structured Data Collection, যেখানে তথ্য এমনভাবে সংরক্ষণ করা হয় যাতে দ্রুত অ্যাক্সেস ও ব্যবহারের সুবিধা পাওয়া যায়।

কেন প্রয়োজন?

* Data Storage: অ্যাপ্লিকেশন বন্ধ হয়ে গেলেও ডাটা হারিয়ে যায় না।
* Fast Retrieval: ডাটাবেস ব্যবহার করে সহজেই নির্দিষ্ট তথ্য খুঁজে পাওয়া যায়।
* Multi-User Access: একই সময়ে অনেক ব্যবহারকারী ডাটাবেস থেকে ডাটা Read ও Write করতে পারে।
* Data Security & Backup: ডাটাবেস তথ্য সংরক্ষণ ও নিরাপদ রাখার জন্য বিভিন্ন প্রযুক্তি ব্যবহার করে।

***

### **Types of Databases**

#### **Relational Database - RDBMS**

এটি সবচেয়ে জনপ্রিয় এবং বহুল ব্যবহৃত ডাটাবেস, যেখানে ডাটা টেবিল (Table) আকারে সংরক্ষণ করা হয় এবং Relation (সম্পর্ক) দ্বারা সংযুক্ত থাকে।

**উদাহরণ:**

* MySQL
* PostgreSQL
* Microsoft SQL Server
* Oracle Database

**বৈশিষ্ট্য:**

* Table ভিত্তিক Data Storage (Row & Column)
* Structured Query Language (SQL) ব্যবহার করে Data Manage করা হয়
* ACID Properties  নিশ্চিত করে ডাটার নির্ভরযোগ্যতা

**উদাহরণ টেবিল (User Data):**

<table><thead><tr><th width="85.6666259765625">ID</th><th width="103.66668701171875">Name</th><th width="338.33331298828125">Email</th><th width="141.3333740234375">Age</th></tr></thead><tbody><tr><td>1</td><td>Arif</td><td><a href="mailto:arif@email.com">arif@email.com</a></td><td>25</td></tr><tr><td>2</td><td>Jamil</td><td><a href="mailto:jamil@email.com">jamil@email.com</a></td><td>30</td></tr></tbody></table>

***

#### **Non-Relational (NoSQL) Database**

এই ধরনের ডাটাবেস Flexible Data Storage পদ্ধতি ব্যবহার করে, যেখানে ডাটা Table-ভিত্তিক নয় বরং JSON, Key-Value, Graph, Document ইত্যাদি ফরম্যাটে সংরক্ষণ করা হয়।

**উদাহরণ:**

* MongoDB (Document-based)
* Redis (Key-Value)
* Cassandra (Column-Family)
* Neo4j (Graph-based)

**কেন ব্যবহার করা হয়?**

* Flexible Schema (Structure পরিবর্তন করা সহজ)
* High Scalability (বড় সফটওয়্যারে ব্যবহারযোগ্য)
* High-Speed Query Processing (দ্রুত তথ্য পাওয়া যায়)

**MongoDB-এর JSON ডাটা স্ট্রাকচার উদাহরণ:**

```json
{
  "id": 1,
  "name": "Arif",
  "email": "arif@email.com",
  "age": 25
}
```

***

#### **In-Memory Database**

এই ধরনের ডাটাবেস RAM (Random Access Memory) এ ডাটা সংরক্ষণ করে, যা সাধারণ ডাটাবেসের তুলনায় অনেক দ্রুত কাজ করে।

**উদাহরণ:**

* Redis
* Memcached

**ব্যবহার:**

* Caching System (ওয়েবসাইটের লোডিং টাইম কমানোর জন্য)
* Real-time Data Processing

***

### **ডাটাবেস ডিজাইনের মূল নীতিমালা**

**Data Normalization**

Normalization হলো ডাটাবেসকে অতিরিক্ত তথ্য পুনরাবৃত্তি (Redundancy) থেকে মুক্ত রাখা এবং সঠিক সম্পর্ক (Relation) তৈরি করা।\
Example: User এবং Order টেবিল আলাদা করে রাখা।

#### **Indexing এবং Query Optimization**

Index তৈরি করলে ডাটা Search দ্রুত হয়\
Query অপ্টিমাইজ করলে Performance বাড়ে

#### **Data Security এবং Backup System**

Access Control: User Permission দেওয়া\
Encryption: ডাটা সুরক্ষিত রাখা\
Backup Strategy: ব্যাকআপ প্ল্যান তৈরি করা

***

### **কোন ডাটাবেস বেছে নেবেন?**

✔ ছোট-মাঝারি প্রজেক্ট?  MySQL / PostgreSQL\
✔ Big Data / High Traffic?  MongoDB / Cassandra\
✔ Real-time Processing?  Redis / In-Memory DB

আপনার Project এর চাহিদা বুঝে সঠিক ডাটাবেস নির্বাচন করা সবচেয়ে গুরুত্বপূর্ণ বিষয়। আপনি যদি সঠিকভাবে ডাটাবেস ডিজাইন করতে পারেন, তাহলে Performance, Scalability, এবং Security নিশ্চিত করতে পারবেন।
