Co to jest operacja idempotentna?

Co to jest operacja idempotentna?


person Will    schedule 03.07.2009    source źródło
comment
Dla miłośników matematyki - f(f(x)) = f(x). Czytaj dalej odpowiedzi, aby uzyskać bardziej opisową treść!   -  person paradocslover    schedule 02.07.2021


Odpowiedzi (15)


W obliczeniach operacja idempotentna to taka, która nie ma dodatkowego efektu, jeśli zostanie wywołana więcej niż raz z tymi samymi parametrami wejściowymi. Na przykład usunięcie elementu ze zbioru można uznać za idempotentną operację na zbiorze.

W matematyce operacja idempotentna to taka, gdzie f(f(x)) = f(x). Na przykład funkcja abs() jest idempotentna, ponieważ abs(abs(x)) = abs(x) dla wszystkich x.

Te nieco odmienne definicje można pogodzić, biorąc pod uwagę, że x w definicji matematycznej reprezentuje stan obiektu, a f to operacja, która może zmienić ten obiekt. Rozważmy na przykład Python set i jego metodę discard. Metoda discard usuwa element ze zbioru i nie robi nic, jeśli element nie istnieje. Więc:

my_set.discard(x)

ma dokładnie taki sam efekt, jak dwukrotne wykonanie tej samej operacji:

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

Operacje idempotentne są często używane przy projektowaniu protokołów sieciowych, gdzie gwarantuje się, że żądanie wykonania operacji wystąpi co najmniej raz, ale może również wystąpić więcej niż jeden raz. Jeśli operacja jest idempotentna, nie ma nic złego w wykonaniu operacji dwa lub więcej razy.

Więcej informacji znajdziesz w artykule w Wikipedii na temat idempotence.


Powyższa odpowiedź zawierała wcześniej pewne nieprawidłowe i wprowadzające w błąd przykłady. Poniższe komentarze napisane przed kwietniem 2014 r. odnoszą się do starszej wersji.

