ArangoDB-তে Transaction এমন একটি পদ্ধতি যা মাল্টি-ডকুমেন্ট বা মাল্টি-কালেকশন অপারেশন সুনির্দিষ্ট এবং নিরাপদভাবে পরিচালনা করতে সহায়তা করে। AQL-এ Transaction ব্যবহার করে আপনি ডেটা সংশোধন বা আপডেটের সময় ডেটার সঙ্গতি (Consistency) এবং নির্ভুলতা নিশ্চিত করতে পারেন।
Transaction এর মূল ধারণা
Transaction মানে একটি নির্দিষ্ট কার্যক্রমের সেট যা সম্পূর্ণ বা একত্রে ব্যর্থ হয়। এটি ACID (Atomicity, Consistency, Isolation, Durability) বৈশিষ্ট্য মেনে চলে।
যদি একটি Transaction ব্যর্থ হয়, তবে এর প্রতিটি পরিবর্তন রোলব্যাক (Rollback) হয়, অর্থাৎ পূর্বের অবস্থায় ফিরে যায়।
AQL-এ Transaction ব্যবহারের প্রক্রিয়া
১. Transaction শুরু করা
Transaction একটি জাভাস্ক্রিপ্ট অবজেক্টের মাধ্যমে চালানো হয়, যা AQL কোয়েরি ধারণ করে।
২. Transaction এর জন্য কালেকশন নির্ধারণ করা
Transaction চালানোর আগে কোন Collection গুলোতে কাজ হবে তা নির্ধারণ করতে হয়।
৩. Transaction কোয়েরি সম্পাদন করা
Transaction এর মধ্যবর্তী কোয়েরিগুলো একত্রে চালানো হয়।
উদাহরণ: AQL-এ Transaction
১. একটি Basic Transaction
db._executeTransaction({
collections: {
write: ["Products", "Orders"]
},
action: function () {
const db = require('@arangodb').db;
// Order তৈরি করা
db.Orders.insert({
productId: "12345",
quantity: 2,
status: "Pending"
});
// Product স্টকের সংখ্যা হালনাগাদ করা
db.Products.update("12345", { stock: 10 });
}
});
এখানে:
- Collections:
ProductsএবংOrdersকালেকশন Transaction-এর অংশ। - Insert এবং Update: নতুন অর্ডার যোগ করা এবং পণ্যের স্টক হালনাগাদ করা।
- যদি কোয়েরির মধ্যে কোনো একটি ব্যর্থ হয়, তাহলে সব পরিবর্তন বাতিল হবে।
২. Transaction-এ AQL ব্যবহার
db._executeTransaction({
collections: {
read: ["Users"],
write: ["Payments"]
},
action: function () {
const db = require('@arangodb').db;
const query = `
FOR user IN Users
FILTER user.status == 'Active'
INSERT {
userId: user._key,
amount: 100,
status: 'Paid'
} INTO Payments
`;
db._query(query);
}
});
এখানে:
- Read Collections:
Usersথেকে ডেটা পড়া। - Write Collections:
Paymentsএ নতুন ডেটা যোগ করা। - AQL কোয়েরি: Active ব্যবহারকারীদের জন্য পেমেন্ট এন্ট্রি তৈরি করা।
৩. Multi-Document Transaction
db._executeTransaction({
collections: {
write: ["Accounts", "Transactions"]
},
action: function () {
const db = require('@arangodb').db;
// Accounts থেকে টাকা ডেবিট করা
db.Accounts.update("account1", { balance: db.Accounts.document("account1").balance - 500 });
// Accounts এ টাকা ক্রেডিট করা
db.Accounts.update("account2", { balance: db.Accounts.document("account2").balance + 500 });
// Transactions এ লেনদেনের তথ্য সংরক্ষণ
db.Transactions.insert({
from: "account1",
to: "account2",
amount: 500,
status: "Success"
});
}
});
Transaction ব্যবহারের সুবিধা
ডেটার সঙ্গতি (Consistency)
- একাধিক ডকুমেন্ট বা কালেকশন সংশোধনের সময় ডেটার নির্ভুলতা নিশ্চিত করে।
Atomicity
- সমস্ত কাজ সফলভাবে সম্পন্ন হলে তবেই Transaction সম্পন্ন হয়; অন্যথায় পূর্বের অবস্থায় ফিরে যায়।
Concurrency
- একাধিক Transaction এর মধ্যে সংঘর্ষ এড়িয়ে Isolation নিশ্চিত করে।
Error Handling
- Transaction ব্যর্থ হলে পরিবর্তনসমূহ রোলব্যাক হয়।
Transaction Logging এবং Error Handling
Transaction এর সময় যদি কোনো ত্রুটি ঘটে, তাহলে এটি একটি Rollback ট্রিগার করে, এবং সমস্ত পরিবর্তন পূর্বের অবস্থায় ফিরে যায়।
উদাহরণ: Error Handling
try {
db._executeTransaction({
collections: { write: ["Orders"] },
action: function () {
const db = require('@arangodb').db;
db.Orders.insert({ orderId: "123", status: "Pending" });
throw "Manual Error"; // ইচ্ছাকৃত ত্রুটি
}
});
} catch (err) {
console.error("Transaction ব্যর্থ হয়েছে:", err);
}
সারাংশ
AQL-এ Transaction ব্যবহার বড় এবং জটিল ডেটাবেজ অপারেশনের সময় ডেটার সঙ্গতি এবং নির্ভুলতা নিশ্চিত করে। এটি ACID বৈশিষ্ট্য মেনে চলে এবং ডেভেলপারদের ডেটা ম্যানেজমেন্ট আরও সহজ এবং নির্ভরযোগ্য করে তোলে। ArangoDB-তে Transaction ব্যবহার করে আপনি নিরাপদ এবং কার্যকর ডেটাবেজ অপারেশন করতে পারবেন।
Read more