আশাবাদী বনাম হতাশবাদী লকিং


571

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

এবং কোয়েরি সম্পাদনের জন্য আমি কোনও সঞ্চিত পদ্ধতি ব্যবহার করছি কিনা তার উপর নির্ভর করে কি এই প্রশ্নের উত্তর পরিবর্তিত হবে?

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



1
এটি একটি ভাল প্রশ্ন বিশেষত কারণ সিরিয়ালিজেবলিতে আমি পড়েছি At any technique type conflicts should be detected and considered, with similar overhead for both materialized and non-materialized conflicts
ছোট এলিয়েন

1
আশাবাদী লকিংয়ের মূল ধারণাটি কী তা সম্পর্কে এখানে আপনি এসও তে একটি ভাল ব্যাখ্যা পেতে পারেন ।
ডিয়েগো মাজারো

উত্তর:


812

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

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

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

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

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


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

2
@ গেক - এক্সএ এর মতো বিতরণ লেনদেনের প্রোটোকলগুলি এক বা একাধিক সিস্টেমে পৃথক লেনদেন শনাক্তকারীকে পুনরায় জড়িত করতে দেয়। এই জাতীয় প্রোটোকলটি পুলযুক্ত সংযোগের মাধ্যমে লকগুলি ব্যবহারের অনুমতি দেয় কারণ লেনদেন শনাক্তকরণটি সেশনগুলি থেকে ডি-মিলিত হয়ে স্পষ্টভাবে সরবরাহ করা হয়। যাইহোক, এটিতে কিছুটা ওভারহেড ব্যয় হয় এবং লক এবং লেনদেন শনাক্তকারীদের ফাঁস হওয়ার ঝুঁকিতে থাকে যদি আপনার অ্যাপ্লিকেশন সেগুলি ট্র্যাক করে রাখার বিষয়ে কুঁকড়ে না থাকে। এটি অনেক বেশি হেভিওয়েট সমাধান।
কনসার্নড

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

2
@ লেজেন্ডস - ওফিসিমিটিক লক ব্যবহার করা অবশ্যই কোনও ওয়েব অ্যাপ্লিকেশনের জন্য উপযুক্ত কৌশল হবে।
কনফারডঅফটুনব্রিজ ওয়েলস

2
আপনার উল্লেখ করা উচিত যে পছন্দটি বনাম পড়ার অনুপাতের উপরও নির্ভর করে: যদি আপনার অ্যাপ্লিকেশনটি মূলত প্রচুর ব্যবহারকারীদের দ্বারা কেবল পঠনযোগ্য অ্যাপ্লিকেশন হয় এবং কখনও কখনও আপনি ডেটা লেখেন তবে আশাবাদী লকিংয়ের চেয়ে বেশি। স্ট্যাকওভারফ্লো, উদাহরণস্বরূপ, প্রচুর লোক পৃষ্ঠাগুলি পড়ছেন এবং কখনও কখনও কেউ একটি সম্পাদনা করেন: হতাশাবাদী লকিংয়ে, লকটি কে পাবেন? প্রথমটি? আশাবাদী লকিংয়ের মধ্যে, যে ব্যক্তি পৃষ্ঠাটি সম্পাদনা করতে চান তিনি তার এটির শেষ সংস্করণ হওয়া পর্যন্ত এটি করতে পারেন।
jehon

177

আশাবাদী লকিং ব্যবহার করা হয় যখন আপনি অনেক সংঘর্ষের প্রত্যাশা করেন না। একটি সাধারণ অপারেশন করতে এটির জন্য কম ব্যয় হয় তবে যদি সংঘর্ষ ঘটে তবে লেনদেনটি বাতিল হয়ে যাওয়ার কারণে এটি সমাধানের জন্য আপনি বেশি দাম দিতে হবে।

সংঘর্ষের প্রত্যাশিত হলে হতাশাবাদী লকিং ব্যবহৃত হয়। সিঙ্ক্রোনাইজেশন লঙ্ঘন করবে এমন লেনদেনগুলি কেবল অবরুদ্ধ।

যথাযথ লকিং প্রক্রিয়া নির্বাচন করতে আপনাকে পড়ার এবং লেখার পরিমাণটি অনুমান করতে হবে এবং সেই অনুযায়ী পরিকল্পনা করতে হবে।


