আশাবাদী লকিং হতাশাবাদী লকিংয়ের চেয়ে দ্রুত কেন?


9

উভয় প্রকারের লকিংয়ের ফলে কোনও প্রক্রিয়া রেকর্ডটির সঠিক কপির জন্য অপেক্ষা করতে পারে যদি এটি অন্য কোনও প্রক্রিয়া দ্বারা ব্যবহৃত হয়। হতাশাবাদী লকিংয়ের সাথে, লক প্রক্রিয়াটি ডিবি থেকেই আসে (একটি দেশীয় লক অবজেক্ট), তবে আশাবাদী লকিংয়ের সাথে, লক প্রক্রিয়াটি টাইমস্ট্যাম্পের মতো সারি সংস্করণের কিছু রূপ যা রেকর্ডটি "বাসি" কিনা তা পরীক্ষা করে।

তবে উভয়ই একটি ২ য় প্রক্রিয়া স্তব্ধ হয়ে যায়। সুতরাং আমি জিজ্ঞাসা করছি: কেন আশাবাদী লকিংকে সাধারণত নিরাশাবাদী লকিংয়ের চেয়ে দ্রুত / উচ্চতর বিবেচনা করা হয়? এবং, এমন ব্যবহারের ক্ষেত্রে কী রয়েছে যেখানে আশাবাদী হওয়ার চেয়ে निराদবাদী পছন্দ? আগাম ধন্যবাদ!


5
নামকরণে একটি খুব সংক্ষিপ্ত ব্যাখ্যা বিদ্যমান। বিরোধী লকের সুযোগ কম হলে আশাবাদী লকিং ভাল কাজ করে। আমরা একাধিক প্রক্রিয়ার মিথস্ক্রিয়া সম্পর্কে আশাবাদী। বিরোধবিরোধী লকের সুযোগ বেশি হলে হতাশাবাদী লকিং ভাল কাজ করে। আমরা একাধিক প্রক্রিয়ার মিথস্ক্রিয়া সম্পর্কে হতাশাবাদী। উভয়ই উপ-অনুকূলভাবে সঞ্চালন করবে যেখানে তাদের বিপরীতে আরও উপযুক্ত হবে।
মার্ক স্টোরি-স্মিথ

আপনার কাজের চাপের উপর নির্ভর করে আশাবাদী লকিং হতাশাবাদী লকিংয়ের চেয়ে দ্রুত হতে পারে বা নাও হতে পারে।
একে

উত্তর:


8

এর সদৃশ প্রশ্ন:

/programming/129329/optimistic-vs-pessimistic-locking

উপরের লিঙ্কটি থেকে অনুলিপি / পেস্টিং উত্তর:

আশাবাদী লকিং এমন একটি কৌশল যেখানে আপনি একটি রেকর্ড পড়েন, একটি সংস্করণ নম্বর নোট করুন এবং পরীক্ষা করে দেখুন যে আপনি রেকর্ডটি আবার লেখার আগে সংস্করণটি পরিবর্তন হয়নি। আপনি যখন রেকর্ডটি আবার লিখবেন তখন আপনি এটিটি পারমাণবিক তা নিশ্চিত করার জন্য সংস্করণে আপডেটটি ফিল্টার করেন। (যেমন আপনি যখন সংস্করণটি পরীক্ষা করেন এবং ডিস্কে রেকর্ডটি লেখেন তখন কোনও আপডেট হয়নি) এবং এক হিটে সংস্করণটি আপডেট করুন।

রেকর্ডটি নোংরা হলে (যেমন আপনার কাছে আলাদা সংস্করণ) আপনি লেনদেন বাতিল করে দেন এবং ব্যবহারকারী এটি পুনরায় শুরু করতে পারেন।

এই কৌশলটি উচ্চ-ভলিউম সিস্টেম এবং ত্রি-স্তরের আর্কিটেকচারের ক্ষেত্রে সর্বাধিক প্রযোজ্য যেখানে আপনি অগত্যা আপনার সেশনের জন্য ডাটাবেসের সাথে সংযোগ বজায় রাখবেন না। এই পরিস্থিতিতে ক্লায়েন্টটি আসলে পুল থেকে সংযোগ গ্রহণের কারণে ডাটাবেস লকগুলি বজায় রাখতে পারে না এবং আপনি একই সংযোগটি অন্য এক অ্যাক্সেস থেকে পরবর্তীটিতে ব্যবহার করতে পারবেন না।

