যেমন বিআরবি চা বলেছেন, ডাটাবেস বাস্তবায়ন এবং তারা যে অ্যালগরিদম ব্যবহার করেন তার উপর নির্ভর করে: এমভিসিসি বা টু ফেজ লকিং।
কিউবিআরডি (ওপেন সোর্স আরডিবিএমএস) এই দুটি অ্যালগরিদমের ধারণাটি ব্যাখ্যা করে:
প্রথমটি হ'ল টি 2 লেনদেন যখন এ রেকর্ডটি পরিবর্তন করার চেষ্টা করে, তখন তা জানে যে টি 1 লেনদেন ইতিমধ্যে A রেকর্ড পরিবর্তন করেছে এবং টি 1 লেনদেন সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করে কারণ টি 2 লেনদেনটি টি 1 লেনদেনটি কমিট বা রোলড হবে কিনা তা জানতে পারে না পেছনে. এই পদ্ধতিটিকে টু-ফেজ লকিং (2PL) বলা হয়।
- একাধিক সংস্করণ সম্মতি নিয়ন্ত্রণ (এমভিসিসি)
অন্যটি হ'ল তাদের প্রত্যেকের টি 1 এবং টি 2 লেনদেনের নিজস্ব পরিবর্তিত সংস্করণ থাকতে দেওয়া। এমনকি যখন টি 1 লেনদেনটি A থেকে 1 রেকর্ড পরিবর্তন করেছে, তখনও টি 1 লেনদেনটি মূল মান 1টিকে যেমনটি ছেড়ে যায় এবং লিখেছেন যে A রেকর্ডের টি 1 লেনদেনের সংস্করণ 2, তারপরে, নীচের টি 2 লেনদেনটি একটি রেকর্ড পরিবর্তন করে 1 থেকে 3 পর্যন্ত, 2 থেকে 4 পর্যন্ত নয় এবং লিখেছেন যে A রেকর্ডের টি 2 লেনদেনের সংস্করণ 3।
যখন টি 1 লেনদেনটি আবার ঘুরিয়ে দেওয়া হয়, তখন 2, টি 1 লেনদেনের সংস্করণ, A রেকর্ডে প্রয়োগ করা হয়নি তা বিবেচ্য নয়। এর পরে, যদি টি 2 লেনদেন প্রতিশ্রুতিবদ্ধ হয়, 3, টি 2 লেনদেনের সংস্করণ, এ রেকর্ডে প্রয়োগ করা হবে। টি 2 লেনদেনের আগে টি 2 লেনদেন প্রতিশ্রুতিবদ্ধ থাকলে, টি 2 লেনদেন করার সময় A রেকর্ডকে 2 এবং তারপরে 3 করে দেওয়া হয়। চূড়ান্ত ডাটাবেস স্থিতি অন্যান্য লেনদেনের উপর কোনও প্রভাব ছাড়াই স্বাধীনভাবে প্রতিটি লেনদেনকে কার্যকর করার স্ট্যাটাসের সমান। অতএব, এটি এসিডি সম্পত্তি সন্তুষ্ট করে। এই পদ্ধতিটিকে মাল্টি-ভার্সন কনক্যুরঞ্জি কন্ট্রোল (এমভিসিসি) বলা হয়।
এমভিসিসি মেমরির বর্ধিত ওভারহেডের মূল্যে (কারণ এটি একই ডেটার বিভিন্ন সংস্করণ বজায় রাখতে হয়) এবং গণনা (REPETEABLE_READ স্তরে আপনি আপডেটগুলি আলগা করতে পারবেন না) হিসাবে একই সময়ে সংশোধন করার অনুমতি দেয় যাতে এটি অবশ্যই হিবিরেটের মতো ডেটার সংস্করণগুলি পরীক্ষা করে কিছু করে Optimistick লকিং )।
2PL তে লেনদেনের বিচ্ছিন্নতার স্তরগুলি নিম্নলিখিতগুলি নিয়ন্ত্রণ করে :
ডেটা পড়ার সময় লক নেওয়া হয় কিনা এবং কী ধরণের লকগুলির অনুরোধ করা হয় Whether
কতক্ষণ পঠিত তালা রাখা হয়।
কোনও পঠন অপারেশন রেফারেন্সিং সারিগুলি অন্য লেনদেন দ্বারা সংশোধিত হয়েছে কিনা:
সারিটির একচেটিয়া লকটি মুক্ত না হওয়া পর্যন্ত অবরুদ্ধ করুন।
বিবৃতি বা লেনদেন শুরু হওয়ার সময় বিদ্যমান সারিটির প্রতিশ্রুতিবদ্ধ সংস্করণটি পুনরুদ্ধার করুন।
অননুমোদিত ডেটা পরিবর্তনটি পড়ুন
লেনদেনের বিচ্ছিন্নতা স্তর নির্বাচন করা ডেটা পরিবর্তনগুলি রক্ষা করতে যে লকগুলি অর্জিত হয় তাদের উপর প্রভাব ফেলবে না। লেনদেনের জন্য বিচ্ছিন্নতা নির্ধারণের স্তর নির্বিশেষে কোনও লেনদেন সর্বদা যে কোনও ডেটা সংশোধন করে এবং লকটি ধরে রাখে সেটিতে এটি সর্বদা একচেটিয়া লক পায়। পাঠ্য ক্রিয়াকলাপগুলির জন্য, লেনদেনের বিচ্ছিন্নতা স্তরগুলি প্রাথমিকভাবে অন্যান্য লেনদেন দ্বারা সংশোধিত প্রভাবগুলির থেকে সুরক্ষা স্তরকে সংজ্ঞায়িত করে।
একটি নিম্ন বিচ্ছিন্নতা স্তর একই সাথে অনেক ব্যবহারকারীর ডেটা অ্যাক্সেস করার ক্ষমতা বাড়ায়, তবে ব্যবহারকারীদের মুখোমুখি হতে পারে এমন নোংরা পড়া বা হারিয়ে যাওয়া আপডেটের মতো সম্মতিযুক্ত প্রভাবগুলির সংখ্যা বৃদ্ধি করে ।
এসকিউএল সার্ভারে লক এবং বিচ্ছিন্নতা স্তরের মধ্যে সম্পর্কের কংক্রিট উদাহরণ (READ_COMMITTED_SNAPSHOT = চালু থাকলে READ_COMMITED ব্যতীত 2PL ব্যবহার করুন)
READ_UNCOMMITED: অন্যান্য লেনদেনকে বর্তমান লেনদেনের দ্বারা পড়া ডেটা পরিবর্তন করতে বাধা দেওয়ার জন্য ভাগ করা লকগুলি ইস্যু করবেন না। পড়ুন অনিক্মিত লেনদেনগুলি এমন একচেটিয়া লক দ্বারা অবরুদ্ধ করা হয়নি যা বর্তমান লেনদেনকে সারি সারি পাঠানো থেকে রোধ করতে পারে যা পরিবর্তিত হয়েছে তবে অন্যান্য লেনদেন দ্বারা প্রতিশ্রুতিবদ্ধ নয়। [...]
READ_COMMITED:
- যদি READ_COMMITTED_SNAPSHOT OFF (ডিফল্ট) এ সেট করা থাকে: বর্তমান লেনদেনটি একটি পঠন ক্রিয়াকলাপ চলাকালীন অন্য লেনদেনকে সারি পরিবর্তন করতে বাধা দিতে ভাগ করা লকগুলি ব্যবহার করে। ভাগ করা লকগুলি অন্যান্য লেনদেন সম্পন্ন না হওয়া পর্যন্ত অন্যান্য লেনদেন দ্বারা সংশোধিত সারিগুলি পড়া স্টেটমেন্টটি অবরুদ্ধ করে। [...] পরবর্তী সারিতে প্রক্রিয়া করার আগে সারি লকগুলি প্রকাশ করা হয়। [...]
- যদি READ_COMMITTED_SNAPSHOT চালু করা থাকে, ডেটাবেস ইঞ্জিন বিবৃতিটির শুরুতে বিদ্যমান হিসাবে ডেটা লেনদেনের সাথে সামঞ্জস্যপূর্ণ স্ন্যাপশট সহ প্রতিটি বিবৃতি উপস্থাপন করতে সারি সংস্করণ ব্যবহার করে। অন্যান্য লেনদেনের দ্বারা আপডেটগুলি থেকে ডেটা রক্ষা করতে লকগুলি ব্যবহার করা হয় না।
REPETEABLE_READ: লেনদেনে প্রতিটি বিবৃতি দ্বারা পঠিত সমস্ত ডেটাতে ভাগ করা লকগুলি রাখা হয় এবং লেনদেন সম্পূর্ণ না হওয়া পর্যন্ত ধরে রাখা হয়।
গুরুত্বপূর্ণ [...] লেনদেন শেষ না হওয়া পর্যন্ত ব্যাপ্তি লকগুলি ধরে রাখা হয়।