Frage

Was ist ein idempotent Betrieb?

War es hilfreich?

Lösung

In der Computersprache ein idempotent Betrieb ist eine, die keinen zusätzlichen Effekt hat, wenn es mehr als einmal mit dem gleichen Eingabeparameter aufgerufen wird. Zum Beispiel kann ein Element aus einem Satz Entfernen einen idempotent Betrieb am Set berücksichtigt werden.

In der Mathematik ein idempotent Betrieb ist ein, wo f (f (x)) = f (x) . Zum Beispiel wird die abs() Funktion, weil abs(abs(x)) = abs(x) für alle x idempotent.

Diese können leicht unterschiedlichen Definitionen in Einklang gebracht werden, indem man bedenkt, dass x in der mathematischen Definition den Zustand eines Objekts darstellt, und f ist eine Operation, die das Objekt mutieren kann. Betrachten wir zum Beispiel die Python set und seine discard Methode. Die discard Methode entfernt ein Element aus einem Satz, und tut nichts, wenn das Element nicht existiert. Also:

my_set.discard(x)

hat genau die gleiche Wirkung wie die gleiche Operation zu tun zweimal:

my_set.discard(x)
my_set.discard(x)

Idempotent Operationen werden oft bei der Gestaltung von Netzwerkprotokollen verwendet werden, wo eine Anforderung, eine Operation auszuführen ist garantiert mindestens einmal passieren, aber vielleicht auch mehr passieren als einmal. Wenn die Operation idempotent ist, dann gibt es keinen Schaden bei der Durchführung der Operation zwei oder mehr Male.

Sehen Sie den Wikipedia-Artikel über idempotence für weitere Informationen.


Die obige Antwort hatte zuvor einige falsche und irreführende Beispiele. Kommentare unten geschrieben vor April 2014 beziehen sich auf eine ältere Version.

Andere Tipps

Ein idempotent Betrieb kann eine beliebige Anzahl von Malen wiederholt werden, und das Ergebnis wird das gleiche sein, wie wenn es nur einmal durchgeführt worden war. In der Arithmetik, das Hinzufügen Null auf eine Zahl ist idempotent.

Idempotenz wird über eine Menge im Rahmen des „RESTful“ Web-Service gesprochen. REST sucht Hebel HTTP bis maximal Programme den Zugriff auf Web-Inhalte zu geben, und wird in der Regel im Gegensatz zu SOAP-basierten Web-Services, die nur Tunnel Remote Procedure Call Stil Dienste innerhalb HTTP-Anfragen und Antworten eingestellt.

REST organisiert eine Web-Anwendung in „Ressourcen“ (wie ein Twitter-Nutzer oder ein Flickr-Bild) und verwendet dann die HTTP-Verben von POST, PUT, GET und DELETE zu erstellen, zu aktualisieren, lesen, und diese Ressourcen zu löschen.

Idempotenz spielt eine wichtige Rolle in REST. Wenn Sie eine Darstellung einer REST-Ressource GET (zB GET ein JPEG-Bild von Flickr), und der Vorgang fehlschlägt, können Sie nur die GET wiederholen immer wieder, bis die Operation erfolgreich. Um den Web-Service, ist es egal, wie oft das Bild bekommen wird. Ebenso, wenn Sie einen RESTful Web-Service verwenden, um Ihre Twitter-Account-Informationen zu aktualisieren, können Sie die neuen Informationen so oft setzen, wie es nimmt, um eine Bestätigung des Web-Service zu erhalten. PUT-ing es tausendmal ist die gleiche wie PUT-ing es einmal. Ähnlich DELETE-ing ein REST tausendmal Ressource ist das gleiche, wie es einmal zu löschen. Idempotenz so macht es viel einfacher, einen Web-Service zu konstruieren, die zu Kommunikationsfehlern elastisch ist.

Weiterführende Literatur: RESTful Web Services , von Richardson und Ruby (idempotence ist diskutiert auf Seite 103-104) und Dissertation von Roy Fieldings auf REST . Fielding war einer der Autoren von HTTP 1.1, RFC-2616, die über idempotence spricht in Abschnitt 9.1.2 .

Egal, wie oft Sie die Operation aufrufen, wird das Ergebnis das gleiche.

Idempotenz bedeutet, dass sobald eine Operation Anwendung oder mehrfach hat die gleiche Wirkung anwenden.