হতাশাবাদী লক করা হয় যখন আপনি আপনার একচেটিয়া ব্যবহারের জন্য রেকর্ডটি লক না করা অবধি শেষ না করেন। এটিতে আশাবাদী লকিংয়ের চেয়ে অনেক ভাল সততা রয়েছে তবে ডেডলকগুলি এড়াতে আপনার অ্যাপ্লিকেশন ডিজাইনের প্রতি আপনার যত্নবান হওয়া প্রয়োজন। হতাশাবাদী লকিং ব্যবহার করার জন্য আপনার প্রয়োজন হয় ডেটাবেসের সাথে সরাসরি সংযোগ (যেমন সাধারণত দুটি স্তরের ক্লায়েন্ট সার্ভার অ্যাপ্লিকেশনের ক্ষেত্রে হয়) বা বহিরাগত উপলভ্য লেনদেন আইডি যা সংযোগটি স্বাধীনভাবে ব্যবহার করা যেতে পারে need

পরবর্তী ক্ষেত্রে আপনি TxID এর সাথে লেনদেনটি খুলুন এবং তারপরে সেই আইডি ব্যবহার করে পুনরায় সংযোগ করুন। ডিবিএমএস লকগুলি বজায় রাখে এবং আপনাকে TxID এর মাধ্যমে সেশনটি ব্যাক আপ করতে দেয়। এভাবেই দ্বি-পর্বের কমিট প্রোটোকল (যেমন এক্সএ বা সিওএম + লেনদেন) কাজ করে বিতরণ লেনদেন।

সম্পাদনা (পারফরম্যান্সের প্রশ্নের সমাধান করতে আরও তথ্য যুক্ত করা):

পারফরম্যান্স অনুযায়ী এটি আপনার পরিবেশের উপর নির্ভর করে। নিম্নলিখিত বিষয়গুলি স্থির করে নিন:

আপনি বেশ আশাবাদী সন্ধান করতে যাচ্ছেন বেশিরভাগ পরিস্থিতিতে সম্মতিযুক্ত হওয়ার কারণে। আরডিবিএমএস এবং পরিবেশের উপর নির্ভর করে এটি কম বা বেশি পারফরম্যান্ট হতে পারে। সাধারণত আশাবাদী লকিংয়ের সাহায্যে আপনি দেখতে পাবেন যে মানটি কোথাও সারি সংস্করণ করা দরকার।

উদাহরণস্বরূপ এমএস এসকিউএল সার্ভারের সাহায্যে এটি টেম্পডিবিতে স্থানান্তরিত হয় এবং কলামের শেষে 12-14 বাইটের মধ্যে কিছু যুক্ত করা হয়। স্ন্যাপশট বিচ্ছিন্নতার মতো বিচ্ছিন্ন স্তরের সাথে আশাবাদী লকিং চালু করার ফলে বিভাজন ঘটতে পারে এবং আপনার ফিল ফ্যাক্টরটি সামঞ্জস্য করা দরকার কারণ সারিগুলির শেষে এখন অতিরিক্ত ডেটা রয়েছে যা কোনও পৃষ্ঠার বিভাজন ঘটাতে পুরো পৃষ্ঠের কাছাকাছি আসতে পারে, যা কমবে আপনার কর্মক্ষমতা. যদি আপনার টেম্পডিবি অপ্টিমাইজড হয় তবে এটি তত দ্রুত হবে না।