person Greg Hewgill    schedule 03.07.2009
comment
Przykład: ponieważ odpowiedź powyżej stwierdza, że ​​Idempotent operations are often used in the design of network protocols oto powiązany przykład **GET nie powinien zmieniać niczego na serwerze, więc GET jest idempotentny. W kontekście HTTP/serwletu oznacza to, że to samo żądanie może zostać wysłane dwukrotnie bez negatywnych konsekwencji. **POST NIE jest idempotentny. - person KNU; 01.04.2014
comment
Czy bezpaństwowiec jest synonimem idempotentu? - person Michael Osofsky; 05.12.2014
comment
@MichaelOsofsky: Nie, w przykładzie Pythona set w odpowiedzi obiekt ustawiony wyraźnie ma stan i oferuje również pewne idempotentne operacje, takie jak discard. - person Greg Hewgill; 07.12.2014
comment
Wspaniale, @GregHewgill, rozumiem teraz, że idempotent i bezstanowy są różne, ponieważ operacja discard działa na stanie, ale zwraca ten sam wynik, jeśli zostanie wywołana wiele razy z tymi samymi parametrami wejściowymi; discard po prostu wykonuje inną pracę, aby uzyskać ten wynik. Dzięki za pomoc. - person Michael Osofsky; 08.12.2014
comment
@MichaelOsofsky, discard można również zaimplementować w sposób bezstanowy, obejmując stan w wartości zwracanej: discard([my_set, x]) = [my_new_set, x]. Możesz więc zrobić discard(discard([my_set, x])). Zauważ, że [my_new_set, x] to tylko jeden argument i jego typ to 2-krotka. - person Pacerier; 11.03.2015
comment
@mikera, Stan świata nie jest dodatkowym ukrytym argumentem, ale jednym argumentem. Jeśli masz dodatkowe argumenty, operacja będzie operacją binarną i można uznać za idempotentną tylko wtedy, gdy oba argumenty są < b>identyczne. Aby pozostać jednoargumentową operacją idempotentną, stan świata musi być argumentem i zwracaną wartością. - person Pacerier; 11.03.2015
comment
Nie usuwanie elementu z zestawu, ale usuwanie podanego numeru z zestawu. Ponieważ na przykład to zrobisz, array.pop() operacja zdecydowanie szkodzi zestawowi za każdym razem, gdy zostanie wywołana. - person Green; 10.10.2015
comment
Jak możesz powiedzieć, że daje dokładnie taki sam efekt, jak dwukrotne wykonanie tej samej operacji? Na pewno nie ma to takiego samego efektu. Jeśli usunę element z zestawu przy pierwszym wywołaniu i zostanie on pomyślnie usunięty, po pierwsze otrzymuję usunięty element (w JS, a nie w Pythonie), po drugie, stan zestawu zostaje zmodyfikowany. Jeśli powtórzę operację, otrzymam undefined i zestaw nie zostanie zmodyfikowany. Gdzie więc jest ten sam efekt, o którym mówisz? Absolutnie inny. Ale każde kolejne wywołanie ma naprawdę ten sam efekt: otrzymujesz undefined, a zestaw nie jest modyfikowany. Naprawdę nie rozumiem obliczania idempotencji. - person Green; 10.10.2015
comment
@Green Używanie terminu ten sam efekt w kontekście impotencji oznacza, że ​​rezultat jest taki sam, a nie działanie. Wywołanie discard(x) po raz drugi będzie miało taki sam efekt jak wywołanie go po raz pierwszy: zestaw nie będzie już zawierał x. Obliczanie idempotencji dotyczy odporności systemu. Ponieważ coś może się nie udać (np. awaria sieci), jak można odzyskać siły po wykryciu awarii? Najłatwiejszym sposobem odzyskiwania jest po prostu wykonanie tej czynności jeszcze raz, ale działa to tylko wtedy, gdy ponowne wykonanie tej czynności jest idempotentne. Np. discard(x) jest idempotentny, ale pop() nie. Wszystko polega na usuwaniu błędów. - person Andreas; 27.04.2016
comment
Jeśli mówisz po rosyjsku, odwiedź ru.wikipedia.org/wiki/. Zdecydowanie najjaśniejsza definicja! - person Andrew Shatnyy; 04.08.2016
comment
cały sens zadawania pytań gdzie indziej polega na tym, że wyjaśnienia wikipedii na temat zagadnień matematycznych są zwykle trudniejsze do przetrawienia/zrozumienia, biorąc pod uwagę sposób, w jaki jest to wyjaśnione w wikipedii. - person ahnbizcad; 10.08.2016
comment
@Andreas A co powiesz na drugi przykład z Wikipedia: załóżmy, że wartość początkowa zmienna ma wartość 3 i istnieje sekwencja, która odczytuje zmienną, następnie zmienia ją na 5 i ponownie odczytuje? Czy myślisz, że to jest idempotentne? - person Franklin Yu; 20.12.2017
comment
@FranklinYu Czy nadal uważam, że co jest idempotentne? Ten przykład dotyczy kompozycji metod idempotentnych i nie ma żadnej kompozycji w tym pytaniu ani w tej odpowiedzi. Przykład z Wikipedii wydaje mi się całkiem jasny i wyraźnie mówi, że przykładowy kompozyt nie jest idempotentny, mimo że każda z 3 metod/operacji jest. Nie rozumiem twojego pytania. - person Andreas; 20.12.2017
comment
@Andreas Ale w tym przypadku drugie wywołanie nie zmienia stanów i zwraca inną wartość, dokładnie w tym samym przypadku w HTTP DELETE. Jeśli to nie jest idempotentne, w jaki sposób DELETE jest idempotentne? - person Franklin Yu; 20.12.2017
comment
@FranklinYu Jeśli znajdujesz się w scenariuszu, w którym idempotencja jest ważna, wiesz również, że drugi DELETE może zwrócić 404 (nie znaleziono), co oznacza, że ​​niezależnie od tego, czy otrzymasz 404, czy 200 (lub 202, czy 204), wiesz, że masz to, czego chciałeś. Tak więc, jeśli o ciebie chodzi, 404 jest prawidłową odpowiedzią, mówiącą, że to, o co prosiłeś, zostało zrobione. W związku z tym metoda jest idempotentna. W tym przypadku zarówno 404, jak i 200 oznaczają OK. - person Andreas; 20.12.2017
comment
Czy funkcja, która pobrała odpowiedź z bazy danych, liczyłaby się jako idempotentna? Gdyby dane uległy zmianie pomiędzy połączeniami, wynik byłby inny. Mam na myśli przypadek, w którym zapytanie do bazy danych ma funkcję „now()” w porównaniu z funkcją, w której przekazujesz czas jako parametr. Edycja: Tak, tak jest napisane w artykule w Wikipedii! - person Chris Huang-Leaver; 13.10.2020

