লক-ভিত্তিক সম্মতি নিয়ন্ত্রণ
ভাগ করা সংস্থানগুলিতে অ্যাক্সেস নিয়ন্ত্রণের জন্য লক ব্যবহার করা ডেডলকগুলির ঝুঁকিপূর্ণ এবং লেনদেনের শিডিয়ুলার একাই তাদের সংঘটনগুলি আটকাতে পারে না।
উদাহরণস্বরূপ, রিলেশনাল ডাটাবেস সিস্টেমগুলি লেনদেনের এসআইডি বৈশিষ্ট্যের গ্যারান্টি দিতে বিভিন্ন লক ব্যবহার করে ।
কোন ব্যাপার কি রিলেশনাল ডাটাবেস সিস্টেম আপনি ব্যবহার করছেন, কেশ সবসময় যখন (যেমন, পরিবর্তন অর্জিত হবে UPDATE
বা DELETE
) একটি নির্দিষ্ট টেবিল রেকর্ড। বর্তমানে চলমান লেনদেনের মাধ্যমে সংশোধিত কোনও সারি লক না করে পারমাণবিকতা আপস করা হবে ।
অচলাবস্থা কী?
যেমনটি আমি এই নিবন্ধে ব্যাখ্যা করেছি , দুটি অবিচ্ছিন্ন লেনদেন অগ্রগতি করতে না পারলে একটি অচলাবস্থা ঘটে কারণ প্রত্যেকটি একে অপরের জন্য লক প্রকাশের অপেক্ষায় থাকে, যেমনটি নিম্নলিখিত চিত্রটিতে চিত্রিত হয়েছে।
উভয় লেনদেনই লক অধিগ্রহণের পর্যায়ে রয়েছে তাই, পরবর্তী একটিটি অর্জনের আগে কেউই একটি লক প্রকাশ করে না।
অচলাবস্থা থেকে পুনরুদ্ধার
আপনি যদি কনকুরেন্সি নিয়ন্ত্রণ অ্যালগরিদম ব্যবহার করেন যা লকগুলিতে নির্ভর করে তবে সর্বদা অচল অবস্থায় পড়ার ঝুঁকি থাকে। ডেডলকগুলি কোনও ডাটাবেস সিস্টেমে নয়, যে কোনও একযোগে পরিবেশে ঘটতে পারে।
উদাহরণস্বরূপ, দুই বা ততোধিক থ্রেডগুলি আগে অর্জিত লকগুলিতে অপেক্ষা করা থাকলে যাতে কোনও থ্রেড কোনও অগ্রগতি করতে না পারে তবে একটি মাল্টিথ্রেডিং প্রোগ্রাম অচল করে দিতে পারে can যদি এটি কোনও জাভা অ্যাপ্লিকেশনটিতে ঘটে থাকে, জেভিএম কেবল কোনও থ্রেডকে তার প্রয়োগ বন্ধ করতে এবং তার লকগুলি ছেড়ে দিতে বাধ্য করতে পারে না।
এমনকি Thread
শ্রেণি যদি কোনও stop
পদ্ধতি প্রকাশ করে তবে জাভা ১.১ থেকে এই পদ্ধতিটি অবমূল্যায়ন করা হয়েছে কারণ এটি থ্রেড বন্ধ হওয়ার পরে অবজেক্টগুলিকে অসামঞ্জস্য অবস্থায় রেখে যেতে পারে। পরিবর্তে, জাভা একটি সংজ্ঞায়িতinterrupt
পদ্ধতি , যা থ্রেড হিসাবে ইঙ্গিত হিসাবে কাজ করে যা বাধা হয়ে যায় সহজেই বাধা উপেক্ষা করতে পারে এবং এর কার্যকারিতা চালিয়ে যেতে পারে।
এই কারণে, একটি জাভা অ্যাপ্লিকেশন কোনও অচলাবস্থার পরিস্থিতি থেকে পুনরুদ্ধার করতে পারে না এবং লক অধিগ্রহণের অনুরোধগুলি এমনভাবে অর্ডার করা অ্যাপ্লিকেশন বিকাশকারীর দায়িত্ব যে কোনওভাবেই অচলাবস্থা না ঘটে।
যাইহোক, একটি ডাটাবেস সিস্টেম একটি প্রদত্ত লক অধিগ্রহণ আদেশ কার্যকর করতে পারে না যেহেতু নির্দিষ্ট লেনদেনের অন্যান্য লকগুলি কী আরও অধিগ্রহণ করতে চাইবে তা লক করা অসম্ভব। লক অর্ডার সংরক্ষণ করা ডেটা অ্যাক্সেস লেয়ারের দায়িত্ব হয়ে যায় এবং ডেটাবেস কেবল অচলাবস্থার পরিস্থিতি থেকে পুনরুদ্ধারে সহায়তা করতে পারে।
ডাটাবেস ইঞ্জিনটি একটি পৃথক প্রক্রিয়া চালায় যা লক-ওয়েক্ট চক্রের জন্য বর্তমান দ্বন্দ্বের গ্রাফটি স্ক্যান করে (যা ডেডলকের কারণে ঘটে)। যখন একটি চক্র সনাক্ত হয়, ডাটাবেস ইঞ্জিনটি একটি লেনদেন বাছাই করে এটিকে বাতিল করে দেয়, যার ফলে এটির লকগুলি প্রকাশিত হয়, যাতে অন্য লেনদেন অগ্রগতি করতে পারে।
জেভিএম থেকে ভিন্ন, একটি ডাটাবেস লেনদেন কাজের পারমাণবিক ইউনিট হিসাবে নকশা করা হয়েছে। অতএব, একটি রোলব্যাক একটি সুসংগত অবস্থায় ডাটাবেস ছেড়ে যায়।
এই বিষয় সম্পর্কে আরও তথ্যের জন্য, এই নিবন্ধটিও পরীক্ষা করে দেখুন ।