> 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/transactions.md).

# Transactions

সফটওয়্যার ডেভেলপমেন্টে **Transaction** একটি অপরিহার্য কনসেপ্ট, বিশেষ করে ডাটাবেজ এবং ডিস্ট্রিবিউটেড সিস্টেম ডিজাইনে। যখনই কোনো সফটওয়্যার সিস্টেমের মাধ্যমে ডাটা পরিবর্তন করা হয় (যেমন: ব্যাংকে টাকা ট্রান্সফার, অনলাইন শপিং-এ অর্ডার কনফার্মেশন, অথবা ব্যবহারকারীর তথ্য আপডেট), তখন **Transaction** নিশ্চিত করে যে সবকিছু সঠিকভাবে ঘটেছে।

***

### **Transaction কী?**

Transaction হল একগুচ্ছ অপারেশন বা কাজের একটি সেট, যা একসাথে সফলভাবে সম্পন্ন হতে হবে অথবা ব্যর্থ হলে একদম প্রথম অবস্থায় ফিরে যেতে হবে (**rollback**)।

উদাহরণ:

* আপনি যদি একটি ব্যাংকের অ্যাকাউন্ট থেকে অন্য অ্যাকাউন্টে টাকা পাঠান, তাহলে ট্রান্সাকশন দুটি ধাপে হয়:\
  1️⃣ প্রথম অ্যাকাউন্ট থেকে টাকা কাটা হয়।\
  2️⃣ দ্বিতীয় অ্যাকাউন্টে টাকা যোগ হয়।

  যদি দ্বিতীয় ধাপটি কোনো কারণে ব্যর্থ হয়, তাহলে প্রথম ধাপে কাটা টাকা স্বয়ংক্রিয়ভাবে ফেরত যেতে হবে, নাহলে ব্যাংক সিস্টেমের ডাটা অসঙ্গতিপূর্ণ হয়ে যাবে।

***

### **🔹 Transaction-এর চারটি মূল বৈশিষ্ট্য (ACID Properties)**

Transaction-এর গুণগত মান বজায় রাখতে **ACID** বৈশিষ্ট্যগুলো অনুসরণ করা হয়।

#### **✅ 1. Atomicity**&#x20;

**সব না হলে কিছুই না** - মানে, একটি Transaction-এর সমস্ত ধাপ সফলভাবে সম্পন্ন হবে অথবা সম্পূর্ণ বাতিল হবে।

**উদাহরণ:**

* আপনি যদি অনলাইনে টাকা ট্রান্সফার করেন এবং মাঝপথে সার্ভার ক্র্যাশ করে, তাহলে যেন আপনার টাকা হারিয়ে না যায়!

***

#### **✅ 2. Consistency**

Transaction-এর আগে ও পরে ডাটাবেজ যেন Valid অবস্থায় থাকে।

**উদাহরণ:**

* যদি কোনো ব্যাঙ্কের একাউন্ট ব্যালেন্স নেগেটিভ হওয়া সম্ভব না হয়, তবে একটি Transaction কখনোই এমন অবস্থায় শেষ হতে পারবে না যেখানে ব্যালেন্স নেগেটিভ হয়ে যায়।

***

#### **✅ 3. Isolation**&#x20;

একাধিক Transaction একই সময়ে চললেও, তারা যেন একে অপরের ওপর প্রভাব না ফেলে।

**উদাহরণ:**

* ধরুন, দুজন ব্যক্তি একই সময়ে একই ব্যাংক একাউন্ট থেকে টাকা তোলার চেষ্টা করছে। Isolation নিশ্চিত করে যে প্রথম ব্যক্তির Transaction পুরোপুরি শেষ হওয়ার আগ পর্যন্ত দ্বিতীয়জনের Transaction অপেক্ষা করবে।

***

#### **✅ 4. Durability**

একবার কোনো Transaction সফলভাবে শেষ হলে, সেটি পার্মানেন্টলি সংরক্ষিত হবে, চাইলেও আর হারানো যাবে না।

**উদাহরণ:**

* আপনি যদি একটি পেমেন্ট সফলভাবে করেন এবং এরপর সার্ভার রিস্টার্ট হয়, তবুও পেমেন্ট রেকর্ড হারিয়ে যাবে না।

***

### **Transaction-এর ধরণ (Types of Transactions)**

#### **1️⃣ Single-Step Transactions**

একটি মাত্র ধাপে সম্পন্ন হয়।

**উদাহরণ:**

* একটি প্রোডাক্ট ইনভেন্টরিতে যোগ করা।

#### **2️⃣ Multi-Step Transactions**

একাধিক ধাপে সম্পন্ন হয়, কিন্তু সবগুলো ধাপ একসাথে সফল হতে হবে।

**উদাহরণ:**

* একটি ফান্ড ট্রান্সফার:\
  1️⃣ অ্যাকাউন্ট A থেকে টাকা কাটা হবে।\
  2️⃣ অ্যাকাউন্ট B-তে টাকা যোগ হবে।\
  3️⃣ যদি দ্বিতীয় ধাপ ব্যর্থ হয়, তাহলে প্রথম ধাপও বাতিল হবে।

#### **3️⃣ Distributed Transactions**

এটি এমন Transaction যা একাধিক সার্ভার বা ডাটাবেজে কাজ করে।

**উদাহরণ:**

* যদি একটি E-commerce প্ল্যাটফর্মে একটি অর্ডার প্লেস হয়, তখন তা পেমেন্ট গেটওয়ে, স্টক ম্যানেজমেন্ট, এবং শিপিং সার্ভারের সাথে সংযুক্ত হতে পারে।

***

### **কেনো Transaction গুরুত্বপূর্ণ?**

✅ ডাটার সুরক্ষা নিশ্চিত করে\
✅ ব্যবসার লেনদেন নির্ভরযোগ্য করে\
✅ সিস্টেম ক্র্যাশ বা ব্যর্থতা থেকেও তথ্য রক্ষা করে\
✅ ব্যবহারকারীদের জন্য নির্ভরযোগ্যতা বৃদ্ধি করে

***

### **Transaction কিভাবে ইমপ্লিমেন্ট করা হয়?**

#### **🔸 SQL ডাটাবেজে Transaction (Example)**

```sql
START TRANSACTION;

UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;

COMMIT;
```

* **START TRANSACTION** – নতুন Transaction শুরু
* **UPDATE** – একাউন্ট থেকে টাকা কাটছে এবং যোগ করছে
* **COMMIT** – সবকিছু ঠিক থাকলে Transaction সম্পন্ন

যদি কোনো কারণে কোনো ধাপে সমস্যা হয়, তাহলে **ROLLBACK** দিয়ে আগের অবস্থায় ফেরানো যায়।

```sql
ROLLBACK;
```

***

Transaction হল সফটওয়্যার ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ যা **নিরাপত্তা, এবং নির্ভরযোগ্যতা** নিশ্চিত করে। এটি ব্যবহার না করলে ডাটাবেজে **data inconsistency**, **loss of data**, এবং **security issues** তৈরি হতে পারে। তাই যে কোনো সফটওয়্যার ডিজাইন করার সময় Transaction মেকানিজম ভালোভাবে ডিজাইন করা অত্যন্ত গুরুত্বপূর্ণ!