Operację idempotentną można powtórzyć dowolną liczbę razy, a wynik będzie taki sam, jak gdyby został wykonany tylko raz. W arytmetyce dodanie zera do liczby jest idempotentne.

O idempotencji mówi się dużo w kontekście usług internetowych „RESTful”. REST stara się maksymalnie wykorzystać protokół HTTP, aby zapewnić programom dostęp do treści internetowych, i zwykle różni się od usług sieciowych opartych na protokole SOAP, które po prostu tunelują usługi w stylu zdalnego wywoływania procedur wewnątrz żądań i odpowiedzi HTTP.

REST organizuje aplikację internetową w „zasoby” (takie jak użytkownik Twittera lub obraz w serwisie Flickr), a następnie używa czasowników HTTP POST, PUT, GET i DELETE do tworzenia, aktualizowania, odczytywania i usuwania tych zasobów.

Idempotencja odgrywa ważną rolę w REST. Jeśli otrzymasz reprezentację zasobu REST (np. POBIERZ obraz JPEG z Flickr) i operacja się nie powiedzie, możesz po prostu powtarzać GET raz po raz, aż operacja się powiedzie. Dla usługi internetowej nie ma znaczenia, ile razy obraz został uzyskany. Podobnie, jeśli używasz usługi internetowej RESTful do aktualizacji informacji o swoim koncie na Twitterze, możesz PUT nowe informacje tyle razy, ile potrzeba, aby uzyskać potwierdzenie z usługi internetowej. Wykonanie PUT tysiąc razy jest tym samym, co wykonanie PUT raz. Podobnie USUŃ zasobu REST tysiąc razy jest równoznaczne z jego jednorazowym usunięciem. Idempotencja znacznie ułatwia zatem konstruowanie usługi internetowej odpornej na błędy komunikacji.

Dalsza lektura: RESTful Web Services, autorzy: Richardson i Ruby (idempotencja została omówiona na stronach 103-104) oraz praca doktorska Roya Fieldinga w trybie REST. Fielding był jednym z autorów protokołu HTTP 1.1, RFC-2616, który mówi o idempotencji w sekcja 9.1.2.

person Jim Ferrans    schedule 03.07.2009
comment
Jasne i proste. Jest to jednak ale tylko jedna interpretacja idempotentu. - person Pacerier; 11.03.2015
comment
@Pacerier: To prawda, idempotencja ma zastosowania w wielu innych obszarach, takich jak programowanie funkcjonalne i przetwarzanie kolejek komunikatów. - person Jim Ferrans; 11.03.2015
comment
idempotencja jest słowem mocno przeciążonym, ponieważ brzmi górnolotnie i ma wystarczającą liczbę znaków, aby przejść test seskwipedalny. Gdyby Benjamin Peirce wybrał prostsze brzmiące słowo, dzisiaj nie mielibyśmy nawet tego pytania. - person Pacerier; 11.03.2015
comment
Jak to rozumieć: Podobnie USUWANIE zasobu REST tysiąc razy jest równoznaczne z jednorazowym jego usunięciem? Nie można ponownie usunąć zasobu, jeśli został już usunięty. - person Green; 10.10.2015
comment
@Green, ale nie usuwasz go za pierwszym razem. Wysyłasz prośbę o usunięcie. Co ważne, możesz wysłać dowolną liczbę żądań. - person Caleth; 06.04.2017
comment
Samouczki REST stwierdzają, że zasób powinien być aktualizowany przy użyciu PUT zamiast POST, ponieważ PUT jest idempotentny. jeśli żądanie PUT nie powiedzie się, możemy po prostu wysłać je ponownie, dopóki nie otrzymamy pomyślnej odpowiedzi z serwera. Co uniemożliwia ponowne wysłanie nieudanego żądania POST (aktualizacja)? Stanie się coś złego? - person mangusta; 15.02.2020
comment
Możliwe jest zapisanie punktów końcowych POST, które są idempotentne, i punktów końcowych PUT, które nie są, @mangusta. Problemem jest zgodność z definicjami PUT i POST w specyfikacji HTTP. Aby poprawnie śledzić HTTP, wszystkie PUT muszą być idempotentne. Ale specyfikacja nie mówi nic o tym, że POST jest idempotentny. - person Jim Ferrans; 22.02.2020
comment
@JimFerrans Rozumiem. Pomyślałem, że może istnieć jakiś powód związany z funkcjonalnością (wbudowany w sam protokół HTTP), dla którego PUT można wysłać bez obaw, podczas gdy POST nie. Teraz wydaje się, że jesteśmy po prostu zobowiązani do przestrzegania standardów HTTP, a zachowanie jest całkowicie zależne od sposobu implementacji serwera - person mangusta; 22.02.2020

