"কমিট পড়ুন" এবং "পুনরাবৃত্তযোগ্য পড়া" এর মধ্যে পার্থক্য


245

আমি মনে করি উপরের বিচ্ছিন্নতা স্তরগুলি একই রকম। কেউ দয়া করে কিছু সুন্দর উদাহরণ দিয়ে বর্ণনা করতে পারবেন মূল পার্থক্যটি কী?


3
আপনার "বিচ্ছিন্নতা স্তর" আপনি কী (জাভা ইত্যাদি) উল্লেখ করছেন তার জন্য আপনার প্রশ্নটি প্রসারিত করতে এবং ট্যাগ যুক্ত করা উচিত। "বিচ্ছিন্নতা স্তর" কিছুটা অস্পষ্ট শব্দ এবং আপনি স্পষ্টতই একটি নির্দিষ্ট পরিবেশের জন্য উত্তর চাইছেন।
jesup

উত্তর:


564

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

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

পরবর্তী বিচ্ছিন্নতা স্তর, সিরিয়ালাইজযোগ্য, আরও শক্তিশালী গ্যারান্টি দেয়: পুনরাবৃত্তযোগ্য পাঠের গ্যারান্টি ছাড়াও, এটিও গ্যারান্টি দেয় যে কোনও নতুন ডেটা পরবর্তী পড়া দ্বারা দেখা যায় না।

বলুন যে আপনার কাছে একটি সারণী C কলামযুক্ত একটি টেবিল টি রয়েছে যাতে এটির মান '1' থাকে। এবং আপনার নীচের মত একটি সাধারণ কাজ আছে তা বিবেচনা করুন:

BEGIN TRANSACTION;
SELECT * FROM T;
WAITFOR DELAY '00:01:00'
SELECT * FROM T;
COMMIT;

এটি একটি সাধারণ কাজ যা তাদের টেবিলে টি থেকে দুটি পঠন জারি করে, যার মধ্যে 1 মিনিট দেরি হয়।

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

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

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

পরিপূরক পাঠ:


24
আমি মনে করি পুনঃপঠনযোগ্য রিডের জন্য উপরে একটি ভুল রয়েছে: আপনি বলে যে বিদ্যমান সারিগুলি মুছে ফেলা বা পরিবর্তন করা যায় না, তবে আমি মনে করি সেগুলি মুছে ফেলা বা পরিবর্তন করা যেতে পারে কারণ পুনরাবৃত্তযোগ্য পাঠ কেবল আসল ডেটা নয় বরং "স্ন্যাপশট" পড়ে। Dev.mysql.com/doc/refman/5.0/en/… ডক্স থেকে : "একই লেনদেনের মধ্যে থাকা সমস্ত ধারাবাহিক পাঠ্য প্রথম পঠিত স্ন্যাপশটটি পড়ে read"
ডেরিক লিটজ

2
@ ডেরেক লিটজ আমি কি ঠিকই বলছি যে আপনি বলছেন: লেনদেন চলাকালীন তৃতীয় পক্ষ থেকে ডেটা পরিবর্তন করা যেতে পারে / হতে পারে তবে পাঠকরা এখনও 'পুরানো' মূল তথ্য দেখতে পাবেন যেন পরিবর্তনটি নেওয়া হয়নি স্থান (স্ন্যাপশট)।
প্রোগ্রামারস্টে

5
@ভূট্টা ডালপালা. হ্যাঁ, ফ্যান্টম রিডস মুছে ফেলা (বা সন্নিবেশ) থেকে ঘটতে পারে। হ্যাঁ, ফ্যান্টম রিডগুলি পুনরাবৃত্তিযোগ্য পড়ার বিচ্ছিন্নতায় ঘটতে পারে (কেবল সন্নিবেশগুলি থেকে)। না, ফ্যান্টম মুছে ফেলা থেকে পুনরাবৃত্তিযোগ্য পড়া বিচ্ছিন্নতায় ঘটতে পারে না। এটা পরীক্ষা করো. আমি যা বলছি তা আপনার উদ্ধৃত দস্তাবেজগুলির সাথে বিরোধী নয়।
অ্যান্ডি ব্রাউন

