Transaction কি?
Transaction হল একটি ডেটাবেস অপারেশন বা কাজের একটি গ্রুপ যা একত্রে সম্পন্ন হয়। অর্থাৎ, একটি transaction-এ একাধিক ডেটাবেস অপারেশন থাকে এবং এদের সকল অপারেশন সফলভাবে সম্পন্ন না হওয়া পর্যন্ত একে পুরোপুরি সম্পন্ন বা বাতিল করা হয় না। Transaction ব্যবহৃত হয় ডেটাবেসের ACID (Atomicity, Consistency, Isolation, Durability) গুণাবলী নিশ্চিত করার জন্য।
- Atomicity (অ্যাটমিকতা): একটি transaction সম্পূর্ণভাবে সফল হলে সব কিছু কমিট হবে, আর যদি কিছু ত্রুটি ঘটে তবে সব কিছু রিভার্ট হবে (roll back)।
- Consistency (সঙ্গতি): একটি transaction সম্পূর্ণভাবে ডেটাবেসের সঠিক অবস্থায় রাখবে।
- Isolation (বিচ্ছিন্নতা): প্রতিটি transaction আলাদা আলাদা কাজ করবে এবং অন্য কোন transaction এর কাজকে প্রভাবিত করবে না।
- Durability (স্থিতিশীলতা): একবার একটি transaction সফলভাবে কমিট হলে, তা পরবর্তী সময়ে পরিবর্তন হবে না এবং সিস্টেম ক্র্যাশ বা ত্রুটির পরও অপরিবর্তিত থাকবে।
TypeORM-এ Transactions এর প্রয়োজনীয়তা
TypeORM-এ transactions ব্যবহৃত হয় যখন একাধিক ডেটাবেস অপারেশন একত্রে করা হয় এবং আপনি নিশ্চিত করতে চান যে, এগুলি একসাথে সফলভাবে সম্পন্ন হবে অথবা কোনো কারণে সমস্যা হলে সেগুলি প্রত্যাহার (rollback) হয়ে যাবে। TypeORM transactions নিশ্চিত করে যে ডেটাবেসের অবস্থা সঠিক থাকে এবং কোনো ডেটাবেস অপ্রত্যাশিত অবস্থায় চলে না।
উদাহরণস্বরূপ, যখন আপনি একটি বিলিং সিস্টেম পরিচালনা করছেন, এবং আপনি একটি ট্রানজেকশন তৈরি করতে চান যা দুটি ডেটাবেস অপারেশনকে একসাথে সম্পন্ন করবে:
- একটি অর্ডার তৈরি করুন।
- একটি পেমেন্ট প্রক্রিয়া করুন।
এখন যদি পেমেন্ট সফলভাবে সম্পন্ন না হয়, তবে আপনার অর্ডারটি তৈরি না হয়ে, সব কিছু rollback হয়ে যাবে। এইভাবে, একটি সফল পেমেন্ট ছাড়া কোনো অর্ডার তৈরি হবে না।
TypeORM-এ Transaction ব্যবহারের উপকারিতা
- ডেটার অখণ্ডতা রক্ষা: Transactions ব্যবহারের মাধ্যমে ডেটাবেসের অবস্থা সর্বদা সঠিক থাকে। কোনো একটি অপারেশন ব্যর্থ হলে, পুরো ট্রানজেকশন রিভার্ট (rollback) হয়ে যাবে।
- ডেটা সিঙ্ক্রোনাইজেশন: যখন একাধিক অপারেশন একে অপরের উপর নির্ভরশীল, তখন ট্রানজেকশন ব্যবহার করা হয় যাতে সমস্ত অপারেশন একসাথে সম্পন্ন হয়।
- ব্যর্থতার পরে অটোমেটিক রোলব্যাক: যদি একটি অপারেশন ব্যর্থ হয়, তবে পুরোটাই রোলব্যাক হবে, ফলে ডেটাবেসের অবস্থার কোনো সমস্যা হবে না।
- পারফরম্যান্স অপটিমাইজেশন: একাধিক অপারেশন একসাথে এক transaction-এ করা হলে, এটি ডেটাবেসের উপর কম লোড ফেলে এবং পারফরম্যান্সে উন্নতি ঘটায়।
TypeORM-এ Transaction ব্যবহারের পদ্ধতি
TypeORM-এ transaction ব্যবহারের জন্য QueryRunner ব্যবহার করা হয়। QueryRunner একটি ক্লাস যা একটি একক ট্রানজেকশন তৈরি করে এবং সব ডেটাবেস অপারেশন একসাথে পরিচালনা করে।
উদাহরণ:
import { createConnection, getManager } from "typeorm";
import { User } from "./entity/User";
import { Post } from "./entity/Post";
createConnection().then(async connection => {
const queryRunner = connection.createQueryRunner();
// Start a transaction
await queryRunner.startTransaction();
try {
// Perform the operations in the transaction
const user = new User();
user.name = "John Doe";
await queryRunner.manager.save(user); // Save user using the query runner
const post = new Post();
post.title = "My first post";
post.user = user;
await queryRunner.manager.save(post); // Save post using the query runner
// Commit the transaction if everything is successful
await queryRunner.commitTransaction();
} catch (error) {
// If any operation fails, rollback the transaction
await queryRunner.rollbackTransaction();
console.log("Transaction failed and rolled back");
} finally {
// Release the query runner, whether the transaction was successful or not
await queryRunner.release();
}
}).catch(error => console.log(error));
এখানে, আমরা QueryRunner ব্যবহার করে একটি ট্রানজেকশন শুরু করছি। সমস্ত ডেটাবেস অপারেশন (যেমন save() ফাংশন) আমরা queryRunner.manager এর মাধ্যমে করছি। যদি সব কিছু সফলভাবে হয়, তবে আমরা commitTransaction() কল করি। অন্যথায়, যদি কোনো ত্রুটি ঘটে, তবে rollbackTransaction() কল করি, যাতে সমস্ত পরিবর্তন রিভার্ট হয়।
সারাংশ
Transaction TypeORM-এ একটি অত্যন্ত গুরুত্বপূর্ণ কৌশল যা একাধিক ডেটাবেস অপারেশনকে একত্রে পরিচালনা করতে সহায়তা করে। এটি ACID গুণাবলী রক্ষা করে এবং ডেটাবেসের অবস্থাকে সঠিক রাখে। TypeORM-এ QueryRunner ব্যবহার করে আপনি সহজেই ট্রানজেকশন শুরু, পরিচালনা এবং রোলব্যাক করতে পারেন। ট্রানজেকশন ব্যবহারের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে, আপনার অ্যাপ্লিকেশনের সমস্ত ডেটাবেস অপারেশন একত্রে সফলভাবে সম্পন্ন হবে এবং কোনো ত্রুটি ঘটলে সমস্ত পরিবর্তন বাতিল হয়ে যাবে।
Read more