সাধারণ ক্ষেত্রে, বিবৃতিটি নিখুঁত তবে বিশেষ ক্ষেত্রে যেখানে আপনি সিএএস অপারেশন পরিচালনা করতে পারবেন যেখানে উত্তরে @ স্পাফম্যান হিসাবে উল্লিখিত হয়েছে, আমি বলব যে এটি নির্ভর করে।
হেরেন

75

আশাবাদী ধারণা করে যে আপনি যখন এটি পড়ছেন তখন কিছুই পরিবর্তন হবে না।

হতাশাবাদী ধারণা করে যে কিছু হবে এবং তাই এটি লক করে।

যদি এটি অপরিহার্য না হয় যে ডেটা নিখুঁতভাবে পড়া হয় তবে আশাবাদী ব্যবহার করুন। আপনি অদ্ভুত 'নোংরা' পড়তে পারেন - তবে এটি ডেডলক এবং এর মতো হওয়ার সম্ভাবনা খুব কম।

বেশিরভাগ ওয়েব অ্যাপ্লিকেশন নোংরা রিডের সাথে ভাল - বিরল অনুষ্ঠানে ডেটা পরবর্তী পুনরায় লোডের সাথে ঠিক মিলায় না।

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

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


জেপিএ আশাবাদী লকিং আপনাকে পঠন-ধারাবাহিকতার গ্যারান্টি দেয়।
গিলি

4
পঠন-ধারাবাহিকতা একটি পৃথক উদ্বেগ - পোস্টগ্রেএসকিউএল, ওরাকল এবং অন্যান্য অনেক ডাটাবেসের সাথে, আপনি এখনও কোনও প্রতিশ্রুতিবদ্ধ না হয়ে ডেটা সম্পর্কিত ধারাবাহিক দৃষ্টিভঙ্গি পান এবং একচেটিয়া সারি লক দ্বারা প্রভাবিত হন না।
রিচভেল

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

এরিক ব্রোভার বলেছেন যে ব্যাঙ্কাররা, অন্যদের মত নয়, নোংরা কার্যক্রম পছন্দ করে। আপনার গুরুগুলি ট্রলির বাইরে রয়েছে বলে মনে হচ্ছে।
ছোট এলিয়েন

1
ব্যাংকিংয়ের ধারাবাহিকতার বিষয়ে সিএপি উপপাদ্যটি বলেছিলেন এমন গুরুই এরিক ব্রিউয়ার । আপনি যা সম্মান করেন এটি তার বিপরীত।
ছোট এলিয়েন

50

ইতিমধ্যে যা বলা হয়েছে তা ছাড়াও:

  • এটি বলা উচিত যে optimisticলকিং পূর্বাভাসযোগ্য ব্যয়ে সম্মতিতে উন্নতি করে।
  • Pessimisticলক করা সামঞ্জস্যতা হ্রাস করে, তবে এটি আরও অনুমানযোগ্য। আপনি আপনার অর্থ প্রদান, ইত্যাদি ...

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

40

দ্বন্দ্বগুলি মোকাবেলা করার সময় আপনার কাছে দুটি বিকল্প রয়েছে:

  • আপনি দ্বন্দ্ব এড়ানোর চেষ্টা করতে পারেন, এবং হতাশাবাদী লকিং এটাই করে।
  • অথবা, আপনি দ্বন্দ্ব সংঘটিত হতে দিয়েছিলেন, তবে আপনার লেনদেন করার সময় আপনাকে এটি সনাক্ত করতে হবে এবং আশাবাদী লকিং এটাই করে।

এখন, আসুন নিম্নলিখিত হারানো আপডেট বিবেচনা করুন :

হারানো আপডেট

হারানো আপডেট বিচ্ছিন্নতা পড়ুন প্রতিশ্রুতিবদ্ধ বিচ্ছিন্নতা স্তরে ঘটতে পারে ।

উপরের চিত্রটিতে আমরা দেখতে পাচ্ছি যে অ্যালিস বিশ্বাস করেন যে তিনি তার কাছ থেকে 40 ফিরিয়ে নিতে পারবেন accountতবে বুঝতে পারেন না যে বব অ্যাকাউন্টের ব্যালেন্সটি সবেমাত্র বদলেছে, এবং এখন এই অ্যাকাউন্টে 20 টি বাকী রয়েছে।

হতাশাবাদী লকিং