সুতরাং আমি অনুমান করি একটি চেকলিস্ট হ'ল:

  • -সারি ভার্শনিংয়ের ফর্মটি পরিচালনা করার জন্য আপনার কাছে পর্যাপ্ত আইও / সংস্থান রয়েছে? যদি তা না হয় তবে আপনি ওভারহেড যুক্ত করছেন। যদি তাই হয়, তবে আপনি যখন লেখার জন্য প্রায়শই এটি লক করে রাখেন এমন সময় আপনি যদি ডেটা পড়েন তবে আপনি পড়া এবং লেখাগুলির জুড়ে একযোগে এক ভাল উন্নতি লক্ষ্য করতে পারবেন (যদিও লেখকরা এখনও লেখালেখিগুলিকে অবরুদ্ধ করে দেবে, পাঠাগুলি আর লেখার জন্য ব্লক করবে না এবং বিপরীতভাবে)
  • -আপনার কোডটি কি ডেডলকসের পক্ষে সংবেদনশীল বা আপনার লকিংয়ের অভিজ্ঞতা আছে? আপনি যদি দীর্ঘ লক বা প্রচুর ডেডলকগুলি ব্যবহার না করে থাকেন তবে আশাবাদী লকিংয়ের অতিরিক্ত ওভারহেড জিনিসগুলি দ্রুততর করে তুলবে না, অবশ্যই বেশিরভাগ ক্ষেত্রে আমরা এখানে মিলিসেকেন্ডে কথা বলছি।
  • -আপনার ডিবি যদি বড় হয় (বা খুব সীমিত হার্ডওয়্যারে) এবং আরডিবিএমএসের উপর নির্ভর করে আপনার ডেটা পৃষ্ঠাগুলি সম্পূর্ণর কাছাকাছি থাকে তবে আপনি বড় পৃষ্ঠাগুলি এবং ডেটা বিভাজন ঘটতে পারেন তাই এটি চালু করার পরে পুনর্নির্মাণের বিষয়টি বিবেচনা করার বিষয়ে নিশ্চিত হন।

এগুলি সম্পর্কে আমার মতামত, সম্প্রদায়ের কাছ থেকে আরও শোনার জন্য উন্মুক্ত।


ধন্যবাদ @ অলি রাজেঘি (+1) - আমি মনে করি এই প্রশ্নের জন্য dba.se একটি আরও উপযুক্ত জায়গা। এছাড়াও, যদিও এটি একটি দুর্দান্ত উত্তর, এটি আমার পারফরম্যান্সের প্রশ্নের উত্তর দেয় না (যখন একজনের তুলনায় অন্যটি দ্রুত হয়)। আবার ধন্যবাদ!
মারা

হাই ম্যারা, এটি একটি ভাল বিষয়। আমি উত্তরটি প্রসারিত করেছি। ধন্যবাদ।
আলী রাজেঝি

11

আপনি আশাবাদী লকিংয়ের ভুল বোঝেন।

আশাবাদী লকিংয়ের ফলে লেনদেন একে অপরের জন্য অপেক্ষা করে না।

আশাবাদী লকিং সম্ভবত কোনও লেনদেনকে ব্যর্থ করে তোলে তবে এটি কোনও "লক" না নিয়েই তা করে। আশাবাদী লকিংয়ের কারণে যদি কোনও লেনদেন ব্যর্থ হয় তবে ব্যবহারকারীর পুনরায় শুরু করা প্রয়োজন। "আশাবাদী" শব্দটি ঠিক সেই প্রত্যাশা থেকেই উদ্ভূত হয়েছিল যে এই কারণে যে কারণে লেনদেন ব্যর্থ হয়, কেবল খুব ব্যতিক্রমীভাবে ঘটবে। "আশাবাদী" লকিং হল এমন পদ্ধতি যা বলে যে "আমি আসল লকগুলি গ্রহণ করব না কারণ আমি আশা করি যে তাদের কোনওভাবেই প্রয়োজন হবে না। যদি এটির প্রমাণিত হয় যে আমি এ সম্পর্কে ভুল ছিলাম তবে আমি অনিবার্য ব্যর্থতা মেনে নেব।"


1

