Transactions এবং ACID properties ডেটাবেস ম্যানেজমেন্ট সিস্টেম (DBMS) এর গুরুত্বপূর্ণ ধারণা। Transactions একাধিক ডেটাবেস অপারেশনের একটি গ্রুপ যা একত্রে কার্যকরী হতে হবে, এবং ACID হলো এমন একটি প্রোপার্টি সেট যা ডেটাবেসের ট্রানজাকশনগুলির বিশ্বস্ততা এবং নির্ভরযোগ্যতা নিশ্চিত করে।
Transaction হলো একাধিক ডেটাবেস অপারেশনের একটি ইউনিট যা একত্রে সম্পন্ন হতে হবে। একটি ট্রানজাকশন হতে পারে:
ট্রানজেকশন সাধারণত একত্রে কয়েকটি অপারেশন সম্পাদন করে এবং সফলভাবে সম্পন্ন হলে commit করা হয়, অন্যথায় rollback করা হয়। উদাহরণস্বরূপ, একটি ব্যাংক ট্রানজেকশন হতে পারে যেখানে এক অ্যাকাউন্ট থেকে টাকা স্থানান্তর করা হয় অন্য অ্যাকাউন্টে। এখানে দুটি অপারেশন ঘটবে - প্রথমে টাকা কাটা এবং দ্বিতীয়ত, টাকা জমা। এই দুটি অপারেশন একত্রে সফল হতে হবে, অথবা যদি কোন একটি অপারেশন ব্যর্থ হয়, তাহলে উভয়ই বাতিল হতে হবে।
ACID একটি অক্ষর যা Atomicity, Consistency, Isolation, এবং Durability এর সংক্ষেপ। এই চারটি প্রোপার্টি একটি ট্রানজেকশনের নির্ভরযোগ্যতা এবং নিরাপত্তা নিশ্চিত করতে সাহায্য করে।
ধরা যাক, একটি অনলাইন শপিং সিস্টেমে একটি পণ্য কেনা হচ্ছে:
Transactions হল ডেটাবেস অপারেশনের একটি ইউনিট যা একত্রে সম্পন্ন হতে হবে। ACID properties হল একটি ট্রানজেকশনের চারটি মৌলিক গুণাবলী যা নিশ্চিত করে যে ডেটাবেস অপারেশনগুলি নির্ভরযোগ্য, সুরক্ষিত এবং সঠিকভাবে কাজ করবে। ACID properties ডেটাবেসের স্থায়িত্ব, সঠিকতা এবং নিরাপত্তা বজায় রাখতে গুরুত্বপূর্ণ ভূমিকা পালন করে।
ACID (Atomicity, Consistency, Isolation, Durability) হলো একটি ডেটাবেস ট্রানজেকশনের বৈশিষ্ট্য যা ডেটাবেস সিস্টেমে ডেটা প্রসেসিংকে নির্ভরযোগ্য, সুরক্ষিত এবং সঠিক করতে সাহায্য করে। যখন একটি ট্রানজেকশন কোনো ডেটাবেসে সম্পন্ন হয়, তখন ACID বৈশিষ্ট্যগুলি নিশ্চিত করে যে ডেটাবেসে কোনো অসঙ্গতি বা সমস্যা সৃষ্টি হবে না।
এখানে প্রতিটি বৈশিষ্ট্যের বিস্তারিত ব্যাখ্যা দেওয়া হলো:
Atomicity নিশ্চিত করে যে একটি ট্রানজেকশনের সব অপারেশন একসাথে সম্পন্ন হবে অথবা একটিও সম্পন্ন হবে না। অর্থাৎ, একটি ট্রানজেকশনের মধ্যে থাকা সকল কাজগুলো একত্রে সম্পন্ন হয়, অন্যথায় কোনো কিছুই সম্পন্ন হয় না। যদি কোনো সমস্যা বা ত্রুটি ঘটে, তবে পুরো ট্রানজেকশন ব্যর্থ হয়ে যায় এবং ডেটাবেস পূর্বের অবস্থায় ফিরে আসে।
উদাহরণ: ধরা যাক, আপনি একটি ব্যাংক অ্যাকাউন্টে টাকা স্থানান্তর করছেন। যদি টাকা পাঠানোর জন্য দুটি পদক্ষেপ থাকে—একটি অ্যাকাউন্ট থেকে টাকা কাটা এবং অপরটি অন্য অ্যাকাউন্টে টাকা জমা করা—তাহলে যদি প্রথম পদক্ষেপ সফল হয় এবং দ্বিতীয়টি ব্যর্থ হয়, তাহলে অ্যাকাউন্ট থেকে কাটা টাকা পুনরুদ্ধার করা হবে, যাতে কোনো টাকা না কাটা যায় এবং স্থানান্তরটি সম্পূর্ণ হয় না। এটি Atomicity নিশ্চিত করে।
Consistency নিশ্চিত করে যে একটি ট্রানজেকশনের শেষে ডেটাবেস সবসময় একটি সঠিক এবং বৈধ অবস্থায় থাকবে। ট্রানজেকশন শুরু হওয়ার আগে এবং পরের মধ্যে ডেটাবেসের সমস্ত নিয়ম এবং শর্ত পূর্ণ হতে হবে। অর্থাৎ, কোনো ট্রানজেকশন ডেটাবেসে কোনো অসঙ্গতি তৈরি করবে না।
উদাহরণ: ধরা যাক, একটি ব্যাংক অ্যাকাউন্টে সর্বনিম্ন ব্যালেন্সের একটি সীমা রয়েছে। যদি একটি ট্রানজেকশন এমনভাবে সম্পন্ন হয় যে অ্যাকাউন্টের ব্যালেন্স সেই সীমা থেকে কমে যায়, তবে Consistency বাধাপ্রাপ্ত হবে। এই ধরনের একটি ট্রানজেকশন সঠিকভাবে সম্পন্ন হবে না এবং ব্যালেন্স সীমা অতিক্রম করতে পারবে না।
Isolation নিশ্চিত করে যে একাধিক ট্রানজেকশন একে অপরের সাথে হস্তক্ষেপ না করে কাজ করতে পারে। যখন একাধিক ট্রানজেকশন সমান্তরালভাবে চলছে, তাদের একে অপরের কার্যকলাপে কোনো প্রভাব ফেলবে না। প্রতিটি ট্রানজেকশন এমনভাবে কার্যকর হবে যে এটি অন্যান্য চলমান ট্রানজেকশনের কাছ থেকে বিচ্ছিন্ন থাকবে।
উদাহরণ: ধরা যাক, দুটি ব্যবহারকারী একসাথে দুটি পৃথক অ্যাকাউন্টে টাকা স্থানান্তর করছে। Isolation নিশ্চিত করে যে একটি ট্রানজেকশন অন্যটির ফলাফলে হস্তক্ষেপ করবে না এবং ডেটা সঠিক থাকবে। একটি ট্রানজেকশন চলাকালীন অন্য ট্রানজেকশন ডেটাবেসে পরিবর্তন করতে পারবে না।
Durability নিশ্চিত করে যে, একবার একটি ট্রানজেকশন সফলভাবে সম্পন্ন হলে, তার পরিবর্তন ডেটাবেসে স্থায়ীভাবে সংরক্ষিত হবে। কোনো সিস্টেম ক্র্যাশ বা পাওয়ার লসের কারণে এসব পরিবর্তন হারিয়ে যাবে না। ডেটাবেসের ডেটা হারানো বা নষ্ট হওয়ার কোনো সম্ভাবনা থাকবে না।
উদাহরণ: যদি আপনি একটি ব্যাংক অ্যাকাউন্টে টাকা জমা দেন এবং সিস্টেমের মধ্যে কোনো ত্রুটি বা পাওয়ার কেটে যায়, তাহলে Durability নিশ্চিত করে যে আপনার জমা করা টাকা হারাবে না। এটি সিস্টেম পুনরায় চালু হওয়ার পরও আপনার ট্রানজেকশনের ফলাফল একই থাকবে।
ACID গুণাবলী ডেটাবেস সিস্টেমে ট্রানজেকশনের সঠিকতা, সুরক্ষা এবং নির্ভরযোগ্যতা নিশ্চিত করতে অত্যন্ত গুরুত্বপূর্ণ। যখন একটি ট্রানজেকশন ACID বৈশিষ্ট্যগুলি মেনে চলে:
এভাবে ACID বৈশিষ্ট্যগুলো ডেটাবেসের সঠিকতা এবং নির্ভরযোগ্যতা বজায় রাখে, যা সমস্ত ডেটা পরিচালনার জন্য অপরিহার্য।
Multi-Document Transactions হল একটি ডেটাবেস ট্রানজাকশন প্রক্রিয়া, যেখানে একাধিক ডকুমেন্ট বা রেকর্ডের উপর একযোগে পরিবর্তন করা হয়। এটি ডেটাবেসে একাধিক রেকর্ড বা ডকুমেন্ট আপডেট, ইনসার্ট বা ডিলিট করার সময় একে অপরের ওপর নির্ভরশীল থাকে এবং সমস্ত পরিবর্তন একত্রে সফলভাবে প্রয়োগ করা হয় অথবা পুরো ট্রানজাকশনটি ব্যর্থ হয়ে যায়। অর্থাৎ, ট্রানজাকশনটি ACID প্রপার্টি (Atomicity, Consistency, Isolation, Durability) অনুসরণ করে, যাতে ডেটাবেসের কনসিস্টেন্সি এবং সঠিকতা বজায় থাকে।
ধরা যাক, আপনি একটি ডেটাবেসে দুইটি ডকুমেন্ট আপডেট করতে চান:
এই দুইটি অপারেশন যদি একই সময়ে একযোগে সম্পন্ন হয়, তবে Multi-Document Transactions নিশ্চিত করবে যে, যদি একটি অপারেশন ব্যর্থ হয়, তবে অন্যটি ফেইল করবে না এবং কোনো ডেটা কনসিস্টেন্সি ক্ষতিগ্রস্ত হবে না। যদি একটি ট্রানজাকশন সফল হয়, তবে অন্যটি যথাযথভাবে আপডেট হবে। এবং যদি কোন কারণে একটি অপারেশন ব্যর্থ হয়, তখন সবকিছু আগের অবস্থায় ফিরে আসবে (rollback)।
ধরা যাক, একটি অ্যাকাউন্টের ব্যালেন্স আপডেট করতে হবে:
এই দুটি অপারেশন যদি একসাথে সম্পন্ন না হয়, তবে এর ফলে ডেটাবেসে অস্বাভাবিক অবস্থা তৈরি হতে পারে (যেমন, একটি অ্যাকাউন্টে টাকা বৃদ্ধি পাবে কিন্তু অন্য অ্যাকাউন্টে কমে যাবে)। Multi-Document Transaction এই পরিবর্তন দুটি একসাথে করতে সাহায্য করবে, এবং যদি একটি অপারেশন ব্যর্থ হয়, তবে পুরো প্রক্রিয়া রোলব্যাক (rollback) হয়ে যাবে, যাতে ডেটাবেসের সঙ্গতি বজায় থাকে।
MongoDB এবং DocumentDB উভয়ই Multi-Document Transactions সমর্থন করে, তবে এই ট্রানজাকশনগুলি ব্যবহারের সময় কিছু সীমাবদ্ধতা থাকতে পারে।
MongoDB 4.0 সংস্করণ থেকে Multi-Document Transactions সমর্থন শুরু হয়েছে। MongoDB-তে একটি ট্রানজাকশন শুরু করার জন্য আপনি startSession
এবং withTransaction
ব্যবহার করতে পারেন:
const session = client.startSession();
session.startTransaction();
try {
// Document A-তে পরিবর্তন
db.collection('accounts').updateOne({ _id: accountA }, { $inc: { balance: 100 } }, { session });
// Document B-তে পরিবর্তন
db.collection('accounts').updateOne({ _id: accountB }, { $inc: { balance: -100 } }, { session });
// যদি সবকিছু ঠিক থাকে, ট্রানজাকশন কমিট করুন
session.commitTransaction();
} catch (error) {
// কোন সমস্যা হলে, ট্রানজাকশন রোলব্যাক করুন
session.abortTransaction();
} finally {
session.endSession();
}
DocumentDB-তে MongoDB API সমর্থন করা হয়, তাই MongoDB-এর মতোই Multi-Document Transactions ব্যবহৃত হতে পারে, তবে এটি আরও কিছু সীমাবদ্ধতার মধ্যে পড়তে পারে, যেমন শুধুমাত্র কিছু নির্দিষ্ট MongoDB ভার্সনে এই ফিচারটি কাজ করে।
Multi-Document Transactions একটি শক্তিশালী ফিচার যা একাধিক ডকুমেন্টের উপর একযোগে পরিবর্তন করতে ব্যবহৃত হয়, এবং এটি ডেটাবেসের ACID properties বজায় রাখতে সাহায্য করে। এটি ডেটাবেসে Atomicity, Consistency, Isolation, এবং Durability নিশ্চিত করে, যাতে একাধিক ডকুমেন্টের পরিবর্তন একযোগে সফল বা ব্যর্থ হয় এবং ডেটা সঠিক ও নিরাপদ থাকে। MongoDB এবং DocumentDB-তে এই ফিচারটি ব্যবহৃত হয় এবং তা নিশ্চিত করে যে ডেটাবেসের সঙ্গতি এবং সুরক্ষা বজায় থাকবে।
Amazon DocumentDB (MongoDB-সংক্রান্ত ডেটাবেস) MongoDB-তে বিদ্যমান ACID (Atomicity, Consistency, Isolation, Durability) ট্রানজাকশন সমর্থন করে না, তবে কিছু সীমিত Multi-Document Transaction সমর্থন করে যা MongoDB 4.0 থেকে শুরু হয়। MongoDB এবং DocumentDB-এর মধ্যে প্রধান পার্থক্য হল যে, MongoDB সম্পূর্ণ ACID ট্রানজাকশন সমর্থন করে, যেখানে DocumentDB multi-document transactions সমর্থন করে কিন্তু তা শুধুমাত্র নির্দিষ্ট সীমাবদ্ধতায় কাজ করে।
এখানে আমরা DocumentDB এর ট্রানজাকশন কনফিগারেশন এবং ব্যবস্থাপনা নিয়ে বিস্তারিত আলোচনা করব।
DocumentDB Multi-Document Transactions সমর্থন করে যা একাধিক ডকুমেন্টকে একসাথে আপডেট বা পরিবর্তন করতে সক্ষম। তবে, এর সীমাবদ্ধতা রয়েছে, যেমন:
একটি ট্রানজাকশন তৈরি করা:
const session = client.startSession();
session.startTransaction();
try {
// একাধিক ডকুমেন্ট আপডেট করা
const collection = db.collection('products');
// পণ্যের মূল্য আপডেট করা
await collection.updateOne(
{ product_id: "12345" },
{ $set: { price: 19.99 } },
{ session }
);
// স্টক আপডেট করা
await collection.updateOne(
{ product_id: "12345" },
{ $set: { stock: 150 } },
{ session }
);
// ট্রানজাকশন কমিট করা
await session.commitTransaction();
} catch (error) {
// যদি কোনো ত্রুটি ঘটে, ট্রানজাকশন রোলব্যাক করা হবে
await session.abortTransaction();
} finally {
session.endSession();
}
এখানে startSession()
একটি নতুন ট্রানজাকশন শুরু করবে এবং commitTransaction()
এবং abortTransaction()
ব্যবহার করে ট্রানজাকশন সফল বা ব্যর্থ হওয়ার পরে যথাযথভাবে তা সম্পন্ন বা রোলব্যাক করা হবে।
DocumentDB-তে ট্রানজাকশন ব্যবহারের জন্য কিছু নির্দিষ্ট কনফিগারেশন সেটআপের প্রয়োজন হয়:
write concern
কনফিগার করা প্রয়োজন যাতে ডেটার সঠিক লেখন নিশ্চিত করা যায়। MongoDB এবং DocumentDB উভয়েই write concern
সেট করা সম্ভব।ট্রানজাকশন সম্পন্ন করার জন্য দুটি প্রধান অপশন রয়েছে:
await session.commitTransaction();
await session.abortTransaction();
DocumentDB এবং MongoDB উভয়েই ট্রানজাকশনের কার্যকারিতা মনিটর করতে operation logs বা transaction logs প্রদান করে। আপনি AWS CloudWatch এবং MongoDB Logs ব্যবহার করে ট্রানজাকশনের পারফরম্যান্স এবং সঠিকতা ট্র্যাক করতে পারেন।
DocumentDB-তে ট্রানজাকশন ব্যবহারের পারফরম্যান্সের উপর কিছু সীমাবদ্ধতা থাকতে পারে, কারণ এটি একটি distributed database। একাধিক ডকুমেন্ট আপডেট করার সময়, এটি কিছুটা latency বাড়াতে পারে। তাই এটি তখনই ব্যবহৃত উচিত যখন আপনি নিশ্চিত যে একাধিক ডকুমেন্টের উপর একই সময়ে আপডেট বা লেখন কার্যকরী হতে হবে।
DocumentDB-তে Multi-Document Transactions ব্যবহৃত হয় এবং এটি MongoDB এর মতো কিছু সীমাবদ্ধতার সঙ্গে কাজ করে। যদিও এটি MongoDB-এর পুরো ACID ট্রানজাকশন সমর্থন করে না, তবে এটি সিম্পল ট্রানজাকশন সমর্থন করে, যা কিছু পরিস্থিতিতে কার্যকরী হতে পারে। DocumentDB-এর ট্রানজাকশন ব্যবস্থাপনা মূলত Atomicity এবং Consistency নিশ্চিত করতে ব্যবহৃত হয়, তবে উন্নত Isolation এবং Durability অপশনগুলি সীমিত।
Consistency এবং Isolation Levels হল ডেটাবেস সিস্টেমের দুটি গুরুত্বপূর্ণ ধারণা, যা ACID (Atomicity, Consistency, Isolation, Durability) প্রিন্সিপালের একটি অংশ। এই দুটি বৈশিষ্ট্য ডেটাবেসের ট্রানজাকশন পরিচালনা এবং একাধিক ব্যবহারকারীর অ্যাক্সেসের মধ্যে ডেটার সঠিকতা এবং নির্ভরযোগ্যতা নিশ্চিত করতে সাহায্য করে।
Consistency (সামঞ্জস্যতা) হল সেই গ্যারান্টি যা একটি ট্রানজাকশনের পরবর্তী অবস্থা নিশ্চিত করে যে ডেটাবেস কোনও অকার্যকর অবস্থায় চলে না এবং এটি শুধুমাত্র বৈধ ডেটা ধারণ করবে। এর মানে হল যে, এক বা একাধিক ট্রানজাকশন সম্পন্ন হলে, ডেটাবেসের অবস্থা অবশ্যই পূর্বের নিয়মাবলী বা রুলসের সঙ্গে সঙ্গতিপূর্ণ থাকবে।
ধরা যাক একটি ব্যাংক অ্যাকাউন্টের ডেবিট এবং ক্রেডিট অপারেশন সম্পাদন করা হচ্ছে। যদি কোনও অ্যাকাউন্টে $100 ডিপোজিট করা হয়, তাহলে পরবর্তী ট্রানজাকশনে সেই অ্যাকাউন্টের ব্যালান্স অবশ্যই $100 বা তার বেশি হবে, কম নয়। এর মানে, আপনি ডেটাবেসে অপর্যাপ্ত বা অসম্পূর্ণ ডেটা পাবেন না।
Isolation (অংশ বিচ্ছিন্নতা) নির্ধারণ করে যে একাধিক ট্রানজাকশন যখন একই সময়ে চলে, তখন তাদের মধ্যে কোনও একে অপরের সাথে পারস্পরিক প্রভাব পড়বে কি না। বিভিন্ন isolation levels ট্রানজাকশনগুলির মধ্যে এই পারস্পরিক প্রভাবের মাত্রা নিয়ন্ত্রণ করে।
অর্থাৎ, Isolation Level হল একটি ট্রানজাকশনকে অন্য ট্রানজাকশনের প্রভাব থেকে কতটুকু পৃথক রাখবে।
ডেটাবেসের isolation levels সাধারণত চারটি প্রধান ধরনের হয়:
DocumentDB MongoDB-র মতো eventual consistency সমর্থন করে, অর্থাৎ যখন কোনও পরিবর্তন হয়, তখন এটি সমস্ত রিপ্লিকা এবং ক্লাস্টারে সমানভাবে পৌঁছাবে না যতক্ষণ না সময় পায়।
DocumentDB Read Committed isolation level সমর্থন করে, যা নিশ্চিত করে যে dirty reads থেকে রক্ষা পাবে, তবে non-repeatable reads এখনও ঘটতে পারে।
Consistency এবং Isolation Levels হল ডেটাবেস ট্রানজাকশনের একটি গুরুত্বপূর্ণ অংশ, যা ডেটার সঠিকতা, নির্ভরযোগ্যতা এবং একাধিক ট্রানজাকশনের মধ্যে সঠিক বিচ্ছিন্নতা নিশ্চিত করে। MongoDB বা DocumentDB তে বিভিন্ন isolation levels দ্বারা এই নির্ভরযোগ্যতা এবং বিচ্ছিন্নতা নিশ্চিত করা হয়, যেখানে Serializable isolation level সর্বোচ্চ সুরক্ষা এবং নির্ভরযোগ্যতা প্রদান করে।
common.read_more