হতাশাবাদী লকিং অ্যাকাউন্টে একটি ভাগ বা পড়া তালা নিয়ে এই লক্ষ্য অর্জন করে যাতে বব অ্যাকাউন্টটি পরিবর্তন থেকে রোধ করা হয়।

হারানো আপডেট হতাশাবাদী লকিং

উপরের চিত্রটিতে, অ্যালিস এবং বব accountউভয়ই সারণী সারিটিতে একটি পঠিত লক অর্জন করবে যা উভয় ব্যবহারকারীই পড়েছেন have পুনরাবৃত্তিযোগ্য পড়ুন বা সিরিয়ালাইজযোগ্য ব্যবহার করার সময় ডাটাবেসটি এসকিউএল সার্ভারে এই লকগুলি অর্জন করে।

কারণ অ্যালিস এবং বব উভয়ই accountপিকে মানটির সাথে পড়েছেন 1, কোনও ব্যবহারকারী পঠিত লক প্রকাশ না করা পর্যন্ত উভয়ই এটিকে পরিবর্তন করতে পারবেন না। এটি কারণ লেখার ক্রিয়াকলাপের জন্য একটি লিখন / একচেটিয়া লক অধিগ্রহণ প্রয়োজন হয় এবং ভাগ / পঠিত লকগুলি রাইটিং / এক্সক্লুসিভ লকগুলি রোধ করে।

অ্যালিস তার লেনদেনের প্রতিশ্রুতিবদ্ধ হওয়ার পরে এবং পাঠ্য তালাটি accountসারিতে প্রকাশিত হওয়ার পরে , বব UPDATEআবার পরিবর্তন শুরু করবে এবং পরিবর্তনটি প্রয়োগ করবে। অ্যালিস পঠিত লক প্রকাশ না হওয়া অবধি, বব'র আপডেট আপডেট অবরুদ্ধ।

ডেটা অ্যাক্সেস ফ্রেমওয়ার্কগুলি কীভাবে অন্তর্নিহিত ডেটাবেস হতাশাবাদী লকিং সমর্থন ব্যবহার করে সে সম্পর্কে আরও তথ্যের জন্য এই নিবন্ধটি দেখুন

আশাবাদী লকিং

আশাবাদী লকিং দ্বন্দ্ব সংঘটিত হতে দেয় তবে সংস্করণ পরিবর্তিত হওয়ায় এটি এলিসের আপডেটের প্রয়োগের পরে সনাক্ত করে।

অ্যাপ্লিকেশন-স্তরের লেনদেন

এবার, আমাদের একটি অতিরিক্ত versionকলাম রয়েছে। versionকলাম প্রত্যেক সময় একটি আপডেট মান বৃদ্ধি হয় বা মুছতে মৃত্যুদন্ড কার্যকর করা হয়, এবং এটি কোথায় আপডেট এবং মুছে বিবৃতি দফা ব্যবহার করা হয়। এটি কাজ করার জন্য, আমাদের versionআপডেট বা ডিলিটের কার্যকর করার আগে আমাদের নির্বাচন বাছাই করা এবং বর্তমানটি পড়া দরকার , অন্যথায় হিসাবে, আমরা জানতাম না যে বিভাজনটির মানটি কোথায় বা ক্লাসে পাস করতে হবে।

কীভাবে ডেটা অ্যাক্সেস ফ্রেমওয়ার্কগুলি আশাবাদী লকিং বাস্তবায়িত করে সে সম্পর্কে আরও তথ্যের জন্য, এই নিবন্ধটি দেখুন

অ্যাপ্লিকেশন-স্তরের লেনদেন

রিলেশনাল ডাটাবেস সিস্টেমগুলি 70 এর দশকের শেষের দিকে আবির্ভূত হয় যখন কোনও ক্লায়েন্ট সাধারণত টার্মিনালের মাধ্যমে একটি মেইনফ্রেমে সংযুক্ত হন। এজন্য আমরা এখনও ডেটাবেস সিস্টেমগুলিকে SESSION সেটিংয়ের মতো পদগুলি সংজ্ঞায়িত করতে দেখি।

আজকাল, ইন্টারনেটে, আমরা আর একই ডাটাবেস লেনদেনের প্রসঙ্গে পড়তে এবং লেখার প্রয়োগ করি না, এবং এসিডি আর পর্যাপ্ত থাকে না।

