কম্পিউটার টিউটোরিয়াল

ডিফার্ড আপডেট রিকভারি: विश्वস্ত ডেটা ইন্টিগ্রিটির জন্য NO-UNDO এবং REDO ব্যবহার

ডিফার্ড আপডেট রিকভারিতে, ডিস্কে বাস্তব ডেটাবেস মডিফিকেশন ট্রানজেকশন কমিট হওয়া পর্যন্ত বিলম্বিত করা হয়। এক্সিকিউশন সময়ে আপডেট শুধু লগ এবং ক্যাশে বাফারে রেকর্ড করা হয়। যদি একটি ট্রানজেকশন কমিট হওয়ার আগে ফেইল করে, তবে ডিস্কে ডেটাবেস অপ্রভাবিত থাকে — তাই NO-UNDO। শুধু REDO দরকার কমিটেড ট্রানজেকশনের জন্য যাদের পরিবর্তন ডিস্কে লেখা হয়নি।

ডিফার্ড আপডেট প্রোটোকল

  • একটি ট্রানজেকশন ডিস্কে ডেটাবেস মডিফাই করতে পারবে না যতক্ষণ না সেটা তার কমিট পয়েন্টে পৌঁছায়।
  • সব REDO লগ এন্ট্রি কমিট করার আগে ডিস্কে ফোর্স-রাইটтен হতে হবে (Write-Ahead Logging)।
  • শুধু REDO লগ এন্ট্রি (নিউ ভ্যালু/AFIM) দরকার — কোনো UNDO এন্ট্রি দরকার নেই।

রিকভারি প্রোসিজার (RDU_M)

স্ট্রিক্ট টু-ফেজ লকিং সহ মাল্টি-ইউজার সিস্টেমের জন্য, রিকভারি অ্যালগরিদম দুটি লিস্ট মেইনটেইন করে:

  • কমিট লিস্ট: লাস্ট চেকপয়েন্ট থেকে কমিট করা ট্রানজেকশন।
  • অ্যাক্টিভ লিস্ট: যেসব ট্রানজেকশন এখনও অ্যাক্টিভ ছিল (কমিট করা হয়নি)।

REDO অ্যাপ্লাই করা হয় কমিটেড ট্রানজেকশনের WRITE অপারেশনের ওপর লগ অর্ডারে। অ্যাক্টিভ (অনকমিটেড) ট্রানজেকশনরা কার্যকরভাবে ক্যান্সেলড এবং পুনরায় সাবমিট করতে হবে।

উদাহরণ টাইমলাইন

Checkpoint (t1) Crash (t2) T1 (committed) T2 → REDO T3 → REDO T4 → Ignored (no commit) T5 → Ignored (no commit)

T1 চেকপয়েন্টের আগে কমিট করা — কোনো রিডো দরকার নেই। T2, T3 চেকপয়েন্টের পর কমিট করা — রিডো করতে হবে। T4, T5 কখনো কমিট করা হয়নি — ইগনোরড (ডিফার্ড আপডেটের অধীনে ডিস্কে কোনো পরিবর্তন নেই)।

REDO অপ্টিমাইজেশন

যদি আইটেম X একাধিকবার কমিটেড ট্রানজেকশন দ্বারা আপডেট করা হয়, তবে শুধু লাস্ট আপডেট রিডো করতে হবে:

  • লগটি রিভার্স অর্ডারে ট্রাভার্স করুন।
  • ইউপডেট করা আইটেমের একটি লিস্ট মেইনটেইন করুন।
  • লিস্টে ইতিমধ্যে থাকা আইটেমগুলো স্কিপ করুন (লাস্ট ভ্যালু ইতিমধ্যে রিকভারড)।
  • শুধু লিস্টে না থাকা আইটেমগুলো রিডো করুন, তারপর সেগুলো যোগ করুন।

সুবিধা এবং সীমাবদ্ধতা

সুবিধা সীমাবদ্ধতা
ফেইলচারে রোলব্যাক দরকার নেই (NO-UNDO)রাইট-লক্ড আইটেম কমিট পর্যন্ত লক্ড থাকে
ক্যাডকেডিং রোলব্যাক নেই (আইটেম কমিট পর্যন্ত লক্ড থাকে)কমিট পর্যন্ত সব আপডেট ধরে রাখতে বাফার স্পেস প্রয়োজন
অবোর্টেড ট্রানজেকশন সহজে রিসাবমিটেডকম পরিবর্তন বিশিষ্ট ছোট ট্রানজেকশনের জন্য প্র্যাকটিক্যাল

উপসংহার

NO-UNDO/REDO ডিফার্ড আপডেট ডিস্ক রাইট কমিট হওয়া পর্যন্ত পোস্টপোন করে, রিকভারির সময় UNDO অপারেশনের প্রয়োজনীয়তা দূর করে। লাস্ট চেকপয়েন্টের পর কমিটেড ট্রানজেকশনগুলোকে শুধু REDO দরকার। এটি রিকভারি সিম্পল করে কিন্তু কনকারেন্সি লিমিট করে এবং সব অ্যানকমিটেড পরিবর্তন ধরে রাখতে পর্যাপ্ত বাফার স্পেস প্রয়োজন।

ডিফার্ড আপডেট রিকভারি: विश्वস্ত ডেটা ইন্টিগ্রিটির জন্য NO-UNDO এবং REDO ব্যবহার
ত্রিভুজ No
  1. অ্যান্ড্রয়েডে কাস্টম বৃত্তাকার বাটন তৈরির পদ্ধতি

  2. সি++-এ ত্রিভুজের কেন্ড্রয়েড (Centroid) বের করার প্রোগ্রাম

  3. C++-এ অ্যারে ব্যবহার করে বাইনারি ট্রি ইমপ্লিমেন্টেশন

  4. CSS দিয়ে লেফট বর্ডারের প্রস্থ সেট করুন