Qu'est-ce qu'une opération idempotent?

Qu'est-ce qu'une opération idempotent?

670
demandé sur shA.t 2009-07-03 05:06:59
la source

15 ответов

En informatique, un idempotent de fonctionnement est celui qui n'a pas d'effet supplémentaire si elle est appelée plusieurs fois avec les mêmes paramètres d'entrée. Par exemple, enlever un élément d'un ensemble peut être considéré comme une opération idempotent sur l'ensemble.

en mathématiques, une opération idempotent est une opération où f(F(x)) = F(x) . Par exemple, la fonction abs() est idempotent parce que abs(abs(x)) = abs(x) pour tous x .

Ces légèrement différentes définitions peuvent être réconciliés en considérant que x dans la définition mathématique représente l'état d'un objet, et f est une opération qui peut muter cet objet. Par exemple, considérons la méthode Python set et sa méthode discard . Le discard méthode permet de supprimer un élément d'un ensemble, et ne fait rien si l'élément n'existe pas. So:

my_set.discard(x)

a exactement le même effet que de faire deux fois la même opération:

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

opérations Idempotent sont souvent utilisés dans la conception de protocoles de réseau, où une demande d'effectuer une opération est garanti pour se produire au moins une fois, mais peut également se produire plus d'une fois. Si l'opération est idempotent, alors il n'y a aucun mal à effectuer l'opération deux fois ou plus.

voir L'article de Wikipedia sur idempotence pour plus d'informations.


la réponse ci-dessus comportait des exemples erronés et trompeurs. Les commentaires ci-dessous rédigés avant avril 2014 font référence à une ancienne révision.

723
répondu Greg Hewgill 2014-04-01 23:41:52
la source

une opération idempotent peut être répétée un nombre arbitraire de fois et le résultat sera le même que si elle avait été faite une seule fois. En arithmétique, ajouter zéro à un nombre est idempotent.

Idempotence est beaucoup parlé dans le contexte des services web "RESTful". REST cherche à tirer le meilleur parti de HTTP pour donner aux programmes l'accès au contenu web, et est généralement mis en contraste avec les services web SOAP, qui juste tunnel procédure à distance style d'appel services à L'intérieur des requêtes et des réponses HTTP.

REST organise une application web en "ressources" (comme un utilisateur Twitter, ou une image Flickr) et utilise ensuite les verbes HTTP de POST, PUT, GET et DELETE pour créer, mettre à jour, lire et supprimer ces ressources.

Idempotence joue un rôle important dans le repos. Si vous obtenez une représentation D'une ressource de repos( par exemple, obtenir une image jpeg de Flickr), et l'opération échoue, vous pouvez simplement répéter L'obtenir à nouveau et de nouveau jusqu'à ce que l'opération réussisse. Pour le service web, Peu importe combien de fois l'image est obtenue. De même, si vous utilisez un service Web RESTful pour mettre à jour les informations de votre compte Twitter, vous pouvez mettre les nouvelles informations autant de fois qu'il le faut afin d'obtenir la confirmation du service web. Le mettre mille fois, c'est comme le mettre une fois. De même, supprimer une ressource REST mille fois revient à la supprimer une fois. Idempotence le rend ainsi beaucoup plus facile construire un service web qui résiste aux erreurs de communication.

"151900920 la" Poursuite de la lecture: Services Web RESTful , par Richardson et Ruby (idempotence est décrite à la page 103-104), et de Roy Fielding thèse de Doctorat sur le REPOS . Fielding a été L'un des auteurs de HTTP 1.1, RFC-2616, qui parle d'idempotence dans section 9.1.2 .

107
répondu Jim Ferrans 2011-07-11 17:26:35
la source

peu importe combien de fois vous appelez de l'opération, le résultat sera le même.

79
répondu Robert 2017-07-25 20:19:03
la source

Idempotence signifie que l'application d'une opération une fois ou plusieurs fois a le même effet.

exemples:

  • Multiplication par zéro. Peu importe combien de fois vous le faites, le résultat est toujours zéro.
  • définition d'un indicateur booléen. N'importe comment beaucoup de fois vous le faites, le drapeau reste ensemble.
  • supprimer une ligne d'une base de données avec un ID donné. Si vous essayez encore, la rangée est toujours disparu.