উদাহরণস্বরূপ, নিম্নলিখিত ব্যবহারের ক্ষেত্রে বিবেচনা করুন:

এখানে চিত্র বর্ণনা লিখুন

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

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

অ্যাপ্লিকেশন-স্তর বা যৌক্তিক লেনদেন সম্পর্কে আরও তথ্যের জন্য, এই নিবন্ধটি দেখুন

উপসংহার

আশাবাদী লক করা একটি খুব কার্যকর কৌশল, এবং পড়ুন প্রতিশ্রুতিবদ্ধ যেমন কম-কঠোর বিচ্ছিন্নতা স্তর ব্যবহার করার পরে, বা পরবর্তী ডাটাবেস লেনদেনে যখন পড়া এবং লেখার সম্পাদন করা হয় তখনও এটি ঠিক কাজ করে।

আশাবাদী লকিংয়ের অবক্ষয়টি হ'ল এটি ধরার পরে ডেটা অ্যাক্সেস ফ্রেমওয়ার্কের মাধ্যমে একটি রোলব্যাক ট্রিগার করা হবে OptimisticLockException, অতএব আমরা বর্তমানে সম্পাদনকারী লেনদেনের মাধ্যমে আমরা পূর্বে যে সমস্ত কাজ করেছি তা হারিয়েছি।

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

এই কারণে, ঘনঘন সংঘাত ঘটে যখন হতাশাবাদী লকিং আকরিক উপযুক্ত হতে পারে, কারণ এটি লেনদেন ঘূর্ণায়মান সম্ভাবনা হ্রাস করে।


কোন পরিস্থিতিতে আপনার জন্য অপটিমাস্টিকলকিং এবং হতাশবাদী লকিং চয়ন করার পরামর্শ দেওয়া হবে? এটি কখনই একটি OptimisticLockException ঘটে তার উপর নির্ভর করে?
স্টিম্পসন বিড়াল

1
এটি নির্ভর করে ব্যবহারের ক্ষেত্রে। কখনও কখনও, আশাবাদী লক করা একমাত্র সমাধান (যেমন, মাল্টি-রিকোয়েস্ট লেনদেন)। অন্যান্য সময়, হতাশাবাদী লক করা একমাত্র সমাধান (উদাঃ পোস্টগ্র্যাসকিউএল অ্যাডভাইসরি লকস )। কখনও কখনও, আপনি তাদের একত্রিত করতে হবে, যেমন এটির ক্ষেত্রে PESSIMISTIC_FORCE_INCREMENT
ভ্লাদ মিহলসিয়া

22

হতাশাবাদী লক করা আরও ভাল পছন্দ হলে আমি আরও একটি ক্ষেত্রে চিন্তা করব।

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


আশাবাদী এবং হতাশাবাদী লকিং ব্যবহার করার চেষ্টা করা লোকেরাও একে অপরের পায়ে পা রাখতে পারে, তাই বলার জন্য। এমন একটি দৃশ্যের কল্পনা করুন যেখানে কোনও আশাবাদী অধিবেশন রেকর্ডটি পড়ে এবং কিছু হিসাব-নিকাশ করছে যখন কোনও হতাশাবাদী অধিবেশনটি রেকর্ডটি আপডেট করে, তখন আশাবাদী অধিবেশনটি ফিরে আসে এবং কোনও পরিবর্তনই লক্ষ্য না করে সেই একই রেকর্ডটিকে আপডেট করে। আপডেটের জন্য নির্বাচন করুন ... কেবলমাত্র প্রতিটি সেশনে একই সিনট্যাক্স ব্যবহার করা হলে কাজ করে।
লুশনাল

ভাল ব্যাখ্যা, আপনাকে আমার কাছ থেকে ভোট দিন
দুলাজ কুলাথুঙ্গ

15

মূলত দুটি সর্বাধিক জনপ্রিয় উত্তর রয়েছে। প্রথম এক মূলত বলছেন

আশাবাদীদের একটি তিন-স্তরের আর্কিটেকচারের প্রয়োজন যেখানে আপনি অগত্যা আপনার সেশনের জন্য ডাটাবেসের সাথে কোনও সংযোগ বজায় রাখবেন না যেখানে निराशाবাদী লকিং যখন আপনি আপনার একচেটিয়া ব্যবহারের জন্য রেকর্ডটি লক না করে অবধি শেষ না করেন। আশাবাদী লকিংয়ের চেয়ে এটির আরও ভাল সততা রয়েছে আপনার ডাটাবেসের সাথে সরাসরি সংযোগের প্রয়োজন।