Beispiele:

  • Die Multiplikation mit Null. Egal, wie oft Sie es tun, das Ergebnis ist immer noch Null.
  • ein boolesches Flag einstellen. Egal, wie oft Sie es tun, bleibt das Flag gesetzt.
  • eine Zeile aus einer Datenbank mit einer bestimmten ID löschen. Wenn Sie es erneut versuchen, wird die Zeile noch weg.

reine Funktionen (Funktionen ohne Nebenwirkungen), dann impliziert Idempotenz, dass f (x) = f (f (x)) = f (f (f (x))) = f ( f (f (f (x)))) = ...... für alle Werte von x

Funktionen mit Nebenwirkungen , Idempotenz impliziert ferner, dass keine zusätzlichen Nebenwirkungen werden nach der ersten Anwendung verursacht werden. Sie können den Zustand der Welt betrachten ein zusätzliche „versteckten“ Parameter an die Funktion, wenn Sie möchten.

Beachten Sie, dass in einer Welt, wo Sie haben gleichzeitige Aktionen geht, können Sie feststellen, dass Operationen haben Sie so zu sein Idempotent aufhören waren (zum Beispiel könnte ein anderer Thread den Wert der boolean-Flag im Beispiel unset oben). Grundsätzlich, wenn Sie Gleichzeitigkeit und wandelbar Staat haben, müssen Sie viel mehr sorgfältig über Idempotenz denken.

Idempotenz ist oft eine nützliche Eigenschaft in dem Aufbau robuste Systeme. Zum Beispiel, wenn ein Risiko besteht, dass Sie eine doppelte Nachricht von einem Dritten erhalten können, ist es hilfreich, die Nachrichten-Handler fungieren als idempotent Betrieb zu haben, so dass die Nachricht Wirkung geschieht nur einmal.

Ein idempotent Betrieb erzeugt das Ergebnis im gleichen Zustand, auch wenn man es so nennt mehr als einmal, sofern Sie in den gleichen Parametern übergeben.

Ich wollte nur einen wirklichen Anwendungsfall werfen, die idempotence demonstriert. In JavaScript, sagen Sie eine Reihe von Modellklassen definieren (wie in MVC-Modell). Die Art und Weise dies oft implementiert ist, ist funktional äquivalent zu so etwas wie dieses (einfachen Beispiel):

function model(name) {
  function Model() {
    this.name = name;
  }

  return Model;
}

Sie könnten dann definieren neue Klassen wie folgt aus:

var User = model('user');
var Article = model('article');

Aber wenn man versuchen würde, die User Klasse über model('user') zu bekommen, von irgendwo anders in dem Code, wäre es fehl:

var User = model('user');
// ... then somewhere else in the code (in a different scope)
var User = model('user');

Diese beiden User Konstrukteuren wäre anders. Das heißt,

model('user') !== model('user');

Um es Idempotent , würden Sie nur eine Art von Caching-Mechanismus hinzufügen, wie folgt aus:

var collection = {};

function model(name) {
  if (collection[name])
    return collection[name];

  function Model() {
    this.name = name;
  }

  collection[name] = Model;
  return Model;
}

Mit dem Caching Hinzufügen, jedes Mal wenn Sie tat model('user') es wird das gleiche Objekt sein, und so ist es idempotent. Also:

model('user') === model('user');

Eine idempotente Operation ist eine Operation, eine Aktion oder Anforderung, die ohne Änderung die Folge mehrfach angewandt werden kann, das heißt der Zustand des Systems, über die ursprüngliche Anwendung.

Beispiele (WEB APP CONTEXT):

Idempotent: mehr identischen Anfragen zu machen hat die gleiche Wirkung wie eine einzige Anfrage zu machen. Eine Nachricht in einem E-Mail-Messaging-System geöffnet und markiert als „geöffnet“ in der Datenbank. Man kann öffnen Sie die Nachricht oft, aber diese wiederholte Aktion wird immer nur in dieser Meldung in der „geöffneten“ Zustand befindet, zur Folge haben. Dies ist ein idempotent Betrieb. Das erste Mal, legt man ein Update auf eine Ressource Informationen verwenden, das nicht auf die Ressource überein (der Zustand des Systems), wird der Zustand des Systems ändern, wenn die Ressource aktualisiert wird. Wenn man das gleiche Update auf eine Ressource Versetzt wiederholt dann die Informationen in dem Update werden bei jedem PUT die Informationen bereits im System übereinstimmen, und keine Änderung des Status des Systems auftreten. Wiederholte PUTs mit den gleichen Informationen sind idempotent: die erste PUT kann den Zustand des Systems ändern, nachfolgender PUTs nicht sollte.

