যদি কোনও লেনদেন একাধিক অবজেক্টকে কখনই বিস্তৃত করতে না পারে তবে প্রতি বস্তুতে আশাবাদী কনকুরঞ্জি সিরিয়ালাইজিবিলিটি বোঝায়?


13

একটি সিস্টেম দেওয়া যা প্রদান করে:

  • প্রত্যাশিত সম্মতি নিয়ন্ত্রণ / সংস্করণ সংস্করণ প্রতি বস্তু (সিএএস ব্যবহার করে - চেক-এন্ড সেট)
  • যে কোনও লেনদেনের জন্য কোনও একক বস্তুর বেশি হওয়া দরকার না an
  • স্ন্যাপশট বিচ্ছিন্ন

এই সিস্টেমটিকে সিরিয়ালাইজযোগ্য হিসাবে বিবেচনা করা হয় ?

স্ন্যাপশট বিচ্ছিন্নতা থেকে

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

একটি দৃ concrete় উদাহরণ হিসাবে, কল্পনা করুন ভি 1 এবং ভি 2 দুটি ব্যালেন্স একক ব্যক্তি ফিলের হাতে রয়েছে held উভয়টিই মোট negativeণাত্মক (যেমন V1 + V2 ≥ 0) না হয়ে থাকে তবে ব্যাংকটি ভি 1 বা ভি 2 কে ঘাটতি চালাতে অনুমতি দেবে provided উভয় ব্যালেন্স বর্তমানে 100 ডলার। ফিল একই সাথে দুটি লেনদেন শুরু করে, টি 1 ভি 1 থেকে 200 ডলার উত্তোলন করে, এবং টি 2 ভি 2 থেকে 200 ডলার উত্তোলন করে।

এর উপর ভিত্তি করে মনে হয় যে স্কিউ লেখার সম্ভাবনা থাকা কেবল এমন কোনও সিস্টেমের জন্য যা স্ন্যাপশট বিচ্ছিন্নতার গ্যারান্টি দেয় সিরিয়ালাইজযোগ্য নয়।

তবে, এমন একটি সিস্টেমে যা কোনও লেনদেনকে একাধিক অবজেক্টগুলিকে বিস্তৃত করতে দেয় না (উপরের উদাহরণে ভি 1 এবং ভি 2) এটি লেখার পক্ষে স্কিউ হওয়া অসম্ভব বলে মনে হয়।

সুতরাং, উপরে বর্ণিত সিস্টেমটি সিরিয়ালযোগ্য। এটা কি সঠিক?


1
আমি মনে করি উত্তরটি হ্যাঁ, এই প্রোভিস সহ যে ডাটাবেসগুলি লেনদেন বাতিল করতে দেয় যা অন্যথায় লেখার স্কিউ প্রবর্তন করে - যদি লেনদেনগুলি কোনও একক বস্তু পড়তে / লেখার মধ্যে সীমাবদ্ধ থাকে, তবে তা হয় বিচ্ছিন্নতা বা সংঘর্ষ হয়।
pjc50

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

উত্তর:


1

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

স্ন্যাপশট বিচ্ছিন্নতা একটি কৌশল যা নিশ্চিত করে যে কোনও লেনদেন পুরো লেনদেনে একই ডেটাসেট দেখে। স্ন্যাপশট বিচ্ছিন্নতা কিছু গ্যারান্টি সরবরাহ করে তবে লেনদেন কীভাবে কাজ করে তা বোঝার জন্য প্রয়োজনীয় সমস্ত বৈশিষ্ট্যগুলি সংজ্ঞায়িত করে না (যদি না আমরা স্ন্যাপশট বিচ্ছিন্নতা এবং এমভিসিসি বিবাদ বেছে না নিই)।

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

স্বাচ্ছন্দ্যযুক্ত ধারাবাহিকতা মডেলগুলি বোঝা শক্ত কারণ তারা কোনও বিচ্ছিন্নতা এবং সম্পূর্ণ বিচ্ছিন্নতার মধ্যে একটি সংকরের মতো are

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

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

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

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

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

স্বাচ্ছন্দ্যপূর্ণ ধারাবাহিকতা হ'ল সম্ভাব্য অসামঞ্জস্যপূর্ণ বা ত্রুটিযুক্ত প্রবণ বলার আর একটি উপায়। (রিলাক্সড অবিচ্ছিন্নতাটিকে চূড়ান্ত ধারাবাহিকতায় বিভ্রান্ত করা উচিত নয়, যা "নোএসকিউএল" থেকে প্রবণতাজনিত অন্যরকম জনপ্রিয় রূপ))

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

যাহোক...

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

আপনার প্রশ্ন আপ লেখার পরামর্শ দেয় যে "অবজেক্টস" এর একাধিক ক্ষেত্র রয়েছে, অন্যথায় প্রশ্নের অযৌক্তিকতা হবে would

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

আপনি এর পরিবর্তে অবজেক্ট লকিং ব্যবহার করতে পারেন, যা অন্য লেনদেনটি ইতিমধ্যে এটি করার প্রক্রিয়াতে থাকলে একই বস্তুর দিকে তাকানো থেকে এমনকি দুটি লেনদেন (আপডেটের জন্য) প্রতিরোধ করবে।

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

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


0

আমি মনে করি, @ পিজেসি 50 যেমন বলেছে, (জোর দেওয়া হয়েছে :) " যদি লেনদেনগুলি কোনও একটি বিষয় পড়তে / লিখতে সীমাবদ্ধ থাকে" তবে "উত্তর হ্যাঁ" " যাইহোক, আমি মনে করি এটি কোথায় নেমে আসে এটি একটি একক বস্তুর ধারণার মধ্যে ।

স্ন্যাপশট বিচ্ছিন্নতা থেকে নেওয়া উদাহরণে , টি 1 এবং টি 2 কোনও মান ভাগ করে না। যাইহোক, তারা এখনও একটি লেখার স্কিউ জন্য একটি সম্ভাব্য কারণ " তন্ন তন্ন [হয়েছে] দেখা আপডেট অন্যান্য দ্বারা সঞ্চালিত " উৎস । সুতরাং এটি লেনদেনের দক্ষতা হ'ল প্রতিশ্রুতি দেওয়ার আগে অন্য সমস্ত আপডেট দেখতে পারা যা কোনও লেনদেনকে সত্যই সিরিয়ালযোগ্য করে তোলে।

সিরিয়ালাইজিবিলিটি থেকে :

একটি তফসিলের সিরিয়ালাইজিবিলিটি একই লেনদেনের সাথে সিরিয়াল শিডিয়ুলের (অর্থাত্, কোনও লেনদেনের ওভারল্যাপের সাথে অনুক্রমিক) একই পরিমাণের (সমাপ্তির ফলাফল হিসাবে, ডাটাবেস স্টেট, ডেটা মানগুলি) বোঝায়।

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

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