আমি মনে করি উপরের বিচ্ছিন্নতা স্তরগুলি একই রকম। কেউ দয়া করে কিছু সুন্দর উদাহরণ দিয়ে বর্ণনা করতে পারবেন মূল পার্থক্যটি কী?
আমি মনে করি উপরের বিচ্ছিন্নতা স্তরগুলি একই রকম। কেউ দয়া করে কিছু সুন্দর উদাহরণ দিয়ে বর্ণনা করতে পারবেন মূল পার্থক্যটি কী?
উত্তর:
পড়ুন প্রতিশ্রুতিবদ্ধতা একটি বিচ্ছিন্নতা স্তর যা গ্যারান্টি দেয় যে যে কোনও ডেটা পড়ার মুহূর্তে প্রতিশ্রুত প্রতিশ্রুতি ছিল read এটি কেবল পাঠককে কোনও মধ্যবর্তী, আপত্তিহীন, 'নোংরা' পড়া দেখতে বাধা দেয়। এটি কোনও প্রতিশ্রুতি দেয় না যে লেনদেনটি যদি পুনরায় পাঠানো পুনরায় ইস্যু করে তবে একই ডেটা সন্ধান করবে, তথ্য পড়ার পরে ডেটা পরিবর্তিত হতে পারে।
পুনরাবৃত্তিযোগ্য পঠন একটি উচ্চতর বিচ্ছিন্নতা স্তর, এটি পড়ার প্রতিশ্রুতিবদ্ধ স্তরের গ্যারান্টি ছাড়াও, এটিও গ্যারান্টি দেয় যে কোনও পড়া পঠিত ডেটা পরিবর্তন করতে পারে না , যদি লেনদেন আবার একই ডেটা পড়ে, এটি পূর্বের পঠিত ডেটা ঠিক জায়গায় খুঁজে পাওয়া যাবে, অপরিবর্তিত থাকবে , এবং পড়ার জন্য উপলব্ধ।
পরবর্তী বিচ্ছিন্নতা স্তর, সিরিয়ালাইজযোগ্য, আরও শক্তিশালী গ্যারান্টি দেয়: পুনরাবৃত্তযোগ্য পাঠের গ্যারান্টি ছাড়াও, এটিও গ্যারান্টি দেয় যে কোনও নতুন ডেটা পরবর্তী পড়া দ্বারা দেখা যায় না।
বলুন যে আপনার কাছে একটি সারণী C কলামযুক্ত একটি টেবিল টি রয়েছে যাতে এটির মান '1' থাকে। এবং আপনার নীচের মত একটি সাধারণ কাজ আছে তা বিবেচনা করুন:
BEGIN TRANSACTION;
SELECT * FROM T;
WAITFOR DELAY '00:01:00'
SELECT * FROM T;
COMMIT;
এটি একটি সাধারণ কাজ যা তাদের টেবিলে টি থেকে দুটি পঠন জারি করে, যার মধ্যে 1 মিনিট দেরি হয়।
আপনি যদি উপরের যুক্তিটি অনুসরণ করেন তবে আপনি দ্রুত বুঝতে পারবেন যে সিরিয়ালিজেবল লেনদেনগুলি আপনার পক্ষে জীবনকে সহজ করে তুলতে পারে, সর্বদা সম্ভাব্য প্রতিটি সাম্প্রতিক ক্রিয়াকলাপকে পুরোপুরি অবরুদ্ধ করে চলেছে, কারণ তাদের প্রয়োজন যে কেউ পরিবর্তন করতে, মুছতে বা কোনও সারি প্রবেশ করতে পারে না can .Net System.Transactions
স্কোপের ডিফল্ট লেনদেনের বিচ্ছিন্নতা স্তরটি সিরিয়ালাইজযোগ্য এবং এর ফলে ফলাফলগুলি যে অসাধারণ কাজ করে তা সাধারণত ব্যাখ্যা করে।
এবং পরিশেষে, সেখানে এসএনএপএসএইচটি বিচ্ছিন্নতা স্তরও রয়েছে। SNAPSHOT বিচ্ছিন্নতা স্তর সিরিয়ালাইজ হিসাবে একই গ্যারান্টি তোলে, কিন্তু কোনও সহবর্তী লেনদেন ডেটা পরিবর্তন করতে পারে না তা করে নয় requ পরিবর্তে, এটি প্রতিটি পাঠককে বিশ্বের নিজস্ব সংস্করণ (এটি নিজস্ব 'স্ন্যাপশট') দেখতে বাধ্য করে। এটি সহকারী আপডেটগুলিকে অবরুদ্ধ করে না বলে এটি খুব সহজেই বিরুদ্ধে প্রোগ্রাম করা খুব সহজ করে তোলে এবং খুব স্কেলযোগ্য। তবে, সেই সুবিধাটি একটি দামের সাথে আসে: অতিরিক্ত সার্ভার রিসোর্স খরচ।
পরিপূরক পাঠ:
লেনদেনের শুরু থেকেই ডাটাবেসের রাজ্য বজায় থাকে। আপনি যদি সেশন 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
বোধ হয়?
এই থ্রেডটিতে আমার পড়া এবং বোঝার অনুসারে কেবল উত্তর এবং @ রিমাস-রুসানু উত্তরটি এই সাধারণ দৃশ্যের উপর ভিত্তি করে:
এ এবং বি দুটি প্রসেস রয়েছে বি প্রসেস বি টেবিল এক্স প্রসেস এ পড়ছে টেবিল এক্স প্রসেস এ আবার পড়ছে টেবিল এক্স।
পুরানো প্রশ্ন যার ইতিমধ্যে একটি স্বীকৃত উত্তর রয়েছে তবে আমি এসকিউএল সার্ভারে লকিংয়ের আচরণটি কীভাবে পরিবর্তিত করে সে ক্ষেত্রে আমি এই দুটি বিচ্ছিন্নতার স্তরগুলির কথা ভাবতে চাই। যারা আমার মতো ডেডলকগুলি ডিবাগ করছেন তাদের পক্ষে এটি সহায়ক হতে পারে।
কমিটি পড়ুন (ডিফল্ট)
ভাগ করা লকগুলি SELECT এ নেওয়া হয় এবং তারপরে SELECT বিবৃতিটি সম্পূর্ণ হওয়ার পরে ছেড়ে দেওয়া হয় । সিস্টেমটি এইভাবে গ্যারান্টি দিতে পারে যে আপত্তিজনক ডেটার কোনও নোংরা পাঠ নেই। অন্যান্য লেনদেনগুলি আপনার নির্বাচন শেষ হওয়ার পরে এবং আপনার লেনদেন শেষ হওয়ার আগে অন্তর্নিহিত সারিগুলি পরিবর্তন করতে পারে।
পুনরাবৃত্তি পড়ুন
ভাগ করা লকগুলি SELECT এ নেওয়া হয় এবং তারপরে লেনদেন শেষ হওয়ার পরেই মুক্তি দেওয়া হয় । সিস্টেমটি এইভাবে গ্যারান্টি দিতে পারে যে আপনি যে মানগুলি পড়েছেন তা লেনদেনের সময় পরিবর্তিত হবে না (কারণ তারা লেনদেন শেষ না হওয়া পর্যন্ত লক থাকে) remain
এই চিত্রটিকে সাধারণ চিত্রের সাহায্যে ব্যাখ্যা করার চেষ্টা করছি।
প্রতিশ্রুতিবদ্ধ পড়ুন: এখানে এই বিচ্ছিন্ন স্তরে লেনদেন টি 1 লেনদেন টি 2 দ্বারা প্রতিশ্রুত X এর আপডেট হওয়া মানটি পড়বে।
পুনরাবৃত্তিযোগ্য পড়ুন: এই বিচ্ছিন্ন স্তরে লেনদেন টি 1 লেনদেন টি 2 দ্বারা করা পরিবর্তনগুলি বিবেচনা করবে না।
আমি মনে করি এই চিত্রটিও দরকারী হতে পারে, যখন আমি বিচ্ছিন্নতার মাত্রার মধ্যে পার্থক্যগুলি দ্রুত মনে করতে চাই ( ইউটিউবে কুডভেনক্যাটকে ধন্যবাদ )
দয়া করে মনে রাখবেন যে, পুনরাবৃত্তযোগ্য পাঠ্যগুলিতে পুনরাবৃত্তিযোগ্য একটি টিউপলের সাথে সম্পর্কিত, তবে পুরো টেবিলের জন্য নয়। এএনএসসি বিচ্ছিন্নতার স্তরে, ভ্যান্ট রিড অ্যানোমালি ঘটতে পারে, যার অর্থ একই টেবিলটি পড়ুন যেখানে ক্লজটি দু'বার আলাদা রিটার্নের বিভিন্ন ফলাফল সেট ফিরে আসতে পারে। আক্ষরিক অর্থে, এটি পুনরাবৃত্তিযোগ্য নয় ।
প্রাথমিক গ্রহণযোগ্য সমাধান সম্পর্কে আমার পর্যবেক্ষণ।
আরআর অধীনে (ডিফল্ট মাইএসকিএল) - যদি কোনও টিএক্স খোলা থাকে এবং একটি নির্বাচনকে বরখাস্ত করা হয়, অন্য টিএক্স পূর্ববর্তী টিএইড ফলাফল সংঘটিত হওয়া পূর্ববর্তী ফলাফল ফলাফলের সাথে সম্পর্কিত যে কোনও সারি মুছে ফেলতে পারে না (আসলে নতুন টিএক্সএর বিবরণটি মুছে ফেলা হবে মাত্র) তবে পরবর্তী টিএক্স কোনও সমস্যা ছাড়াই টেবিল থেকে সমস্ত সারি মুছে ফেলতে পারে । বিটিডব্লিউ, পূর্ববর্তী টিএক্স এর পরবর্তী READ এটি প্রতিশ্রুতিবদ্ধ না হওয়া অবধি পুরানো ডেটা দেখতে পাবে।