Nicht-idempotent: Wenn eine Operation immer eine Zustandsänderung bewirkt, wie POSTen die gleiche Nachricht an einen Benutzer immer und immer wieder in einer neuen Nachricht resultierende in der Datenbank jedes Mal gesendet und gespeichert werden, sagen wir, dass der Betrieb NON-idempotent ist.

NULLIPOTENT: Wenn eine Operation keine Nebenwirkungen hat, wie rein die Anzeige von Informationen auf einer Webseite ohne Änderung in einer Datenbank (mit anderen Worten liest du nur die Datenbank), sagen wir die Operation NULLIPOTENT ist. Alle GETs sollte nullipotent sein.

Wenn über den Zustand des Systems zu sprechen sind wir natürlich hoffentlich harmlos und unvermeidbare Effekte wie Protokollierung und Diagnose zu ignorieren.

Idempotent Operationen: Operationen, die keine Nebenwirkungen, wenn ausgeführt mehrfach haben.
Beispiel: : Eine Operation, die Werte aus einer Datenquelle abruft und sagen, druckt
Nicht-Idempotent Operationen: Operationen, die einen Schaden verursachen würde, wenn mehrere Male ausgeführt. (Da sie einige Werte oder Zustände ändern)
Beispiel: Eine Operation, die von einem Bankkonto

zurück

Eine ganze detaillierte und technische Antworten. Nur eine einfache Definition hinzugefügt wird.

  

Idempotent = Re-runnable

Zum Beispiel, Create Betrieb an sich ist nicht ohne Fehler ausgeführt werden garantiert, wenn mehr als einmal ausgeführt. Aber wenn es eine Operation CreateOrUpdate dann heißt es wieder Runnability (Idempotenz).

Ein idempotent Betrieb über einen Satz verlässt seinen Mitgliedern unverändert, wenn ein oder mehrere Male angewendet wird.

Es kann eine einstellige Operation sein wie absolute (x) , wobei x auf eine Reihe von positiven ganzen Zahlen gehört. Hier absolute (absolut (x)) = x.

Es kann eine binäre Operation wie Vereinigung eines Satzes mit sich selbst sein würde den gleichen Satz immer wieder zurückkehren.

cheers

Es ist jede Operation, die jedes n-te Ergebnis in einem Ausgang führt den Wert des ersten Ergebnisses entspricht. Zum Beispiel des Absolutwert von -1 ist 1. Der absolute Wert des absoluten Werts von -1 ist 1. Der absolute Wert des absoluten Werts des Absolutwertes von -1 1 ist und so weiter.

Siehe auch: Wenn eine wirklich dumme Zeit sei Rekursion zu verwenden

?

meine 5c: In Integration und die Idempotenz Vernetzung ist sehr wichtig. Einige Beispiele aus dem wirklichen Leben: Stellen Sie sich vor, wir Daten an das Zielsystem zu liefern. Gelieferten Daten durch eine Folge von Nachrichten. 1. Was würde passieren, wenn die Sequenz im Kanal gemischt wird? (Als Netzwerk-Pakete tun immer :)). Wenn das Zielsystem idempotent ist, wird das Ergebnis nicht anders sein. Wenn das Zielsystem der richtigen Reihenfolge in der Abfolge abhängt, haben wir resequencer auf der Zielstelle zu implementieren, die die richtige Reihenfolge wieder herstellen würden. 2. Was würde passieren, wenn die Nachricht Duplikate sind? Wenn der Kanal des Zielsystems nicht rechtzeitig nicht anerkennt, das Quellsystem (oder selbst Kanal) in der Regel sendet eine weitere Kopie der Nachricht. Als Ergebnis können wir doppelte Nachricht auf dem Zielsystem Seite haben. Wenn das Zielsystem idempotent ist, sorgt er dafür, es und das Ergebnis wird nicht anders sein. Wenn das Zielsystem nicht idempotent ist, haben wir Deduplicator auf dem Zielsystem Seite des Kanals zu implementieren.

Kurz gesagt: , bedeuten Idempotent Operationen, dass der Betrieb in unterschiedlichen Ergebnissen nicht egal führen wird, wie oft Sie die idempotent Operationen arbeiten.

beispielsweise entsprechend der Definition der Spezifikation von HTTP, sind GET, HEAD, PUT, and DELETE idempotent Operationen; jedoch sind POST and PATCH nicht. Deshalb manchmal POST durch PATCH ersetzt wird.

wiederholen sicher.

Ist in der Regel der einfachste Weg, seine Bedeutung in der Informatik zu verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top