Bez względu na to, ile razy wywołasz tę operację, wynik będzie taki sam.

person Robert    schedule 03.07.2009
comment
Słyszałem, że idempotent jest zdefiniowany jako jedno lub oba z poniższych: 1) Dla danego zestawu danych wejściowych zawsze zwróci to samo wyjście. 2) Nie powoduje żadnych skutków ubocznych. Moje pytanie brzmi: jeśli funkcja jest zgodna z punktem 1, ale nie z numerem 2, ponieważ powoduje efekt uboczny niezwiązany z obliczeniami (na przykład rejestruje żądanie w magazynie danych), czy nadal jest uważana za idempotentną? - person Keith Bennett; 29.06.2012
comment
Wynik wywołania operacji musi zawierać stan systemu, więc jeśli operacja ma jakiś skumulowany efekt uboczny, nie jest idempotentna; jeśli jednak efekt uboczny pozostawi system w tym samym stanie, niezależnie od tego, ile razy operacja zostanie wywołana, wówczas może ona być idempotentna. - person Robert; 18.07.2012
comment
Krótka i słodka, uwielbiam tego rodzaju odpowiedzi. Nie wiem, dlaczego muszę ciągle szukać tego terminu, po prostu nie zapada mi w pamięć. - person Prancer; 02.02.2015
comment
@KeithBennett, Druga definicja jest błędna. Brak skutków ubocznych nie oznacza idempotentu. Funkcje idempotentne mogą mieć skutki uboczne. Np. MySQL truncate i delete. - person Pacerier; 11.03.2015
comment
Wynik będzie taki sam (tzn. stan systemu), ale odpowiedź może się różnić (np. kody stanu HTTP w usłudze REST). - person G. Steigert; 07.02.2018
comment
więc jeśli w bazie danych znajduje się licznik wierszy, który służy do sprawdzania integralności danych wejściowych żądania w porównaniu ze stanem bazy danych, czy ten licznik wierszy należy uwzględnić w definicji idempotentu? ten licznik wierszy będzie wzrastał przy każdym żądaniu, ale nie będzie zwracany jako część wyniku. - person swcraft; 27.04.2020

Idempotencja oznacza, że ​​wykonanie operacji jednorazowo lub wielokrotne ma ten sam efekt.

Przykłady:

  • Mnożenie przez zero. Nieważne, ile razy to zrobisz, wynik nadal będzie zerowy.
  • Ustawianie flagi logicznej. Nieważne, ile razy to zrobisz, flaga pozostanie ustawiona.
  • Usuwanie wiersza z bazy o podanym ID. Jeśli spróbujesz ponownie, wiersz nadal zniknie.

W przypadku czystych funkcji (funkcji bez skutków ubocznych) idempotencja oznacza, że ​​f(x) = f(f(x)) = f(f(f(x))) = f(f(f (f(x)))) = ...... dla wszystkich wartości x