আশাবাদী লকিং সাধারণত দ্রুত হয় কারণ সেখানে ডাটাবেস দৃষ্টিকোণ থেকে আসলে কোনও লকিং নেই। সংস্করণ কলাম (বা সিউডো-কলাম, ওরা_রোস্কন এর মতো) কে সম্মান করবেন কিনা তা পুরোপুরি প্রয়োগের বিষয়। সাধারণত আপনার একই অ্যাপ্লিকেশনটিতে একই ডাটাবেসের সাথে সংযুক্ত রয়েছে, তাই ডিবি শেয়ার্ড রিসোর্সে পরিণত হয় এবং যদি এটি স্থগিত হয় তবে সমস্ত ক্লায়েন্ট ক্ষতিগ্রস্থ হবে।

আশাবাদী লক করার কৌশল সহ, 'ঝুলন্ত' ক্লায়েন্টের পক্ষে ঘটে এবং অন্যকে প্রভাবিত করে না।

তবে, যদি কোনও রেকর্ড ঘন ঘন আপডেট হয় তবে আপনি এটি অনেক বার পুনরায় পড়া শেষ করতে পারেন (আশাবাদী লক করার ক্ষেত্রে), এইভাবে আশাবাদী কৌশলটির সর্বাধিক উপকারগুলি পরাস্ত করে।

আমি উভয় পদ্ধতির শ্রেষ্ঠত্ব সম্পর্কে একমত না; উভয়ই অপব্যবহার করা যেতে পারে। হতাশাবাদী আরও ত্রুটি-ঝুঁকির কারণ এটি আরও বিপজ্জনক: লকিং ডিবি স্তরে ঘটে থাকে, আরডিএমএসের উপর নির্ভর করে যেটি লক করা আছে তার উপর আপনার নিয়ন্ত্রণ নাও থাকতে পারে (লক এসকেলেশন), আপনাকে ম্যানুয়ালি লকিং অর্ডারের যত্ন নেওয়া দরকার।


আকর্ষণীয় পয়েন্ট a1ex07, ওফিসিমিটিক লকিংটিতে এখনও লকিং অন্তর্ভুক্ত নেই, যেমন লেখকরা সবসময় অন্য লেখাগুলিকে অবরুদ্ধ করে রাখবে, সঠিক?
আলী রাজেঝি

না এটা হয় না। এ কারণেই এটি "দ্রুত"।
এরউইন স্মাউট

এটি ওরাকলের ক্ষেত্রে হলেও এমএস এসকিউএল সার্ভারের ক্ষেত্রে হতে পারে, যেহেতু এটি 'রিড কমিটেড' বিচ্ছিন্নতা স্তরটি ডিফল্টরূপে ব্যবহার করে, আশাবাদী লকিং পাঠক এবং লেখক থ্রেডগুলি একই সাথে কাজ করতে দেয়, তবে ব্লকিং থ্রেডটি কমিট না হওয়া পর্যন্ত লেখাগুলি ব্লক করে দেবে।
আলী রাজেঝি

@ অলি রাজেঝি: আমি নিশ্চিত নই যে আমি আপনার বক্তব্য অনুসরণ করেছি। পাঠ্য প্রতিশ্রুতিবদ্ধ লেখক সহ এসকিউএল সার্ভারে `READ_COMMITTED_SNAPSHOT` চালু না হওয়া পর্যন্ত ডিফল্টরূপে পাঠকদের অবরুদ্ধ করে। আশাবাদী লকিং ডিবি রিসোর্সে (সারি / পৃষ্ঠা / সারণী) লক নয়, সংস্করণটি প্রত্যাশার সাথে মেলে না, তবে রেকর্ড আপডেট করতে ডেটাবেস ব্যবহার করা সমস্ত অ্যাপ্লিকেশনগুলির মধ্যে একরকম চুক্তি।
a1ex07

1
@ এমন নের্বোন: আমি 'লেখকরা পাঠকদের অবরুদ্ধ করে না' সম্পর্কে বলেছিলাম ... "লেখকরা ব্লক / লেখককে অবরুদ্ধ করেন না" সম্পর্কে আমি কিছু উল্লেখ করেছি কোথায়?
a1ex07

0

