1168 Stimmen

Was ist eine idempotente Operation?

Was ist eine idempotente Operation?

30voto

Eine idempotente Operation liefert das Ergebnis im gleichen Zustand, auch wenn Sie sie mehrmals aufrufen, vorausgesetzt, Sie übergeben dieselben Parameter.

21voto

nmit026 Punkte 2666

Eine idempotente Operation ist eine Operation, Aktion oder Anforderung, die mehrfach angewendet werden kann, ohne dass sich das Ergebnis, d. h. der Zustand des Systems, über die erste Anwendung hinaus ändert.

BEISPIELE (WEB-APP-KONTEXT):

IDEMPOTENT: Mehrere identische Anträge haben die gleiche Wirkung wie ein einziger Antrag. Eine Nachricht in einem E-Mail-Nachrichtensystem wird geöffnet und in der Datenbank als "geöffnet" markiert. Man kann die Nachricht viele Male öffnen, aber diese wiederholte Aktion wird immer nur dazu führen, dass sich die Nachricht im Zustand "geöffnet" befindet. Dies ist ein idempotenter Vorgang. Wenn man zum ersten Mal eine Aktualisierung einer Ressource mit Informationen vornimmt, die nicht mit der Ressource (dem Zustand des Systems) übereinstimmen, wird sich der Zustand des Systems ändern, wenn die Ressource aktualisiert wird. Wenn man dieselbe Aktualisierung wiederholt an eine Ressource sendet, stimmen die Informationen in der Aktualisierung mit den Informationen überein, die bei jedem PUT bereits im System vorhanden sind, und der Zustand des Systems wird nicht verändert. Wiederholte PUTs mit denselben Informationen sind idempotent: Das erste PUT kann den Zustand des Systems ändern, nachfolgende PUTs sollten es nicht.

NICHT-IDEMPOTENT: Wenn ein Vorgang immer eine Zustandsänderung verursacht, wie z. B. das wiederholte Senden derselben Nachricht an einen Benutzer, was jedes Mal dazu führt, dass eine neue Nachricht gesendet und in der Datenbank gespeichert wird, sagen wir, dass der Vorgang NICHT IDEMPOTENT ist.

NULLIPOTENT: Wenn eine Operation keine Nebeneffekte hat, wie z.B. die reine Anzeige von Informationen auf einer Webseite ohne jegliche Änderung in einer Datenbank (mit anderen Worten, Sie lesen nur die Datenbank), sagen wir, die Operation ist NULLIPOTENT. Alle GETs sollten nullipotent sein.

Wenn wir über den Zustand des Systems sprechen, ignorieren wir natürlich die hoffentlich harmlosen und unvermeidlichen Effekte wie Protokollierung und Diagnose.

18voto

Lance Punkte 69299

Ich wollte nur einen realen Anwendungsfall nennen, der Idempotenz demonstriert. In JavaScript, sagen wir, Sie definieren eine Reihe von Modell-Klassen (wie in MVC-Modell). Die Art und Weise dies oft implementiert ist funktional äquivalent zu etwas wie dieses (einfache Beispiel):

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

  return Model;
}

Sie könnten dann neue Klassen wie diese definieren:

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

Aber wenn Sie versuchen würden, die User Klasse über model('user') von einer anderen Stelle des Codes, würde es fehlschlagen:

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

Diese beiden User Konstrukteure anders sein würden. Das heißt,

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

Um es zu machen idempotent würde man einfach eine Art Zwischenspeicherung einrichten, etwa so:

var collection = {};

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

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

  collection[name] = Model;
  return Model;
}

Durch das Hinzufügen der Zwischenspeicherung wird jedes Mal, wenn Sie model('user') wird es dasselbe Objekt sein, also ist es idempotent. Also:

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

11voto

Manish Basantani Punkte 15815

Ziemlich detaillierte und technische Antworten. Ich füge nur eine einfache Definition hinzu.

Idempotent = Wiederholbar

Zum Beispiel, Create Operation an sich ist nicht garantiert, dass sie fehlerfrei läuft, wenn sie mehr als einmal ausgeführt wird. Aber wenn es eine Operation gibt CreateOrUpdate dann wird die Wiederholbarkeit (Idempotenz) festgestellt.

10voto

Oorang Punkte 6520

Es ist eine beliebige Operation, bei der jedes n-te Ergebnis zu einer Ausgabe führt, die dem Wert des ersten Ergebnisses entspricht. Zum Beispiel ist der Absolutwert von -1 1. Der Absolutwert des Absolutwerts von -1 ist 1. Der Absolutwert des Absolutwerts des Absolutwerts von -1 ist 1. Und so weiter.

Siehe auch: Wann wäre ein wirklich dummer Zeitpunkt für die Verwendung von Rekursionen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X