W przypadku funkcji wywołujących skutki uboczne idempotencja oznacza ponadto, że po pierwszym zastosowaniu nie wystąpią żadne dodatkowe skutki uboczne. Jeśli chcesz, możesz uznać stan świata za dodatkowy „ukryty” parametr funkcji.

Zauważ, że w świecie, w którym wykonywane są współbieżne działania, może się okazać, że operacje, które uważałeś za idempotentne, przestają takie być (na przykład inny wątek może anulować ustawienie wartości flagi logicznej w powyższym przykładzie). Zasadniczo, ilekroć masz współbieżność i zmienny stan, musisz znacznie dokładniej pomyśleć o idempotencji.

Idempotencja jest często przydatną właściwością przy budowaniu solidnych systemów. Na przykład, jeśli istnieje ryzyko, że możesz otrzymać zduplikowaną wiadomość od osoby trzeciej, pomocne jest, aby procedura obsługi wiadomości działała jako operacja idempotentna, dzięki czemu efekt wiadomości wystąpi tylko raz.

person mikera    schedule 05.03.2012
comment
Jeśli dla czystych funkcji f(x) = f(f(x)), czy masz na myśli, że f(x){return x+1;} nie jest czystą funkcją? ponieważ f(x) != f(f(x)): f(1) daje 2, a f(2) daje 3. - person Pacerier; 11.03.2015
comment
@Pacerier Nie, @mikera mówi, że czysty i idempotent oznacza f(x) = f(f(x)). Ale jak wspomniał @GregHewgill, aby ta definicja miała sens, musisz rozważyć x jako obiekt i f jako operację, która zmienia stan obiektu (tj.: wyjście f jest zmutowanym x). - person Justin J Stark; 17.10.2016

Operacja idempotentna daje wynik w tym samym stanie, nawet jeśli wywołasz ją więcej niż raz, pod warunkiem, że przekażesz te same parametry.

person Caleb Huitt - cjhuitt    schedule 03.07.2009
comment
Wcale nie brzmi to logicznie. stackoverflow.com/questions/1077412/ - person Green; 10.10.2015
comment
Myślę, że możesz mylić idempotentny i deterministyczny. - person Suncat2000; 12.04.2018

Chciałem tylko wyrzucić prawdziwy przypadek użycia, który demonstruje idempotencję. Załóżmy, że w JavaScript definiujesz kilka klas modeli (jak w modelu MVC). Sposób, w jaki jest to często wdrażane, jest funkcjonalnie odpowiednikiem czegoś takiego (przykład podstawowy):

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

  return Model;
}

Następnie możesz zdefiniować nowe klasy w następujący sposób:

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

Ale jeśli spróbujesz uzyskać klasę User przez model('user') z innego miejsca w kodzie, zakończy się to niepowodzeniem:

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

Te dwa konstruktory User byłyby inne. To jest,

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

Aby uczynić go idempotentnym, wystarczy dodać jakiś mechanizm buforowania, taki jak ten:

var collection = {};

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

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

  collection[name] = Model;
  return Model;
}

Dodając buforowanie, za każdym razem, gdy to zrobisz model('user'), będzie to ten sam obiekt, a zatem będzie idempotentny. Więc:

model('user') === model('user');
person Lance Pollard    schedule 09.10.2013
comment
Ta odpowiedź nie wydaje się właściwa. Idempotencja polega na wywołaniu operacji, która ma zmienić jakiś stan, biorąc pod uwagę parametry wejściowe, a jeśli następnie wywołasz ją ponownie z tymi samymi parametrami, nie będzie to miało dalszego wpływu na stan. Ale w twoim przykładzie, jeśli jeszcze przed użyciem buforowania wywołamy model('user') dwa razy, jest to już idempotentne, nie ma zmiany stanu, tylko utworzenie i zwrócenie nowego odrębnego obiektu do wywołującego (nie przechowywanego). Opisujesz wzorzec fabryki tożsamości obiektu, który zapewnia zwrócenie „tego samego” obiektu podczas wywołań, co jest przydatne, ale nie wyjaśnia idempotencji. - person Ash; 02.07.2020

Dobrym przykładem zrozumienia operacji idempotentnej może być zamykanie samochodu za pomocą pilota.