আশাবাদী লকিং ধরে নিচ্ছে যে সমবর্তী লেনদেন একে অপরকে প্রভাবিত না করেই সম্পূর্ণ করতে পারে। সুতরাং আশাবাদী লকিং দ্রুত হয় কারণ লেনদেন করার সময় কোনও লক প্রয়োগ করা হয় না। এটি সম্মতিজনিত সমস্যা নিরাময় না হওয়া থেকে প্রতিরোধ। লেনদেনটি কেবলমাত্র (তিনটি উপায়ে ডেটাসেট, টাইমস্ট্যাম্প ডেটা টাইপ, পুরানো এবং নতুন মান পরীক্ষা করে দেখুন) যা অন্য কোনও লেনদেনের মাধ্যমে ডেটা সংশোধন করে না। পরিবর্তনের ক্ষেত্রে লেনদেনটি আবার ঘুরিয়ে দেওয়া হয়।

হতাশাবাদী লকিং অনুমান করে যে সমবর্তী লেনদেন একে অপরের সাথে দ্বন্দ্ব করবে, সুতরাং এটির জন্য লক প্রয়োজন, এটি লেনদেন পরিচালনার আইসোলেশন স্তর (পড়ুন কমিটেড, পড়ুন কমিটেড, রিপিটেটেবল রিড এবং সিরিয়ালাইজেবল) নির্দিষ্ট করে। এটি লক অর্জনের মাধ্যমে সম্মতিযুক্ত সমস্যাগুলি নিরাময় করে। লকগুলি ভাগ করা সংস্থানগুলি বা অবজেক্টগুলি (টেবিল, ডেটা সারি, ডেটা ব্লক, ক্যাশেড আইটেম, সংযোগ এবং পুরো সিস্টেম) সুরক্ষিত করে। আমাদের কাছে শেয়ারড লক, আপডেট লক, ইনসেট লক, এক্সক্লুসিভ লকস, লেনদেনের লক, ডিএমএল লকস, স্কিমা লক এবং ব্যাকআপ-পুনরুদ্ধার লক হিসাবে প্রচুর ধরণের লক রয়েছে।

আরও ধারণা পেতে


-3

এটা বলা মিথ্যা যে হতাশাবোধক লকিং আশাবাদীর চেয়ে ধীর গতিতে বলা বা আশাবাদী দ্রুততর বলা বাহুল্য। এই অনুপযুক্ত চিন্তার পদ্ধতিটি প্রদর্শনের জন্য একটি ক্লাসিক ক্যোয়ারী হ'ল বিভিন্ন আরডিবিএমএসের সমষ্টি করা, যেমন:

SELECT COUNT(*) FROM atable

আপনি দেখতে পাবেন যে, আরডিবিএমএসে নেটিভ আশাবাদী দৃষ্টিভঙ্গি সমর্থন করে, যাদের এই নেটিভ হতাশাবাদী লক রয়েছে তাদের তুলনায় এই ক্যোয়ারী সময়টি অনেক বেশি তাৎপর্যপূর্ণ

আমার পিসিতে উদাহরণস্বরূপ, একই কোয়েরিতে এসকিউএল সার্ভারে 27 এমএস এবং পোস্টগ্রেএসকিউএল 109 লাগে ...

এমভিসিসি সারিগুলির মৃত সংস্করণগুলি পড়তে অতিরিক্ত ওভারহেডের প্রয়োজন হয় এবং সামগ্রিকভাবে ভূতের রেকর্ডগুলি গণনা করবেন না the হতাশাবাদীর কাছে অতিরিক্ত ব্যয় যুক্ত হয়েছে!


4
DBMS সম্মতি নিয়ন্ত্রণ ব্যবস্থাটি আশাবাদী / নিরাশাবাদী লকিংয়ের কাছে অর্থোন্নাল এবং দুটি পৃথক ডিবিএমএসে ক্যোয়ারির রান সময়কে তুলনা করা বিভ্রান্তিকর।
মুস্তাকিয়ো

কারণ এসকিউএল সার্ভার দুটি লকিং মোডগুলি সক্ষম করতে সক্ষম হয়েছে তবে আপনি সহজেই কোনও ব্যবহারকারীর একাউন্টিং পদ্ধতির মাধ্যমে সত্যিকারের চিহ্ন ব্যবহার করে এটির তুলনা করতে পারেন।
ব্যবহারকারী 7370003
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.