べき等演算とは何ですか?
-
21-08-2019 - |
質問
べき等演算とは何ですか?
解決
コンピューティングでは、冪等の操作は、同じ入力パラメータで複数回呼び出された場合、追加の効果を有していないものです。例えば、セットから項目を除去することセットに冪等の動作を考慮することができる。
数学では、冪等の操作一ここで、 F(F(X))であり、F(X) =。すべてabs()
ためabs(abs(x)) = abs(x)
のでたとえば、x
機能が冪等です。
これらのわずかに異なる定義は、数学的定義に X のことを考慮して照合することができるオブジェクトの状態を表し、 F のそのオブジェクトを変異させることができる操作です。たとえば、パイソンset
とそのdiscard
方法を検討してください。 discard
方法は、セットから要素を削除し、その要素が存在しない場合は何もしません。だから、ます:
my_set.discard(x)
を2回同じ操作をしているとまったく同じ効果があります:
my_set.discard(x)
my_set.discard(x)
べき等の操作は、多くの場合、操作を実行するための要求が少なくとも一度起こることが保証されたネットワークプロトコルの設計で使用されているが、また、複数回発生する可能性があります。操作が冪等である場合には、操作を2回以上行っても害はありません。
詳細については、冪等の上のWikipediaの記事を参照してください。
<時間>上記の答えは、以前にいくつか正しくないと誤解を招く例がありました。 2014年4月以前に書かれた以下のコメントは、古いリビジョンを参照してください。
他のヒント
冪等の操作は、任意の回数繰り返すことができ、それが一度だけ実行されたかのように、結果は同じになります。演算では、番号にゼロを追加することは、冪等である。
冪等は、「RESTfulな」Webサービスのコンテキストで多くの話されています。 RESTは、プログラムにWebコンテンツへのアクセスを与えるためにレバレッジHTTPを最大限にしようと、通常はSOAPベースのWebサービス、HTTPリクエストとレスポンスの内部だけでトンネルのリモートプロシージャコールのスタイルのサービスとは対照的に設定されます。
RESTは(Twitterユーザー、またはFlickrの画像のような)「リソース」にWebアプリケーションを整理して、POSTのHTTP動詞を使用して、PUT、GET、および、更新を作成、読み取り、およびそれらのリソースを削除するには、[削除します。
冪等はRESTに重要な役割を果たしています。あなたはRESTリソースの表現を取得した場合(例えば、FlickrのからのJPEG画像をGET)、および操作は、操作が成功するまで、あなたはただ何度も何度もGETを繰り返すことができ、失敗します。 Webサービスには、画像が得れる回数は関係ありません。あなたのTwitterアカウントの情報を更新するために、RESTfulなWebサービスを使用する場合には、Webサービスからの確認を得るために取るよう同様に、あなたは新しい情報に何度でもを置くことができます。それを千回をPUT-INGのは、PUT-INGの一度と同じです。同様に、DELETE-INGのRESTは千回リソースは、一度それを削除すると同じです。冪等は、このように、それは非常に簡単に通信エラーに弾力性のWebサービスを構築できるようになります。
さらに読書: RESTful Webサービスに、リチャードソンとRubyによる(冪等性がありますページ103-104)に議論、およびRESTのロイ・フィールディングの博士論文>。フィールディングはに冪等について語っHTTP 1.1、RFC-2616、の著者の一人でしたセクション9.1.2 のます。
どんなにあなたが操作を呼び出す回数、結果は同じになることはありません。
冪等性とは、操作を 1 回適用しても複数回適用しても同じ効果があることを意味します。
例:
- ゼロの乗算。何度やっても結果はゼロです。
- ブール値フラグを設定します。何度やってもフラグは立ったままです。
- 指定された ID を持つデータベースから行を削除します。もう一度試してみると、行はまだ消えています。
のために 純粋関数 (副作用のない関数) この場合、冪等性は f(x) = f(f(x)) = f(f(f(x))) = f(f(f(f(f(x)))) = を意味します。 ……x のすべての値に対して
のために 副作用のある関数, 、冪等性は、最初の適用後に追加の副作用が発生しないことをさらに意味します。必要に応じて、世界の状態を関数への追加の「隠し」パラメータとみなすこともできます。
同時アクションが進行している世界では、冪等であると思っていた操作が冪等でなくなる場合があることに注意してください (たとえば、別のスレッドが上記の例のブール フラグの値を設定解除する可能性があります)。基本的に、同時実行性と変更可能な状態がある場合は常に、冪等性についてより慎重に考える必要があります。
冪等性は、多くの場合、堅牢なシステムを構築する際に役立つ特性です。たとえば、サードパーティから重複したメッセージを受信するリスクがある場合、メッセージの効果が 1 回だけ発生するように、メッセージ ハンドラーを冪等な操作として機能させると便利です。
冪等の操作は、あなたが同じパラメータを渡して、複数回それを呼び出す場合でも同じ状態で結果を生成する。
ちょうど冪等性を実証し、実際のユースケースを捨てると思いました。 JavaScriptでは、あなたは(MVCモデルのように)モデルクラスの束を定義していると言います。これは、多くの場合、実装されている方法は、このような何か(基本例)と機能的に同等です。
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');
これら2つの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');
冪等の動作は、初期アプリケーションを超え、その結果、システムの即ち状態を変更せずに複数回適用することができる動作、作用、又は要求です。
例(WEB APPコンテキスト):
冪等: 複数の同一のリクエストを作ることは、単一の要求を作成するのと同じ効果があります。電子メールメッセージングシステムでメッセージが開かれ、データベースに「開かれた」とマークされています。一つは、メッセージを何度も開くことができますが、この繰り返しアクションは今まで「開」の状態にあるというメッセージが表示されます。これは、冪等操作です。初めて一つのリソース(システムの状態)と一致しないリソースが更新されるように、システムの状態が変更された情報を使用してリソースへの更新を置きます。 1がリソースに同じ更新を置く場合は、繰り返し、更新中の情報は、すべてのPUTの際にシステムにすでに情報が一致し、システムの状態に変更は発生しません。最初のPUTは、システムの状態を変更することができる、後続置くはいけない:同じ情報を繰り返し入れは冪等です。
NON-冪等: 操作は常にデータベースたびに送信され、保存される新しいメッセージで、その結果、何度もユーザーに同じメッセージを投稿するような状態の変化を、発生した場合、我々は、操作が非冪等であることを言ってます。
NULLIPOTENT: 操作は純粋に(他の言葉であなただけのデータベースを読んでいる)、データベース内の任意の変更せずにWebページの情報を表示するように、副作用を持たない場合は、私たちは、操作がNULLIPOTENTであると言います。すべてがnullipotentする必要があります取得します。
するとき、我々は明らかに、ロギングおよび診断のようなうまくいけば無害と避けられない影響を無視しているシステムの状態について話します。
冪等な操作: 複数回実行しても副作用のない操作。
例:データリソースから値を取得し、それを印刷する操作
非冪等操作: 複数回実行すると何らかの害を及ぼす可能性のある操作。(いくつかの値や状態が変更されるため)
例: 銀行口座から引き出す操作
かなり詳細かつ技術的な答え。ただ、単純な定義を追加します。
=べき等の再実行可能な
たとえば、
それ自体がCreate
操作を複数回実行した場合、エラーなしで実行することが保証されていません。
操作CreateOrUpdate
がある場合でも、それは(べき等)、走行性再述べています。
セットに対する冪等演算は、1 回以上適用されても、そのメンバーは変更されません。
次のような単項演算にすることができます 絶対(x) ここで、x は正の整数のセットに属します。ここで、absolute(absolute(x)) = x。
次のような二項演算にすることができます セットとそれ自体の結合 常に同じセットを返します。
乾杯
これは、すべてのn番目の結果は、第1の結果の値と一致する出力をもたらす任意の動作です。例えば-1の絶対値が-1の絶対値の絶対値が-1の絶対値の絶対値の絶対値は1だからである1で1です。
この参照:?場合は再帰を使用するには、本当に愚かな時間になります。
私5C: 統合ではと冪等のネットワークは非常に重要です。 現実からのいくつかの例: 想像して、私たちがターゲットシステムにデータを提供します。メッセージの順序で配信されるデータ。 シーケンスは、チャネル内で混合されている場合1.何が起こるでしょうか? (:)ネットワークパッケージは、常にそうであるように)。ターゲット・システムが冪等である場合には、結果が異なることはありません。ターゲットシステムが順番に正しい順序に依存した場合、我々は正しい秩序を回復することになる、標的部位にリシーケンサを実装する必要があります。 メッセージの重複がある場合2.何が起こるのでしょうか?ターゲット・システムのチャネルがタイムリーに承認されない場合は、ソースシステム(またはチャネル自体)は、通常、メッセージの別のコピーを送信します。その結果として、我々は、ターゲットシステム側で重複したメッセージを持つことができます。 ターゲット・システムが冪等であれば、それはそれの世話をすると結果が異なることはありません。 ターゲットシステムが冪等でない場合、我々は、チャネルのターゲット・システム側のデュプリケータ解除を実装する必要があります。
要するに, 冪等演算とは、冪等演算を何度実行しても異なる結果が得られないことを意味します。
たとえば、HTTPの仕様の定義によれば、 GET, HEAD, PUT, and DELETE
冪等な操作です。しかし POST and PATCH
そうではありません。そのため、POST が PATCH に置き換えられることがあります。
を再試行セーフ。の
通常、コンピュータサイエンスのその意味を理解するための最も簡単な方法です。