log(Car.state) // unlocked

Remote.lock();
log(Car.state) // locked

Remote.lock();
Remote.lock();
Remote.lock();
log(Car.state) // locked

lock jest operacją idempotentną. Nawet jeśli za każdym razem, gdy uruchomisz lock, wystąpią pewne skutki uboczne, takie jak mruganie, samochód jest nadal w tym samym stanie zablokowanym, niezależnie od tego, ile razy uruchomisz operację blokowania.

person IVN    schedule 18.09.2019

Operacja idempotentna to operacja, akcja lub żądanie, które można zastosować wielokrotnie bez zmiany wyniku, tj. stanu systemu, wykraczającego poza początkowe zastosowanie.

PRZYKŁADY (KONTEKST APLIKACJI INTERNETOWEJ):

IDEMPOTENT: Wykonywanie wielu identycznych żądań ma taki sam efekt, jak wysyłanie pojedynczego żądania. Wiadomość w systemie przesyłania wiadomości e-mail jest otwierana i oznaczana w bazie danych jako „otwarta”. Wiadomość można otwierać wiele razy, ale ta powtarzająca się czynność zawsze spowoduje, że wiadomość będzie w stanie „otwartym”. Jest to operacja idempotentna. Gdy po raz pierwszy PUT dokona aktualizacji zasobu przy użyciu informacji, które nie pasują do zasobu (stanu systemu), stan systemu zmieni się wraz z aktualizacją zasobu. Jeśli wielokrotnie przeprowadzi się tę samą aktualizację zasobu, wówczas informacje zawarte w aktualizacji będą zgodne z informacjami już znajdującymi się w systemie przy każdym PUT i nie nastąpi żadna zmiana stanu systemu. Powtarzające się PUT z tymi samymi informacjami są idempotentne: pierwszy PUT może zmienić stan systemu, kolejne PUT nie powinny.

NIEIDEMPOTENTNY: Jeśli operacja zawsze powoduje zmianę stanu, np. wielokrotne wysyłanie tej samej wiadomości do użytkownika, co skutkuje za każdym razem wysyłaniem i zapisywaniem nowej wiadomości w bazie danych, mówimy, że operacja jest NIEIDEMPOTENTNA.

NIEWAŻNA: Jeśli operacja nie ma skutków ubocznych, takich jak zwykłe wyświetlenie informacji na stronie internetowej bez żadnych zmian w bazie danych (innymi słowy, tylko czytasz bazę danych), mówimy, że operacja jest NIEWOLNA. Wszystkie GET powinny być nullipotentne.

Mówiąc o stanie systemu, oczywiście ignorujemy, miejmy nadzieję, nieszkodliwe i nieuniknione efekty, takie jak rejestrowanie i diagnostyka.

person nmit026    schedule 03.08.2015

Dość szczegółowe i techniczne odpowiedzi. Wystarczy dodać prostą definicję.

Idempotentny = Możliwość ponownego uruchomienia

Na przykład nie ma gwarancji, że operacja Create sama w sobie zostanie wykonana bez błędów, jeśli zostanie wykonana więcej niż raz. Ale jeśli istnieje operacja CreateOrUpdate, wówczas stwierdza ona możliwość ponownego uruchomienia (Idempotencja).

person Manish Basantani    schedule 13.08.2015
comment
Jest to zwodnicza definicja. Możliwość ponownego uruchomienia nie gwarantuje bycia idempotentnym. Operację można wykonać ponownie i za każdym razem może dodać do wyniku dodatkowe efekty, dzięki czemu nie będzie idempotentna. - person Saeed Mohtasham; 16.04.2018

Operacje idempotentne: operacje, które nie mają skutków ubocznych, jeśli zostaną wykonane wielokrotnie.
Przykład: Operacja, która pobiera wartości z zasobu danych i, powiedzmy, drukuje je

Operacje inne niż idempotentne: Operacje, które spowodować pewne szkody, jeśli zostanie wykonany wiele razy. (Gdy zmieniają się niektóre wartości lub stany)
Przykład: Operacja polegająca na wypłacie z konta bankowego