আর একটি উত্তর

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

অথবা

আপনার বিরল সংঘর্ষ হলে আশাবাদী লকিং সবচেয়ে ভাল কাজ করে

যেমন এটি এই পৃষ্ঠায় রাখা হয়।

"সংযোগ রাখুন" কীভাবে "কম সংঘর্ষ" এর সাথে সম্পর্কিত তা ব্যাখ্যা করার জন্য আমি আমার উত্তর তৈরি করেছি।

আপনার পক্ষে কোন কৌশলটি সবচেয়ে ভাল তা বুঝতে, আপনার ডিবিতে লেনদেন প্রতি সেকেন্ডের বিষয়ে চিন্তা করবেন না তবে একটি একক লেনদেনের সময়কাল। সাধারণত, আপনি trasnaction খুলুন, সম্পাদনা অপারেশন এবং লেনদেন বন্ধ। এটি একটি সংক্ষিপ্ত, শাস্ত্রীয় লেনদেন এএনএসআইয়ের মনে ছিল এবং লকিংয়ের সাথে দূরে সরে যাওয়ার পক্ষে ছিল। তবে, যেখানে অনেক ক্লায়েন্ট একই কক্ষ / আসন একই সাথে সংরক্ষণ করেন সেখানে আপনি কীভাবে টিকিট সংরক্ষণের ব্যবস্থা কার্যকর করবেন?

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

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

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

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


12

বেশিরভাগ ক্ষেত্রে, আশাবাদী লকিং আরও দক্ষ এবং উচ্চতর কার্যকারিতা সরবরাহ করে। হতাশাবাদী এবং আশাবাদী লকিংয়ের মধ্যে নির্বাচন করার সময় নিম্নলিখিতটি বিবেচনা করুন:

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

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

  • সংঘাতের সম্ভাবনা খুব কম হলে আশাবাদী লকিং কার্যকর - অনেক রেকর্ড রয়েছে তবে তুলনামূলকভাবে কম ব্যবহারকারী, বা খুব কম আপডেট এবং বেশিরভাগ পঠিত-টাইপ অপারেশন রয়েছে।


3

আশাবাদী লকিংয়ের জন্য একটি ব্যবহারের ক্ষেত্রে আপনার অ্যাপ্লিকেশনটি আপনার থ্রেড / হোস্টকে কোনও একটিকে 'দাবি' করার অনুমতি দেওয়ার জন্য ডাটাবেস ব্যবহার করে। এটি এমন একটি কৌশল যা নিয়মিতভাবে আমার জন্য কার্যকর।

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

দ্রষ্টব্য যে এটি ব্যবহারের ক্ষেত্রে কেবলমাত্র আশাবাদী লকিংয়ের সাথে জড়িত। সুতরাং "যখন আপনি অনেক সংঘর্ষের প্রত্যাশা করবেন না তখন আশাবাদী লকিং ব্যবহার করা হয়" এর বিকল্প হিসাবে, যেখানে আপনি সংঘর্ষের প্রত্যাশা করেন তবে এটি ব্যবহার করা যেতে পারে তবে ঠিক একটি লেনদেন সফল হতে চান want


3

আশাবাদী এবং নিরাশাবাদী লকিং সম্পর্কে উপরে অনেকগুলি ভাল কথা বলা হয়েছে। বিবেচনার জন্য একটি গুরুত্বপূর্ণ বিষয় নিম্নরূপ:

আশাবাদী লকিং ব্যবহার করার সময়, আমাদের এই সতর্কতা অবলম্বন করা দরকার যে অ্যাপ্লিকেশনগুলি কীভাবে এই ব্যর্থতাগুলি থেকে পুনরুদ্ধার করবে।

বিশেষত অ্যাসিনক্রোনাস বার্তা চালিত আর্কিটেকচারে এটি অর্ডার বার্তা প্রক্রিয়াকরণ বা হারিয়ে যাওয়া আপডেটের বাইরে যেতে পারে।

ব্যর্থতার পরিস্থিতিতে চিন্তা করা দরকার thought

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