4
পছন্দ করেছেন আমি কেবল এটি আদৌ উল্লেখ করেছি কারণ আমি নিজেকে 100% নিশ্চিত নই এবং কে সঠিক ছিল তা নিশ্চিত করার জন্য গভীর ডুব দিয়ে যেতে হয়েছিল! এবং আমি চাইনি যে ভবিষ্যতের পাঠকরা বিভ্রান্ত হয়। মন্তব্যগুলি রাখছি, সম্ভবত পরামর্শ অনুযায়ী রাখা ভাল। আমি নিশ্চিত যে সূক্ষ্ম বিশদের এই স্তরের বিষয়ে আগ্রহী অন্য কেউ সমস্ত মন্তব্য পড়ার জন্য যথেষ্ট বিশেষভাবে বিবেচিত হবেন !!
অ্যান্ডি ব্রাউন 15

12
আপনার মন্তব্য মুছে ফেলার জন্য ধন্যবাদ। আলোচনা আরও বিন্দু সংযোগ করতে সহায়তা করে।
জোশ

68

পুনরাবৃত্তিযোগ্য পড়া

লেনদেনের শুরু থেকেই ডাটাবেসের রাজ্য বজায় থাকে। আপনি যদি সেশন 1 এ কোনও মান পুনরুদ্ধার করেন তবে সেশন 2 এ সেই মানটি আপডেট করুন, সেশন 1 এ আবার পুনরুদ্ধার করলে একই ফলাফল ফিরে আসবে। পাঠগুলি পুনরাবৃত্তিযোগ্য।

session1> BEGIN;
session1> SELECT firstname FROM names WHERE id = 7;
Aaron

session2> BEGIN;
session2> SELECT firstname FROM names WHERE id = 7;
Aaron
session2> UPDATE names SET firstname = 'Bob' WHERE id = 7;
session2> SELECT firstname FROM names WHERE id = 7;
Bob
session2> COMMIT;

session1> SELECT firstname FROM names WHERE id = 7;
Aaron

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

লেনদেনের প্রসঙ্গে আপনি সর্বদা সর্বাধিক প্রতিশ্রুতিবদ্ধ মানটি পুনরুদ্ধার করবেন। আপনি যদি সেশন 1 এ কোনও মান পুনরুদ্ধার করেন তবে এটি সেশন 2 এ আপডেট করুন, তারপরে এটি সেশন 1 এগেইনে পুনরুদ্ধার করুন, আপনি সেশন 2-এ পরিবর্তিত হিসাবে মানটি পাবেন। এটি শেষ প্রতিশ্রুতিবদ্ধ সারিটি পড়ে।

session1> BEGIN;
session1> SELECT firstname FROM names WHERE id = 7;
Aaron

session2> BEGIN;
session2> SELECT firstname FROM names WHERE id = 7;
Aaron
session2> UPDATE names SET firstname = 'Bob' WHERE id = 7;
session2> SELECT firstname FROM names WHERE id = 7;
Bob
session2> COMMIT;

session1> SELECT firstname FROM names WHERE id = 7;
Bob

বোধ হয়?


আমি এসকিউএল সার্ভার ২০০৮ সালে "সেট বিচ্ছিন্নতা স্তর পুনরাবৃত্তযোগ্য পাঠ্য" দিয়ে পুনরাবৃত্তযোগ্য পড়ার চেষ্টা করেছি। দুটি স্কয়ার ক্যোয়ারী উইন্ডো তৈরি করেছে। তবে কাজ হয়নি। কেন?
আদিত্য বোকাদে