Pour les fonctions pures (fonctions, sans effets secondaires) puis idempotence implique que f(x) = f(f(x)) = f(f(f(x))) = f(f(f(f(x)))) = ...... pour toutes les valeurs de x

pour fonctions avec effets secondaires , idempotence implique en outre qu'aucun effet secondaire supplémentaire ne sera causé après la première application. Vous pouvez juger de l'état du monde à un "cachés" paramètre à la fonction, si vous le souhaitez.

notez que dans un monde où vous avez des actions simultanées en cours, vous pouvez trouver que les opérations que vous pensiez être idempotent cessent d'être ainsi (par exemple, un autre thread pourrait désactiver la valeur du drapeau booléen dans l'exemple ci-dessus). Fondamentalement, chaque fois que vous avez la concurrence et l'état mutable, vous devez penser beaucoup plus attentivement sur idempotency.

Idempotence est souvent une propriété utile dans la construction robuste système. Par exemple, s'il y a un risque que vous receviez un message dupliqué d'un tiers, il est utile que le gestionnaire de messages agisse comme une opération idempotent de sorte que l'effet de message ne se produise qu'une seule fois.

41
répondu mikera 2012-03-05 12:40:33
la source

Un idempotent opération produit le résultat dans le même état, même si vous l'appelez plus d'une fois, à condition de passer dans les mêmes paramètres.

22
répondu Caleb Huitt - cjhuitt 2018-03-09 17:43:58
la source

voulait juste jeter un vrai cas d'utilisation qui démontre l'importance de l'idem. Dans JavaScript, disons que vous définissez un tas de classes de modèles (comme dans MVC model). La façon dont cela est souvent mis en œuvre est fonctionnellement équivalente à quelque chose comme ceci (exemple de base):

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

  return Model;
}

vous pourriez alors définir de nouvelles classes comme ceci:

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

mais si vous devez essayer d'obtenir la classe User via model('user') , d'ailleurs dans le code, il échouerait:

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

ces deux constructeurs User seraient différents. C'est-à-dire,

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

pour le faire idempotent , il suffit d'ajouter une sorte de mécanisme de mise en cache, comme ceci:

var collection = {};

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

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

  collection[name] = Model;
  return Model;
}

en ajoutant la mise en cache, chaque fois que vous avez fait model('user') ce sera le même objet, et donc c'est idempotent. So:

model('user') === model('user');
10
répondu Lance Pollard 2013-10-09 05:30:44
la source

opérations Idempotent: opérations qui n'ont pas d'effets secondaires si elles sont exécutées plusieurs fois.

exemple : une opération qui récupère des valeurs à partir d'une ressource de données et dit, l'imprime



opérations non-Idempotent: opérations qui causeraient un certain préjudice si elles étaient exécutées plusieurs fois. (Comme ils changent certaines valeurs ou états)

exemple: opération de retrait d'un compte bancaire

8
répondu Mahmoud Abou-Eita 2012-12-06 18:42:39
la source

une opération idempotent sur un ensemble laisse ses membres inchangés lorsqu'elle est appliquée une ou plusieurs fois.

Il peut être une opération unaire comme absolu(x) où x appartient à un ensemble d'entiers positifs. Ici absolu (absolu (x)) = X.

il peut être une opération binaire comme union d'un ensemble avec lui-même serait toujours retourner le même ensemble.

cheers

6
répondu Arnkrishn 2009-07-03 05:26:46
la source

une opération idempotent est une opération, une action ou une requête qui peut être appliquée plusieurs fois sans changer le résultat, c'est-à-dire l'état du système, au-delà de l'application initiale.

EXAMPLES (WEB APP CONTEXT):

NULLIPOTENT: Si une opération n'a pas d'effets secondaires, comme le fait d'afficher purement des informations sur une page web sans aucun changement dans une base de données (en d'autres termes, vous ne lisez que la base de données), nous disons que l'opération est NULLIPOTENT. Tous les GETs devraient être nullipotent. Sinon, utilisez POST.

