এর সদৃশ প্রশ্ন:
/programming/129329/optimistic-vs-pessimistic-locking
উপরের লিঙ্কটি থেকে অনুলিপি / পেস্টিং উত্তর:
আশাবাদী লকিং এমন একটি কৌশল যেখানে আপনি একটি রেকর্ড পড়েন, একটি সংস্করণ নম্বর নোট করুন এবং পরীক্ষা করে দেখুন যে আপনি রেকর্ডটি আবার লেখার আগে সংস্করণটি পরিবর্তন হয়নি। আপনি যখন রেকর্ডটি আবার লিখবেন তখন আপনি এটিটি পারমাণবিক তা নিশ্চিত করার জন্য সংস্করণে আপডেটটি ফিল্টার করেন। (যেমন আপনি যখন সংস্করণটি পরীক্ষা করেন এবং ডিস্কে রেকর্ডটি লেখেন তখন কোনও আপডেট হয়নি) এবং এক হিটে সংস্করণটি আপডেট করুন।
রেকর্ডটি নোংরা হলে (যেমন আপনার কাছে আলাদা সংস্করণ) আপনি লেনদেন বাতিল করে দেন এবং ব্যবহারকারী এটি পুনরায় শুরু করতে পারেন।
এই কৌশলটি উচ্চ-ভলিউম সিস্টেম এবং ত্রি-স্তরের আর্কিটেকচারের ক্ষেত্রে সর্বাধিক প্রযোজ্য যেখানে আপনি অগত্যা আপনার সেশনের জন্য ডাটাবেসের সাথে সংযোগ বজায় রাখবেন না। এই পরিস্থিতিতে ক্লায়েন্টটি আসলে পুল থেকে সংযোগ গ্রহণের কারণে ডাটাবেস লকগুলি বজায় রাখতে পারে না এবং আপনি একই সংযোগটি অন্য এক অ্যাক্সেস থেকে পরবর্তীটিতে ব্যবহার করতে পারবেন না।
হতাশাবাদী লক করা হয় যখন আপনি আপনার একচেটিয়া ব্যবহারের জন্য রেকর্ডটি লক না করা অবধি শেষ না করেন। এটিতে আশাবাদী লকিংয়ের চেয়ে অনেক ভাল সততা রয়েছে তবে ডেডলকগুলি এড়াতে আপনার অ্যাপ্লিকেশন ডিজাইনের প্রতি আপনার যত্নবান হওয়া প্রয়োজন। হতাশাবাদী লকিং ব্যবহার করার জন্য আপনার প্রয়োজন হয় ডেটাবেসের সাথে সরাসরি সংযোগ (যেমন সাধারণত দুটি স্তরের ক্লায়েন্ট সার্ভার অ্যাপ্লিকেশনের ক্ষেত্রে হয়) বা বহিরাগত উপলভ্য লেনদেন আইডি যা সংযোগটি স্বাধীনভাবে ব্যবহার করা যেতে পারে need
পরবর্তী ক্ষেত্রে আপনি TxID এর সাথে লেনদেনটি খুলুন এবং তারপরে সেই আইডি ব্যবহার করে পুনরায় সংযোগ করুন। ডিবিএমএস লকগুলি বজায় রাখে এবং আপনাকে TxID এর মাধ্যমে সেশনটি ব্যাক আপ করতে দেয়। এভাবেই দ্বি-পর্বের কমিট প্রোটোকল (যেমন এক্সএ বা সিওএম + লেনদেন) কাজ করে বিতরণ লেনদেন।
সম্পাদনা (পারফরম্যান্সের প্রশ্নের সমাধান করতে আরও তথ্য যুক্ত করা):
পারফরম্যান্স অনুযায়ী এটি আপনার পরিবেশের উপর নির্ভর করে। নিম্নলিখিত বিষয়গুলি স্থির করে নিন:
আপনি বেশ আশাবাদী সন্ধান করতে যাচ্ছেন বেশিরভাগ পরিস্থিতিতে সম্মতিযুক্ত হওয়ার কারণে। আরডিবিএমএস এবং পরিবেশের উপর নির্ভর করে এটি কম বা বেশি পারফরম্যান্ট হতে পারে। সাধারণত আশাবাদী লকিংয়ের সাহায্যে আপনি দেখতে পাবেন যে মানটি কোথাও সারি সংস্করণ করা দরকার।
উদাহরণস্বরূপ এমএস এসকিউএল সার্ভারের সাহায্যে এটি টেম্পডিবিতে স্থানান্তরিত হয় এবং কলামের শেষে 12-14 বাইটের মধ্যে কিছু যুক্ত করা হয়। স্ন্যাপশট বিচ্ছিন্নতার মতো বিচ্ছিন্ন স্তরের সাথে আশাবাদী লকিং চালু করার ফলে বিভাজন ঘটতে পারে এবং আপনার ফিল ফ্যাক্টরটি সামঞ্জস্য করা দরকার কারণ সারিগুলির শেষে এখন অতিরিক্ত ডেটা রয়েছে যা কোনও পৃষ্ঠার বিভাজন ঘটাতে পুরো পৃষ্ঠের কাছাকাছি আসতে পারে, যা কমবে আপনার কর্মক্ষমতা. যদি আপনার টেম্পডিবি অপ্টিমাইজড হয় তবে এটি তত দ্রুত হবে না।
সুতরাং আমি অনুমান করি একটি চেকলিস্ট হ'ল:
- -সারি ভার্শনিংয়ের ফর্মটি পরিচালনা করার জন্য আপনার কাছে পর্যাপ্ত আইও / সংস্থান রয়েছে? যদি তা না হয় তবে আপনি ওভারহেড যুক্ত করছেন। যদি তাই হয়, তবে আপনি যখন লেখার জন্য প্রায়শই এটি লক করে রাখেন এমন সময় আপনি যদি ডেটা পড়েন তবে আপনি পড়া এবং লেখাগুলির জুড়ে একযোগে এক ভাল উন্নতি লক্ষ্য করতে পারবেন (যদিও লেখকরা এখনও লেখালেখিগুলিকে অবরুদ্ধ করে দেবে, পাঠাগুলি আর লেখার জন্য ব্লক করবে না এবং বিপরীতভাবে)
- -আপনার কোডটি কি ডেডলকসের পক্ষে সংবেদনশীল বা আপনার লকিংয়ের অভিজ্ঞতা আছে? আপনি যদি দীর্ঘ লক বা প্রচুর ডেডলকগুলি ব্যবহার না করে থাকেন তবে আশাবাদী লকিংয়ের অতিরিক্ত ওভারহেড জিনিসগুলি দ্রুততর করে তুলবে না, অবশ্যই বেশিরভাগ ক্ষেত্রে আমরা এখানে মিলিসেকেন্ডে কথা বলছি।
- -আপনার ডিবি যদি বড় হয় (বা খুব সীমিত হার্ডওয়্যারে) এবং আরডিবিএমএসের উপর নির্ভর করে আপনার ডেটা পৃষ্ঠাগুলি সম্পূর্ণর কাছাকাছি থাকে তবে আপনি বড় পৃষ্ঠাগুলি এবং ডেটা বিভাজন ঘটতে পারেন তাই এটি চালু করার পরে পুনর্নির্মাণের বিষয়টি বিবেচনা করার বিষয়ে নিশ্চিত হন।
এগুলি সম্পর্কে আমার মতামত, সম্প্রদায়ের কাছ থেকে আরও শোনার জন্য উন্মুক্ত।