1
দ্বিতীয় অধিবেশন 1 কেন এখনও অরনকে পড়বে? সেশন 2 এর লেনদেন শেষ এবং কমিট হয় না? আমি এই পুরাতনটি জানি, তবে হয়তো কেউ কিছু আলো ফেলতে পারে।
সনি চাইল্ডস 20'15

9
আমি মনে করি পুনরাবৃত্তিযোগ্য পঠন প্রথম অধিবেশন প্রতিশ্রুতি না দেওয়া পর্যন্ত দ্বিতীয় অধিবেশনটিকে অবরুদ্ধ করবে। সুতরাং উদাহরণটি ভুল।
নিঘন

4
পুনরাবৃত্তযোগ্য পাঠের ক্ষেত্রে, সেশন 1 সারিটি পড়লে এটি একটি ভাগ করা লক রাখে, যা কোনও এক্সক্লুসিভ লক (সেশন 2-এ) আপডেটের জন্য অনুমতি দেয় না, তাই ডেটা আপডেট করা যায় না।
তাহের

আমি মনে করি এসকিউএল সার্ভার এবং মাইএসকিউএল দুটি লেনদেনের মধ্যে ভাগ করে নেওয়া সারিগুলি আপডেট করার ক্ষেত্রে আলাদা আচরণ করে
ইউজার 2488286

23

এই থ্রেডটিতে আমার পড়া এবং বোঝার অনুসারে কেবল উত্তর এবং @ রিমাস-রুসানু উত্তরটি এই সাধারণ দৃশ্যের উপর ভিত্তি করে:

এ এবং বি দুটি প্রসেস রয়েছে বি প্রসেস বি টেবিল এক্স প্রসেস এ পড়ছে টেবিল এক্স প্রসেস এ আবার পড়ছে টেবিল এক্স।

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

15

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

কমিটি পড়ুন (ডিফল্ট)

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

পুনরাবৃত্তি পড়ুন

ভাগ করা লকগুলি SELECT এ নেওয়া হয় এবং তারপরে লেনদেন শেষ হওয়ার পরেই মুক্তি দেওয়া হয় । সিস্টেমটি এইভাবে গ্যারান্টি দিতে পারে যে আপনি যে মানগুলি পড়েছেন তা লেনদেনের সময় পরিবর্তিত হবে না (কারণ তারা লেনদেন শেষ না হওয়া পর্যন্ত লক থাকে) remain


13

এই চিত্রটিকে সাধারণ চিত্রের সাহায্যে ব্যাখ্যা করার চেষ্টা করছি।

প্রতিশ্রুতিবদ্ধ পড়ুন: এখানে এই বিচ্ছিন্ন স্তরে লেনদেন টি 1 লেনদেন টি 2 দ্বারা প্রতিশ্রুত X এর আপডেট হওয়া মানটি পড়বে।

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

পুনরাবৃত্তিযোগ্য পড়ুন: এই বিচ্ছিন্ন স্তরে লেনদেন টি 1 লেনদেন টি 2 দ্বারা করা পরিবর্তনগুলি বিবেচনা করবে না।

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



0

দয়া করে মনে রাখবেন যে, পুনরাবৃত্তযোগ্য পাঠ্যগুলিতে পুনরাবৃত্তিযোগ্য একটি টিউপলের সাথে সম্পর্কিত, তবে পুরো টেবিলের জন্য নয়। এএনএসসি বিচ্ছিন্নতার স্তরে, ভ্যান্ট রিড অ্যানোমালি ঘটতে পারে, যার অর্থ একই টেবিলটি পড়ুন যেখানে ক্লজটি দু'বার আলাদা রিটার্নের বিভিন্ন ফলাফল সেট ফিরে আসতে পারে। আক্ষরিক অর্থে, এটি পুনরাবৃত্তিযোগ্য নয় ।


-1

প্রাথমিক গ্রহণযোগ্য সমাধান সম্পর্কে আমার পর্যবেক্ষণ।

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


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