IDEMPOTENT: Un message dans un système de messagerie électronique est ouvert et marqué comme "ouvert" dans la base de données. On peut ouvrir le message de nombreuses fois, mais cette action répétée n'aura jamais pour résultat que ce message sera dans l'état "ouvert". C'est un idempotent de l'opération.

NON-IDEMPOTENT: Si une opération entraîne toujours un changement d'état, comme Poster le même message à un utilisateur et plus, résultant en un nouveau message envoyé et stocké dans la base de données à chaque fois, nous disons que l'opération est NON-IDEMPOTENT.

quand nous parlons de l'état du système, nous ignorons évidemment, espérons-le, les effets inoffensifs et inévitables comme la journalisation et les diagnostics.

6
répondu nmit026 2015-08-07 05:48:01
la source

des réponses assez détaillées et techniques. Juste l'ajout d'une simple définition.

Idempotent = Re-runnable

par exemple, L'opération Create en elle-même n'est pas garantie de fonctionner sans erreur si elle est exécutée plus d'une fois. Mais s'il y a une opération CreateOrUpdate alors elle indique la ré-runnabilité (idempotence).

6
répondu Manish Basantani 2015-08-13 13:59:41
la source

c'est n'importe quelle opération que chaque nième résultat résultera en une sortie correspondant à la valeur du 1er résultat. Par exemple, la valeur absolue de 1 est 1. La valeur absolue de la valeur absolue de 1 est 1. La valeur absolue de la valeur absolue de la valeur absolue de 1 est 1. Et ainsi de suite.

Voir Aussi: quand serait un moment vraiment stupide pour utiliser la récursion?

5
répondu Oorang 2009-07-03 05:41:01
la source

méthodes D'identification

une méthode idempotent est une méthode qui produira les mêmes résultats indépendamment du nombre de fois où elle est appelée.

  • la méthode GET est idempotent, car plusieurs appels à la ressource GET retourneront toujours la même réponse.

  • la méthode PUT est idempotent, car appeler plusieurs fois la méthode PUT mettra à jour la même de ressources et de ne pas changer le résultat.

  • le POST n'est pas idempotent, et appeler la méthode POST plusieurs fois peut des résultats différents et entraînera la création de nouvelles ressources.

  • le DELETE est idempotent car une fois que la ressource est supprimée, il est parti et appeler la méthode plusieurs fois ne changera pas le résultat.

5
répondu BERGUIGA Mohamed Amine 2017-07-25 20:18:12
la source

mon 5c: Dans l'intégration et la mise en réseau de l'idempotence est très important. Plusieurs exemples de la vie réelle: Imaginez, nous livrons des données au système cible. Données transmises par une séquence de messages. 1. Que se passerait-il si la séquence était mélangée dans le canal? (Comme le font toujours les paquets réseau :) ). Si le système cible est la quantité, le résultat ne sera pas différent. Si le système cible dépend du bon ordre dans la séquence, nous devons implémenter resequencer sur le site cible, qui serait de rétablir le bon ordre. 2. Que se passerait-il s'il y avait des doubles messages? Si le canal du système cible n'accuse pas réception en temps opportun, le système source (ou le canal lui-même) envoie habituellement une autre copie du message. Par conséquent, nous pouvons avoir des messages en double du côté du système cible. Si le système cible est idempotent, il s'en occupe et le résultat ne sera pas différent. Si le système cible n'est pas idempotent, nous devons implémenter deduplicator du côté du système cible du canal.

0
répondu Leonid Ganeline 2013-11-07 20:11:59
la source

en bref , les opérations Idempotent signifie que l'opération ne donnera pas de résultats différents peu importe le nombre de fois que vous effectuez les opérations idempotent.

par exemple, selon la définition de la spécification de HTTP, GET, HEAD, PUT, and DELETE sont des opérations idempotent; cependant POST and PATCH ne le sont pas. C'est pourquoi parfois POST est remplacé par PATCH.

0
répondu Marcus Thornton 2016-03-25 11:50:07
la source

retry-fort.

est habituellement la façon la plus facile de comprendre son sens en informatique.

-2
répondu teknopaul 2017-04-09 13:23:48
la source

Autres questions sur language-agnostic idempotent definition