> 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/fault-tolerance/idempotency.md).

# Idempotency

### Idempotency কী ?

Idempotency হল এমন একটা Property, যেখানে একটা Operation একাধিকবার Execute করলেও Output একই থাকে। এটা **API, Distributed System, Database** এ Data Consistency & Reliability Maintain করতে গুরুত্বপূর্ণ Role পালন করে।

***

### Idempotency কেন দরকার?

**Duplicate Effect কমাতে** – এক API বারবার Call করলে Data Corruption বা Unintended Side Effect যেন না হয়।\
**Network Failure Handle করতে** – কোনো Request Retry হলে Data যেন Duplicate না হয়।\
**System Reliability বাড়াতে** – Client Retry করলে System যেন একবারের মতোই Behave করে।

***

### **Idempotency এর কিছু Example**

**1. HTTP Methods & Idempotency**

<table><thead><tr><th width="140">HTTP Method</th><th width="137.66668701171875">Idempotent?</th><th>ব্যাখ্যা</th></tr></thead><tbody><tr><td><strong>GET</strong></td><td>Yes</td><td>Data Fetch করলে System এর কোন পরিবর্তন হয় না।</td></tr><tr><td><strong>PUT</strong></td><td>Yes</td><td>Same Data দিয়ে Multiple Update করলেও Final Result এক থাকে।</td></tr><tr><td><strong>DELETE</strong></td><td>Yes</td><td>একবার Delete হয়ে গেলে আবার Delete করলে System এর Extra Effect পড়ে না।</td></tr><tr><td><strong>POST</strong></td><td>No</td><td>প্রতিবার New Data Create হয়, তাই Idempotent না।</td></tr></tbody></table>

**2. Database Transactions**

* `INSERT INTO users (name, email) VALUES ('John', 'john@example.com');`
  * **Idempotent না** (একই Query বারবার চালালে Multiple Rows Insert হবে)।
* `UPDATE users SET email = 'john@example.com' WHERE id = 1;`
  * **Idempotent** (একই Update Query একাধিকবার চালালেও Same Result থাকবে)।

**3. Payment Processing**

* **Idempotent না** হলে – User যদি এক API বারবার Call করে, তাহলে একাধিকবার Payment হয়ে যেতে পারে।
* **Idempotent হলে** – Transaction ID বা Idempotency Key ব্যবহার করে নিশ্চিত করা হয়, এক API একবারের বেশি Process হবে না।

### **Idempotency Implement করার উপায়**

**Idempotency Key ব্যবহার করুন**

* প্রতিটি Request এর জন্য Unique Identifier (Transaction ID, UUID) ব্যবহার করুন।
* যেসব Request আগেই Process হয়েছে, সেগুলোর জন্য Same Response Return করুন।

**Database Constraint দিন**

* **UNIQUE Constraint** ব্যবহার করে Duplicate Data Insert আটকান।

**Cache ব্যবহার করুন**

* আগের Process হওয়া Request গুলো Cache এ রেখে Duplicate Execution আটকানো যায়।

**Safe API Design করুন**

* **PUT vs POST** – যেখানে সম্ভব **PUT** Use করুন, কারণ এটা Idempotent।

***

Idempotency হল System এর **Consistency, Fault Tolerance & Reliability** নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ। **API, Database, Distributed System** এর মতো জায়গায় Idempotency Follow করলে System আরো Robust & Secure হয়।
