আইডেম্পোটেন্ট অপারেশন কী?
আইডেম্পোটেন্ট অপারেশন কী?
উত্তর:
কম্পিউটিংয়ে, একটি আদর্শবান্ধব অপারেশন হ'ল এটি একই ইনপুট পরামিতিগুলির সাথে একাধিকবার বলা হয়ে থাকে তবে তার কোনও অতিরিক্ত প্রভাব নেই। উদাহরণস্বরূপ, একটি সেট থেকে কোনও আইটেম সরিয়ে ফেলা সেটগুলিতে আদর্শ পন্থা হিসাবে বিবেচনা করা যেতে পারে।
গণিতে, একটি আদর্শবান অপারেশন হ'ল যেখানে f (f (x)) = f (x) । উদাহরণস্বরূপ, abs()
ফাংশনটি আদর্শবান কারণ abs(abs(x)) = abs(x)
সকলের জন্য x
।
এই সামান্য নির্ভরশীল বিবেচনায় যে মিলন করা যায় এক্স গাণিতিক সংজ্ঞা মধ্যে একটি বস্তুর রাজ্যের প্রতিনিধিত্ব করে আর চ একটি অপারেশন যে যে বস্তুর পরিবর্তন ঘটান পারে। উদাহরণস্বরূপ, পাইথনset
এবং এর discard
পদ্ধতিটি বিবেচনা করুন । discard
পদ্ধতি একটি সেট থেকে একটি উপাদান সরিয়ে ফেলা হবে, এবং যদি উপাদান বিদ্যমান নেই কিছুই করে না। তাই:
my_set.discard(x)
দু'বার একই অপারেশন করার মতো একই প্রভাব রয়েছে:
my_set.discard(x)
my_set.discard(x)
আইডেম্পোটেন্ট অপারেশনগুলি প্রায়শই নেটওয়ার্ক প্রোটোকলগুলির ডিজাইনে ব্যবহৃত হয়, যেখানে কোনও অপারেশন করার অনুরোধটি কমপক্ষে একবার হওয়ার গ্যারান্টিযুক্ত, তবে এটি একাধিকবার ঘটতেও পারে। যদি অপারেশনটি আদর্শবান হয় তবে দুই বা ততোধিক বার অপারেশন করার কোনও ক্ষতি নেই।
আরও তথ্যের জন্য আদর্শের উপর উইকিপিডিয়া নিবন্ধটি দেখুন ।
উপরের উত্তরে এর আগে কিছু ভুল এবং বিভ্রান্তিমূলক উদাহরণ ছিল। এপ্রিল 2014 এর আগে লিখিত নীচে দেওয়া মন্তব্যগুলি একটি পুরানো সংশোধন উল্লেখ করে।
set
উত্তরের পাইথনের উদাহরণে সেট সামগ্রীর স্পষ্টরূপে রাষ্ট্র রয়েছে এবং কিছু আইডেমপ্রোটেন্ট অপারেশন যেমন অফার রয়েছে discard
।
discard
এছাড়াও ফেরত মান রাষ্ট্র encompassing দ্বারা স্টেট-লেস ভাবে বাস্তবায়িত করা যাবে না: discard([my_set, x]) = [my_new_set, x]
। সুতরাং আপনি করতে পারেন discard(discard([my_set, x]))
। মনে রাখবেন যে, [my_new_set, x]
হয় শুধু একটা যুক্তি ও তার প্রকার 2-tuple হয়।
discard(x)
সেট আর উপস্থিত থাকবে: একটি দ্বিতীয় সময় এটি আহ্বান প্রথমবার হিসাবে একই প্রভাব ফেলবে x
। গণনা আদর্শিকতা একটি সিস্টেমের দৃ ust়তা সম্পর্কে। যেহেতু জিনিসগুলি ব্যর্থ হতে পারে (যেমন নেটওয়ার্ক আউটেজ), যখন কোনও ব্যর্থতা সনাক্ত হয়, আপনি কীভাবে পুনরুদ্ধার করবেন? সবচেয়ে সহজ পুনরুদ্ধার হ'ল এটি আবার করা, তবে এটি কেবল তখনই কাজ করে যদি এটি আবার করা আদর্শবান হয়। যেমন discard(x)
আদর্শবান, তবে pop()
তা নয়। এটি সবই ত্রুটি পুনরুদ্ধারের বিষয়ে।
একটি আদর্শশালী অপারেশনটি একটি নির্বিচার সংখ্যক বার পুনরাবৃত্তি করা যেতে পারে এবং ফলাফলটি একই রকম হয় যে এটি কেবল একবার করা হয়েছিল had পাটিগণিতের ক্ষেত্রে কোনও সংখ্যায় শূন্য যুক্ত করা আদর্শবান।
"RESTful" ওয়েব পরিষেবাদিগুলির প্রসঙ্গে আইডেম্পোটেন্স অনেক বিষয়ে কথা হয়। প্রোগ্রামগুলি ওয়েব সামগ্রীতে অ্যাক্সেস দেওয়ার জন্য REST সর্বাধিক উপায়ে এইচটিটিপি উপার্জনের চেষ্টা করে এবং সাধারণত এসওএপি-ভিত্তিক ওয়েব পরিষেবাদির বিপরীতে সেট করা থাকে, যা এইচটিটিপি অনুরোধ এবং প্রতিক্রিয়াগুলির মধ্যে দূরবর্তী প্রক্রিয়া কল স্টাইল পরিষেবাদি কেবল সুড়ঙ্গ করে।
আরআরইএসটি একটি ওয়েব অ্যাপ্লিকেশনটিকে "রিসোর্সগুলি" (কোনও টুইটার ব্যবহারকারী বা কোনও ফ্লিকার চিত্রের মতো) হিসাবে সংগঠিত করে এবং তারপরে এই সংস্থানগুলি তৈরি করতে, আপডেট করতে, পড়তে, এবং মুছতে পোষ্ট, পুট, জিইটি এবং ডিলেট এর HTTP ক্রিয়া ব্যবহার করে।
আদর্শের মধ্যে বিশ্রামে গুরুত্বপূর্ণ ভূমিকা পালন করে। যদি আপনি কোনও রেস্ট স্টোরের উপস্থাপনা পান (যেমন, ফ্লিকারের একটি জেপিগ ছবিটি পান) এবং অপারেশন ব্যর্থ হয়, অপারেশন সফল না হওয়া পর্যন্ত আপনি কেবল জিইটি পুনরাবৃত্তি করতে পারেন। ওয়েব সার্ভিসে, ছবিটি কতবার আয় করেছে তা বিবেচ্য নয়। তেমনিভাবে, আপনি যদি নিজের টুইটার অ্যাকাউন্টের তথ্য আপডেট করতে কোনও রেস্টস্টুল ওয়েব পরিষেবা ব্যবহার করেন, আপনি ওয়েব পরিষেবা থেকে নিশ্চিতকরণ পেতে নতুন তথ্যটিকে যতবার সময় নেবে ততবার বার করতে পারেন। এটি হাজার বার পুট-ইন করা একবার এটি পুট-ইন করার মতো। একইভাবে হাজারবার রিসোর্স রিসোর্স ডিলিট করে দেওয়া একবারে মুছে ফেলার মতোই। Idempotence এইভাবে যোগাযোগের ত্রুটির প্রতিরোধী একটি ওয়েব পরিষেবা নির্মান করা অনেক সহজ করে তোলে।
আরও পঠন: রিচার্ডসন এবং রুবির রাইসফুল ওয়েব সার্ভিসেস , (আদর্শশক্তি 103-104 পৃষ্ঠায় আলোচনা করা হয়েছে), এবং রয় ফিল্ডিংয়ের পিএইচডি গবেষণাগুলি আরইএসটি-র উপর রয়েছে । ফিল্ডিং এইচটিটিপি ১.১, আরএফসি -২16১16 এর অন্যতম লেখক, যা বিভাগ ৯.১.২-তে আদর্শবান্ধবতার কথা বলে ।
আপনি অপারেশনটিকে যতবার কল করুন না কেন ফলাফল একই হবে।
truncate
এবং delete
।
আইডেম্পোটেন্স মানে হ'ল একবার কোনও অপারেশন প্রয়োগ করা বা একাধিকবার প্রয়োগ করার একই প্রভাব রয়েছে।
উদাহরণ:
জন্য বিশুদ্ধ ফাংশন (কোন পার্শ্ব প্রতিক্রিয়া সঙ্গে ফাংশন) তাহলে idempotency যে চ (x) = চ (চ (x) এর) = চ (চ (চ (x) এর)) = চ (চ (চ (চ (x) এর)) বোঝা ) = ...... এক্স এর সমস্ত মানের জন্য
পার্শ্ব প্রতিক্রিয়াযুক্ত ক্রিয়াকলাপগুলির জন্য , আদর্শগতভাবে আরও বোঝায় যে প্রথম প্রয়োগের পরে কোনও অতিরিক্ত পার্শ্ব প্রতিক্রিয়া হবে না। আপনি যদি চান তবে এই ফাংশনটির জন্য বিশ্বের রাষ্ট্রটিকে অতিরিক্ত "লুকানো" পরামিতি হিসাবে বিবেচনা করতে পারেন।
নোট করুন যে এমন একটি পৃথিবীতে যেখানে আপনার একযোগে ক্রিয়াকলাপ চলছে, আপনি দেখতে পাবেন যে আপনি যে অপারেশনগুলি আদর্শিক শক্তি বলে মনে করেছিলেন সেই কাজগুলি এতটা বন্ধ হয়ে গেছে (উদাহরণস্বরূপ, অন্য কোনও থ্রেড উপরের উদাহরণে বুলিয়ান পতাকার মান আনসেট করতে পারে)। মূলত যখনই আপনার একচেটিয়া এবং পরিবর্তনীয় স্থিতি থাকে, আপনাকে আদর্শগত সম্পর্কে আরও বেশি যত্ন সহকারে চিন্তা করতে হবে।
শক্তিশালী সিস্টেম তৈরিতে আইডেম্পোটেন্সি প্রায়শই একটি দরকারী সম্পত্তি। উদাহরণস্বরূপ, যদি কোনও ঝুঁকি থাকে যে আপনি কোনও তৃতীয় পক্ষের সদৃশ বার্তা গ্রহণ করতে পারেন, তবে বার্তা হ্যান্ডলারটি আদর্শবান অপারেশন হিসাবে কাজ করতে সহায়তা করবে যাতে বার্তাটির প্রভাব কেবল একবার ঘটে।
f(x) = f(f(x))
, আপনার অর্থ কি এটি f(x){return x+1;}
খাঁটি ফাংশন নয়? কারণ f(x) != f(f(x))
: f(1)
3 দেয় যখন f(2)
3 দেয়
f(x) = f(f(x))
। কিন্তু @ গ্রেগ হিউগিল যেমন উল্লেখ করেছেন, এই সংজ্ঞাটি বোঝার জন্য আপনাকে x
একটি অবজেক্ট f
হিসাবে এবং একটি ক্রিয়া হিসাবে বিবেচনা করতে হবে যা বস্তুর অবস্থাকে f
পরিবর্তিত করে (যেমন: আউটপুটটি একটি রূপান্তরিত হয় x
)।
আপনি যদি একই পরামিতিগুলিতে পাস করে থাকেন তবে একাধিকবার কল করলেও একটি আদর্শশালী অপারেশন একই অবস্থায় ফলাফল তৈরি করে।
কেবল একটি বাস্তব ব্যবহারের কেস ছুঁড়ে দিতে চেয়েছিলেন যা আদর্শবোধকে দেখায়। জাভাস্ক্রিপ্টে, বলুন যে আপনি একগুচ্ছ মডেল ক্লাস সংজ্ঞায়িত করছেন (এমভিসি মডেল হিসাবে)। এটি যেভাবে প্রায়শই প্রয়োগ করা হয় তা কার্যকরীভাবে এর মতো (মূল উদাহরণ) এর সমান:
function model(name) {
function Model() {
this.name = name;
}
return Model;
}
তারপরে আপনি এর মতো নতুন ক্লাস সংজ্ঞায়িত করতে পারেন:
var User = model('user');
var Article = model('article');
আপনি যদি কোডের অন্য কোথাও থেকে User
ক্লাসটি পেতে চেষ্টা করেন model('user')
তবে তা ব্যর্থ হবে:
var User = model('user');
// ... then somewhere else in the code (in a different scope)
var User = model('user');
এই দুটি User
কনস্ট্রাক্টর আলাদা হবে। এটাই,
model('user') !== model('user');
এটিকে আদর্শবান করে তোলার জন্য , আপনি কেবল এইরকম কিছু ধরণের ক্যাশেিং ব্যবস্থা যুক্ত করবেন:
var collection = {};
function model(name) {
if (collection[name])
return collection[name];
function Model() {
this.name = name;
}
collection[name] = Model;
return Model;
}
ক্যাচিং যুক্ত করে, যতবার আপনি model('user')
এটি করেছেন একই জিনিস হবে এবং তাই এটি আদর্শবান। তাই:
model('user') === model('user');
আইডিম্পোটেন্ট অপারেশন হ'ল একটি অপারেশন, ক্রিয়া বা অনুরোধ যা প্রাথমিক প্রয়োগের বাইরেও ফলাফল, অর্থাৎ সিস্টেমের অবস্থা পরিবর্তন না করে একাধিকবার প্রয়োগ করা যেতে পারে।
উদাহরণ (ওয়েব অ্যাপ্লিকেশন বিষয়বস্তু):
আইডেম্পোটেন্ট: একাধিক অনুরূপ অনুরোধ করা একক অনুরোধ করার অনুরূপ প্রভাব ফেলে। একটি ইমেল মেসেজিং সিস্টেমে একটি বার্তা ডেটাবেজে খোলা হয় এবং "খোলা" হিসাবে চিহ্নিত করা হয়। কেউ বার বার বার বার খুলতে পারে তবে এই পুনরাবৃত্তির ক্রিয়া কেবল সেই বার্তাটির "খোলা" অবস্থায় থাকবে। এটি একটি আদর্শশালী অপারেশন। প্রথমবার যখন কোনও তথ্য ব্যবহার করে কোনও সংস্থার আপডেট দেয় যা সংস্থার (সিস্টেমের অবস্থা) সাথে মেলে না, সংস্থানটি আপডেট হওয়ার সাথে সাথে সিস্টেমের অবস্থা পরিবর্তিত হবে। যদি কোনও রিসোর্সে একই আপডেট পুনরায় পুট করে থাকে তবে আপডেটের তথ্যগুলি প্রতিটি পুট-এর উপরে সিস্টেমের মধ্যে থাকা তথ্যের সাথে মেলে এবং সিস্টেমের অবস্থাতে কোনও পরিবর্তন ঘটবে না। একই তথ্যের সাথে পুনরাবৃত্তি করা পুটগুলি আদর্শবান:
নন-আইডেম্পোটেন্ট: যদি কোনও ক্রিয়াকলাপ সর্বদা রাষ্ট্রের পরিবর্তনের কারণ হয়ে দাঁড়ায়, যেমন বারবার একই ব্যবহারকারীকে একই বার্তা পোস্ট করে, ফলে প্রতিবার একটি নতুন বার্তা প্রেরণ করা হয় এবং ডাটাবেসে সঞ্চিত থাকে, আমরা বলি যে অপারেশনটি নন-আইডেম্পোটেন্ট।
অবাধ্যতা: যদি কোনও অপারেশনের কোনও পার্শ্ব প্রতিক্রিয়া না থাকে, যেমন কোনও ডাটাবেজে কোনও পরিবর্তন ছাড়াই কোনও ওয়েব পৃষ্ঠায় বিশুদ্ধরূপে তথ্য প্রদর্শন করা (অন্য কথায় আপনি কেবল ডাটাবেসটি পড়ছেন), আমরা বলি অপারেশনটি নালিশ OT সমস্ত জিইটিগুলি শূন্যপদ হওয়া উচিত।
সিস্টেমের অবস্থার বিষয়ে কথা বলার সময় আমরা অবশ্যই লগিং এবং ডায়াগনস্টিক্সের মতো আশঙ্কাজনক নিরীহ এবং অনিবার্য প্রভাবগুলি উপেক্ষা করছি।
আইডেম্পোটেন্ট অপারেশনস: একাধিকবার কার্যকর করা হলে অপারেশনগুলির কোনও পার্শ্ব-প্রতিক্রিয়া নেই।
উদাহরণ : একটি অপারেশন যা কোনও ডেটা রিসোর্স থেকে মানগুলি পুনরুদ্ধার করে এবং বলে যে এটি
অ-আইডেম্পোটেন্ট অপারেশনগুলি মুদ্রণ করে
: একাধিকবার মৃত্যুদন্ড কার্যকর করা হলে এমন অপারেশন যা কিছু ক্ষতি করতে পারে। (যেমন তারা কিছু মান বা রাষ্ট্র পরিবর্তন করে)
উদাহরণ: একটি অ্যাকাউন্ট যা একটি ব্যাংক অ্যাকাউন্ট থেকে প্রত্যাহার করে
বেশ বিস্তারিত এবং প্রযুক্তিগত উত্তর। কেবল একটি সাধারণ সংজ্ঞা যুক্ত করা হচ্ছে।
আইডেম্পোটেন্ট = পুনরায় চালিত
উদাহরণস্বরূপ,
Create
একবারে একাধিকবার কার্যকর হলে ত্রুটি ছাড়াই চালানোর গ্যারান্টিটি স্বয়ংক্রিয়ভাবে পরিচালিত হয় না। তবে যদি কোনও অপারেশন হয় CreateOrUpdate
তবে এটি পুনরায় চালিত হওয়ার (আইডেম্পোটেন্সি) বলে।
একটি সেট উপর একটি আদর্শশালী অপারেশন তার সদস্যদের এক বা একাধিকবার প্রয়োগ করার সময় অপরিবর্তিত রাখে।
এটি নিখুঁত (x) এর মতো একটি অবিচ্ছিন্ন ক্রিয়াকলাপ হতে পারে যেখানে x ধনাত্মক পূর্ণসংখ্যার সংস্থার সাথে সম্পর্কিত। এখানে পরম (পরম (এক্স)) = এক্স।
এটি একটি বাইনারি অপারেশন হতে পারে যেমন একটি সেট এর ইউনিয়নের সাথে সর্বদা একই সেটটি ফিরে আসে।
চিয়ার্স
এটি এমন কোনও ক্রিয়াকলাপ যা প্রতি নবম ফলাফলের ফলে 1 ম ফলাফলের মানের সাথে মিলে একটি আউটপুট আসবে। উদাহরণস্বরূপ -1 এর পরম মান হ'ল 1. -1 এর পরম মানটির পরম মান 1। -1 এর পরম মানের নিরঙ্কুশ মানটির পরম মান 1 এবং আরও অনেক কিছু।
আরও দেখুন: পুনরাবৃত্তি ব্যবহার করার জন্য সত্যিই নির্বোধ সময় কখন হবে?
আইডেমপ্রোটেন্ট অপারেশন বোঝার একটি ভাল উদাহরণ হতে পারে দূরবর্তী কী দিয়ে কোনও গাড়ি লক করা।
log(Car.state) // unlocked
Remote.lock();
log(Car.state) // locked
Remote.lock();
Remote.lock();
Remote.lock();
log(Car.state) // locked
lock
একটি আদর্শবান অপারেশন। প্রতিবার চালানোর সময় কিছুটা পার্শ্ব প্রতিক্রিয়া থাকলেও lock
, জ্বলজ্বলে মত, গাড়িটি এখনও একই লক অবস্থায় রয়েছে, আপনি যতবার লক অপারেশন চালান না কেন।
আমার 5 সি: ইন্টিগ্রেশন এবং নেটওয়ার্কিংয়ে আইডেম্পোটেন্সি খুব গুরুত্বপূর্ণ। বাস্তব-জীবনের বেশ কয়েকটি উদাহরণ: কল্পনা করুন, আমরা লক্ষ্য সিস্টেমে ডেটা সরবরাহ করি। বার্তাগুলির ক্রম দ্বারা ডেটা সরবরাহ করা। 1. যদি চ্যানেলটিতে ক্রমটি মিশ্রিত হয় তবে কী হবে? (নেটওয়ার্ক প্যাকেজ সর্বদা যেমন করে :))। লক্ষ্য ব্যবস্থা যদি আদর্শবান হয় তবে ফলাফলটি আলাদা হবে না। যদি টার্গেট সিস্টেমটি ক্রমটিতে সঠিক ক্রমের উপর নির্ভর করে, আমাদের লক্ষ্য স্থানে গবেষক প্রয়োগ করতে হবে, যা সঠিক ক্রমটি পুনরুদ্ধার করবে। ২. মেসেজের নকল থাকলে কী হবে? যদি টার্গেট সিস্টেমের চ্যানেল সময়মত স্বীকৃতি না দেয় তবে উত্স সিস্টেম (বা নিজেই চ্যানেল) বার্তাটির অন্য একটি অনুলিপি প্রেরণ করে। ফলস্বরূপ আমরা টার্গেট সিস্টেমের পাশে নকল বার্তা রাখতে পারি। যদি লক্ষ্য ব্যবস্থাটি আদর্শবান, এটি এর যত্ন নেয় এবং ফলাফল আলাদা হবে না। টার্গেট সিস্টেমটি আদর্শবান না হলে আমাদের চ্যানেলের টার্গেট সিস্টেমের দিকে ডুপ্লিকেটরটি প্রয়োগ করতে হবে।
সংক্ষেপে , আইডেম্পোটেন্ট অপারেশনগুলির অর্থ হ'ল আপনি আদর্শবান্ধব ক্রিয়াকলাপগুলি যতবার পরিচালনা করেন না কেন অপারেশনের ফলে বিভিন্ন ফলাফল হয় না।
উদাহরণস্বরূপ, এইচটিটিপি-র স্পেকের সংজ্ঞা অনুসারে আদর্শ আদর্শ GET, HEAD, PUT, and DELETE
কার্যক্রম রয়েছে; তবে POST and PATCH
হয় না। যে কারণে কখনও কখনও POST
প্রতিস্থাপন করা হয় PUT
।
পুনরায় চেষ্টা করুন-নিরাপদ।
কম্পিউটার বিজ্ঞানে এটির অর্থ বোঝার সহজতম উপায়।
Idempotent operations are often used in the design of network protocols
হয়েছে যে এখানে একটি সম্পর্কিত উদাহরণ রয়েছে ** জিইটি সার্ভারে কিছু পরিবর্তন করার কথা মনে করা হয় না, তাই জিইটি হ'ল আদর্শবান। এইচটিটিপি / সার্লেট প্রসঙ্গে, এর অর্থ হ'ল একই অনুরোধটি কোনও নেতিবাচক পরিণতি ছাড়াই দু'বার করা যেতে পারে। ** পোস্ট আদর্শবান নয়।