MongoDBAdvanced
Transactions (Multi-Document ACID)
Session দিয়ে একাধিক document-এর atomic পরিবর্তন: startTransaction, commit, abort — বাংলায়।
8টি অংশবাংলা ভাষায়
Transaction কবে দরকার
- টাকা ট্রান্সফার — এক account থেকে subtract, অন্য account-এ add
- Order + stock + payment — তিনটা-ই সফল বা তিনটাই fail
- একাধিক collection/document যেখানে পারস্পরিক নির্ভরতা গুরুত্বপূর্ণ
Session + transaction
Fund transferjs
js
async function transfer(fromId, toId, amount) {
const session = await mongoose.startSession();
session.startTransaction();
try {
// session দেওয়া অপারেশন atomic — সব সফল না হলে কেউই save হয় না
await Account.updateOne(
{ _id: fromId },
{ $inc: { balance: -amount } },
{ session }
);
await Account.updateOne(
{ _id: toId },
{ $inc: { balance: amount } },
{ session }
);
await session.commitTransaction();
console.log("Success");
} catch (err) {
await session.abortTransaction();
console.error("Rolled back:", err.message);
throw err;
} finally {
session.endSession();
}
}save() সহ transaction
create + save sessionjs
js
const session = await mongoose.startSession();
session.startTransaction();
try {
const user = new User({ name: "রহিম", email: "rahim@example.com" });
await user.save({ session });
const profile = new Profile({ user: user._id, bio: "..." });
await profile.save({ session });
await session.commitTransaction();
} catch (err) {
await session.abortTransaction();
} finally {
session.endSession();
}Transaction limit
Transaction-এর শর্ত
Transaction চলে Replica Set/Atlas-এ, standalone MongoDB-তে নয়। Sessions ৬০ সেকেন্ড inactive থাকলে timeout হয়। ছোট, দ্রুত কাজের জন্য transaction এড়িয়ে — শুধু সত্যিই atomic-এর দরকার হলে ব্যবহার করুন।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।