person Mahmoud Abou-Eita    schedule 06.12.2012
comment
Rzeczywiście zła odpowiedź! w przypadku operacji Idempotent stwierdzenie, że nie ma skutków ubocznych, jest niewłaściwe. dla operacji nieidempotentnych stwierdzenie, że powodują jakąś szkodę, jest mylącą odpowiedzią. - person Saeed Mohtasham; 16.04.2018

Operacja idempotentna na zbiorze pozostawia jej elementy niezmienione, jeśli zostanie zastosowana jeden lub więcej razy.

Może to być operacja jednoargumentowa, np. absolute(x), gdzie x należy do zbioru dodatnich liczb całkowitych. Tutaj absolutny (absolutny (x)) = x.

Może to być operacja binarna, np. ułączenie zbioru zawsze zwróci ten sam zbiór.

dzięki

person Arnkrishn    schedule 03.07.2009
comment
Operacja idempotentna to taka, w której f(f(x)) = f(x). pozostawia swoich członków w niezmienionej formie, nie jest właściwą odpowiedzią. - person Saeed Mohtasham; 16.04.2018

W skrócie operacje idempotentne oznaczają, że operacja nie przyniesie różnych wyników niezależnie od tego, ile razy wykonasz operacje idempotentne.

Na przykład, zgodnie z definicją protokołu HTTP, GET, HEAD, PUT, and DELETE są operacjami idempotentnymi; jednak POST and PATCH nie są. Dlatego czasami POST zastępuje się PUT.

person Marcus Thornton    schedule 25.03.2016

moje 5c: W integracji i tworzeniu sieci idempotencja jest bardzo ważna. Kilka przykładów z życia: Wyobraź sobie, że dostarczamy dane do systemu docelowego. Dane dostarczane przez sekwencję komunikatów. 1. Co by się stało, gdyby sekwencja została zmiksowana na kanale? (Jak zawsze pakiety sieciowe :)). Jeśli system docelowy jest idempotentny, wynik nie będzie inny. Jeśli w docelowym systemie zależy od właściwej kolejności w sekwencji, musimy w docelowym miejscu zaimplementować resekwenser, który przywróci właściwą kolejność. 2. Co by się stało, gdyby wiadomości się zduplikowały? Jeśli kanał systemu docelowego nie potwierdzi w odpowiednim czasie, system źródłowy (lub sam kanał) zwykle wysyła kolejną kopię komunikatu. W rezultacie możemy mieć zduplikowaną wiadomość po stronie systemu docelowego. Jeśli system docelowy jest idempotentny, zajmie się tym i wynik nie będzie inny. Jeśli system docelowy nie jest idempotentny, musimy zaimplementować deduplikator po stronie kanału systemu docelowego.

person Leonid Ganeline    schedule 07.11.2013
comment
Idempotencja pojedynczych żądań wysyłanych w oderwaniu od innych żądań (lub czegokolwiek innego, co zmienia stan systemu) to nie to samo, co zmiana kolejności żądań. Zarówno żądanie HTTP PUT, jak i żądanie HTTP DELETE powinny być indywidualnie idempotentne - ale to nie znaczy, że kolejność wywoływania PUT i DELETE pod tym samym adresem URL nie ma znaczenia, ponieważ żądanie PUT może mieć skutki uboczne! - person Robin Green; 08.03.2016

można bezpiecznie spróbować ponownie.

Jest to zazwyczaj najłatwiejszy sposób zrozumienia jego znaczenia w informatyce.

person teknopaul    schedule 06.04.2017
comment
Ponowna próba oznacza coś, co nie powiodło się za pierwszym razem lub poprzednim razem. Nie do końca to samo. - person Lasse V. Karlsen; 06.04.2017
comment
Kto zredagował moje pytanie i dał mi głos w dół? To nie jest ten tekst, który zamieściłem? - person teknopaul; 09.04.2017
comment
Możesz sprawdzić dziennik edycji, klikając link pod odpowiedzią, który zawiera informację edytowaną X godzin temu lub podobną. - person Lasse V. Karlsen; 09.04.2017

person    schedule
comment
to zwięzła odpowiedź, nawet po 10 latach. +1 - person snr; 23.06.2019