2.1 অনিচ্ছাকৃত পড়ুন

"লেনদেন বিচ্ছিন্নতা স্তর" বলতে বোঝায় ডিবিএমএস এর অভ্যন্তরীণ প্রক্রিয়া (অর্থাৎ বিশেষ প্রোগ্রামিং এর প্রয়োজন নেই) দ্বারা প্রদত্ত সুরক্ষার ডিগ্রীকে বোঝায় যা লেনদেনের সমান্তরাল সম্পাদনের সময় ঘটে যাওয়া সমস্ত বা উপরের কিছু ধরণের ডেটা অসঙ্গতি থেকে। SQL-92 স্ট্যান্ডার্ড চারটি বিচ্ছিন্নতা স্তরের একটি স্কেল সংজ্ঞায়িত করে:

  • অনিচ্ছাকৃত পড়ুন
  • প্রতিশ্রুতিবদ্ধ পড়ুন
  • পুনরাবৃত্তিযোগ্য পড়া
  • ক্রমানুযায়ী

তাদের মধ্যে প্রথমটি দুর্বলতম, শেষটি সবচেয়ে শক্তিশালী, প্রতিটি পরবর্তীতে সমস্ত পূর্ববর্তীগুলি অন্তর্ভুক্ত রয়েছে।

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

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

2.2 প্রতিশ্রুতিবদ্ধ পড়া

বেশিরভাগ শিল্প DBMS, বিশেষ করে Microsoft SQL সার্ভার, PostgreSQL এবং Oracle, ডিফল্টরূপে এই স্তরটি ব্যবহার করে। এই স্তরে, খসড়া, "নোংরা" পড়ার বিরুদ্ধে সুরক্ষা প্রদান করা হয়, তবে, একটি লেনদেনের ক্রিয়াকলাপের সময়, অন্যটি সফলভাবে সম্পন্ন করা যেতে পারে এবং এর দ্বারা করা পরিবর্তনগুলি সংশোধন করা হয়। ফলস্বরূপ, প্রথম লেনদেন একটি ভিন্ন ডেটা সেটের সাথে কাজ করবে।

একটি সম্পূর্ণ পঠনের বাস্তবায়ন দুটি পদ্ধতির একটির উপর ভিত্তি করে করা যেতে পারে: ব্লক করা বা সংস্করণ করা।

পঠনযোগ্য এবং পরিবর্তনযোগ্য ডেটা ব্লক করা।

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

সমান্তরালভাবে পরিবর্তিত সারিগুলির একাধিক সংস্করণ সংরক্ষণ করা হচ্ছে।

প্রতিবার একটি সারি পরিবর্তন করা হলে, DBMS এই সারির একটি নতুন সংস্করণ তৈরি করে, যার সাহায্যে ডেটা পরিবর্তনকারী লেনদেন কাজ করতে থাকে, যখন অন্য যেকোনো "পড়া" লেনদেন শেষ প্রতিশ্রুতিবদ্ধ সংস্করণটি ফিরিয়ে দেয়। এই পদ্ধতির সুবিধা হল এটি দ্রুত কারণ এটি ব্লক করা প্রতিরোধ করে। যাইহোক, এটির জন্য প্রথমটির তুলনায় র‍্যামের একটি উল্লেখযোগ্যভাবে বেশি খরচ প্রয়োজন, যা সারি সংস্করণগুলি সংরক্ষণ করার জন্য ব্যয় করা হয়।

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

একটি নির্দিষ্ট বাস্তবায়ন পদ্ধতি DBMS বিকাশকারীরা বেছে নেয় এবং কিছু ক্ষেত্রে এটি কাস্টমাইজ করা যেতে পারে। সুতরাং, ডিফল্টরূপে, MS SQL লক ব্যবহার করে, কিন্তু (সংস্করণ 2005 এবং উচ্চতর) READ_COMMITTED_SNAPSHOTডাটাবেস প্যারামিটার সেট করার সময়, এটি সংস্করণ কৌশলে সুইচ করে, ওরাকল প্রাথমিকভাবে শুধুমাত্র সংস্করণকৃত স্কিম অনুযায়ী কাজ করে। USELASTCOMMITTEDInformix-এ, আপনি একটি কনফিগারেশন বিকল্প (সংস্করণ 11.1 অনুযায়ী) সেট করে পঠন এবং লেখার লেনদেনের মধ্যে দ্বন্দ্ব প্রতিরোধ করতে পারেন যার ফলে পঠিত লেনদেন সর্বশেষ প্রতিশ্রুতিবদ্ধ ডেটা গ্রহণ করে।

2.3 পুনরাবৃত্তিযোগ্য পঠন

যে স্তরে একটি পড়ার লেনদেন "দেখতে পারে না" সেটি পূর্বে পড়া ডেটাতে পরিবর্তন করে। একই সময়ে, অন্য কোনো লেনদেন শেষ না হওয়া পর্যন্ত বর্তমান লেনদেন দ্বারা পঠিত ডেটা পরিবর্তন করতে পারে না।

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

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

2.4 সিরিয়ালাইজযোগ্য

বিচ্ছিন্নতার সর্বোচ্চ স্তর; লেনদেনগুলি একে অপরের থেকে সম্পূর্ণ বিচ্ছিন্ন, প্রত্যেকটি এমনভাবে সম্পাদিত হয় যেন কোন সমান্তরাল লেনদেন নেই। এটি শুধুমাত্র এই স্তরে যে সমসাময়িক লেনদেনগুলি "ফ্যান্টম রিড" প্রভাবের অধীন নয়।

2.5 বাস্তব DBMS-এ লেনদেন বিচ্ছিন্নতার জন্য সমর্থন

লেনদেনমূলক DBMS সর্বদা চারটি স্তরকে সমর্থন করে না এবং অতিরিক্তগুলিও প্রবর্তন করতে পারে। এছাড়াও নিরোধক প্রদান বিভিন্ন সূক্ষ্মতা আছে.

সুতরাং, নীতিগতভাবে, ওরাকল শূন্য স্তরকে সমর্থন করে না, যেহেতু এটির লেনদেনের বাস্তবায়ন "ডার্টি রিডস" বাদ দেয় এবং আনুষ্ঠানিকভাবে পুনরাবৃত্তিযোগ্য পঠন স্তর সেট করার অনুমতি দেয় না, অর্থাৎ এটি শুধুমাত্র সমর্থন করে (ডিফল্টরূপে) Read committedএবং Serializable. একই সময়ে, স্বতন্ত্র কমান্ডের স্তরে, এটি আসলে পড়ার পুনরাবৃত্তিযোগ্যতার গ্যারান্টি দেয় (যদি SELECTপ্রথম লেনদেনের একটি কমান্ড ডাটাবেস থেকে সারিগুলির একটি সেট নির্বাচন করে এবং এই সময়ে একটি সমান্তরাল দ্বিতীয় লেনদেন এই সারিগুলির কিছু পরিবর্তন করে, তাহলে প্রথম লেনদেনের দ্বারা প্রাপ্ত ফলাফল সেটে অপরিবর্তিত সারি থাকবে, যেন দ্বিতীয় কোনো লেনদেন হয়নি)। ওরাকল তথাকথিত READ-ONLYলেনদেনকেও সমর্থন করে, যা সঙ্গতিপূর্ণ Serializable, কিন্তু ডেটা নিজেরাই পরিবর্তন করতে পারে না।

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