Что такое идемпотентная операция?
В вычислениях идемпотентная операция - это операция, которая не имеет дополнительного эффекта, если она вызывается более одного раза с одними и теми же входными параметрами. Например, удаление элемента из множества можно считать идемпотентной операцией над множеством.
В математике идемпотентная операция - это операция, при которой f(f(x)) = f(x). Например, функция abs()
является идемпотентной, потому что abs(abs(x)) = abs(x)
для всех x
.
Эти немного разные определения можно согласовать, если учесть, что x в математическом определении представляет собой состояние объекта, а f - это операция, которая может изменить этот объект. Например, рассмотрим Python set
и его метод discard
. Метод discard
удаляет элемент из множества и ничего не делает, если элемент не существует. Итак:
my_set.discard(x)
имеет точно такой же эффект, как и выполнение одной и той же операции дважды:
my_set.discard(x)
my_set.discard(x)
Идемпотентные операции часто используются при разработке сетевых протоколов, когда запрос на выполнение операции гарантированно произойдет хотя бы один раз, но может произойти и более одного раза. Если операция является идемпотентной, то нет никакого вреда в выполнении операции два или более раз.
Более подробную информацию см. в статье idempotence Википедии.
Вышеприведенный ответ ранее содержал несколько неправильных и вводящих в заблуждение примеров. Комментарии ниже, написанные до апреля 2014 года, относятся к более старой редакции.
Идемпотентная операция может быть повторена произвольное число раз и результат будет такой же, как если бы это было сделано только один раз. В арифметике, добавив ноль к ряду идемпотентна.
Idempotence говорил о многом в связи с "спокойный" и web-сервисов. Остальное стремится максимально использовать HTTP, чтобы дать программам доступ к веб-контента, и, как правило, устанавливается в отличие от веб-служб SOAP, который просто туннель удаленного вызова процедур службами внутри HTTP-запросов и ответов.
Остальное организует веб-приложения в "ресурсов и" (как пользователи Twitter или Flickr и изображения), а затем использует HTTP, как Post и Put, GET и delete создание, обновление, чтение и удаление этих ресурсов.
Idempotence играет важную роль в отдыхе. Если вы получите представление остальных ресурсов (например, сделать фотографию с Flickr), и операция завершается с ошибкой, можно просто повторять снова и снова, пока операция завершится успешно. К веб-службе, это не'т имеет значения, сколько раз изображение получается. Кроме того, если вы используете веб-службы RESTful обновить ваш щебет счета, можно положить новую информацию столько раз, сколько требуется для того, чтобы получить подтверждение от веб-сервиса. Положить ее в тысячу раз такое же, как и поставить ее один раз. Аналогично удалить-ную остальных ресурсов в тысячу раз такое же, как и удаление его после. Таким образом Idempotence делает его намного проще для создания веб-сервис, который'с устойчивыми к ошибкам коммуникации.
Дополнительная литература: веб-служб RESTful, Ричардсоном и Руби (idempotence обсуждается на стр. 103-104), и Рой Филдинг'ы кандидатскую диссертацию на отдых. Филдинг был одним из авторов протокола HTTP 1.1, в RFC-2616, который рассказывает о idempotence в разделе 9.1.2.
Сколько бы раз вы ни вызывали операцию, результат будет один и тот же.
Idempotence означает, что после применения операции или применить его несколько раз, имеет тот же эффект.
Примеры:
Для чистые функции (функции без побочных эффектов), то идемпотентность означает, что F(Х) = ф(ф(х)) = ф(ф(ф(х))) = ф(ф(ф(ф(х)))) = ...... для всех значений х
Для функции с побочными эффектами, идемпотентности, кроме того, подразумевает, что никаких дополнительных побочных эффектов будет вызвано уже после первого применения. Вы можете рассмотреть состояние мира в качестве дополнительного-то "скрытые" и параметры функции, если вам нравится.
Обратите внимание, что в мире, где у вас есть одновременных действий происходит, вы можете обнаружить, что операции, которые вы думали, были идемпотентными перестанут быть таковыми (например, другой поток может сбросить значение типа boolean флаг в приведенном выше примере). В основном, когда у вас есть параллелизм и изменяемого состояния, вы должны думать более тщательно о идемпотентности.
Идемпотентность часто является полезным свойством в создании надежных систем. Например, если есть риск, что вы можете получить дубликат сообщения от третьей стороны, полезно иметь акт обработчик сообщений как идемпотентная операция, так что эффект сообщение происходит только один раз.
Идемпотентная операция дает результат в одном и том же состоянии, даже если вы вызываете ее несколько раз, при условии, что вы передаете одни и те же параметры.
Просто хотел выбросить в случае реального использования, что свидетельствует idempotence. В JavaScript, вы определяете кучу классов модели (как в модели MVC). Как это часто реализуется функционально эквивалентен примерно так (простой пример):
в
function model(name) {
function Model() {
this.name = name;
}
return Model;
}
Тогда можно определить новый класс, как это:
в
var User = model('user');
var Article = model('article');
Но если вы были, чтобы попытаться сделать класс User
через модель('пользователей')
, откуда-то еще в коде, этого бы не получилось:
var User = model('user');
// ... then somewhere else in the code (in a different scope)
var User = model('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');
Идемпотентная операция-это операция, действие или запрос, которые могут быть применены несколько раз, не изменяя результата, т. е. состояние системы, за рамки первоначальной заявки.
ПРИМЕРЫ (ВЕБ-ПРИЛОЖЕНИЯ КОНТЕКСТ):
ИДЕМПОТЕНТНА: Сделав несколько идентичных запросов дает тот же эффект, как делает один запрос. Сообщения в системе обмена сообщениями электронной почты открыт и помечены как "открыт" в базе. Можно открыть сообщение много раз, но эти повторяющиеся действия будут только когда-нибудь привести к тому, что сообщения в "открыт и" государства. Это идемпотентной операцией. Первый раз, когда кто-то ставит обновления на ресурсе, используя информацию, которая не соответствует ресурсе (состояние системы), состояние системы будет меняться при обновлении ресурса. Если человек ставит один и тот же обновление ресурса многократно, то информация в обновлении будет уже совпадать с данными в системе на каждый поставить, и никаких изменений в состояние системы будет происходить. Неоднократные ставит с той же информацией являются идемпотентными: первая поставить может изменить состояние системы, в последующем ставит не должно.
ИДЕМПОТЕНТНЫМИ: Если операция всегда вызывает изменение в состоянии, как публиковать одинаковые сообщения пользователя снова и снова, в результате чего новые сообщения, передаваемые и хранимые в базе данных каждый раз, мы говорим, что операция не является ИДЕМПОТЕНТНОЙ.
NULLIPOTENT: Если операция не имеет никаких побочных эффектов, как чисто отображения информации на веб-странице без каких-либо изменений в базе данных (другими словами вы не только чтение базы данных), мы говорим, что операция NULLIPOTENT. Все должно быть nullipotent.
Когда мы говорим о состоянии системы, мы, очевидно, игнорируя надеюсь безобидная и неизбежные последствия, такие как регистрация и диагностики.
Идемпотентные операции: операции, которые не имеют побочных эффектов, если выполняется несколько раз. <БР/> Пример: операцию, которая извлекает значения из ресурсов данные и сказать, печатает его <БР/><БР/> Идемпотентными операций: операции, которые могут нанести какой-то вред, если выполняется несколько раз. (Как они меняют некоторые значения или государства) <БР/> Пример: операция, которая списывает с банковского счета
Довольно детальный и технические ответы. Просто добавив простое определение.
идемпотентные = вновь выполнимое
Например,
Создать
операция сама по себе не гарантирована, чтобы работать без ошибок, если выполняется более одного раза.
Но если идет операция CreateOrUpdate
затем он заявляет повторного запуска (идемпотентность).
Это любая операция, которая каждый результат энного приведет в выходной, совпадающее со значением 1-го результата. Например, абсолютное значение -1 1. Абсолютное значение абсолютное значение -1 1. Абсолютное значение абсолютное значение абсолютное значение -1 1. И так далее. <п>Смотри также: Когда будет очень глупо времени, чтобы использовать рекурсию?</п>
Идемпотентная операция над набором оставляет своих членов без изменений, когда применяется один или несколько раз.
Это может быть унарную операцию как абсолютные(х) где X принадлежит множество положительных целых чисел. Здесь абсолютное(абсолютное(х)) = х.
Это может быть бинарная операция, как объединение набора с себя всегда будет возвращать один и тот же набор.
ура
мой 5С: В интеграции и сеть идемпотентности очень важно. Несколько примеров из реальной жизни: Представьте, мы доставляем данных в целевую систему. Доставили данные по последовательности сообщений.
Короче, идемпотентные операции означает, что операция не приведет к разным результатам независимо от того, сколько раз вы используете идемпотентные операции.
Например, по определению спецификаций протокола HTTP, получить, голову, put и delete являются идемпотентными операциями; однако Post и патч не. Что's, почему иногда
постзаменяется на
положить`.
Хороший пример понимания идемпотентная операция может быть замок на автомобиль с дистанционным ключом.
log(Car.state) // unlocked
Remote.lock();
log(Car.state) // locked
Remote.lock();
Remote.lock();
Remote.lock();
log(Car.state) // locked
замок
является идемпотентной операцией. Даже если есть некоторый побочный эффект каждый раз, когда вы запустите замок
, как мигает, машина все в том же заторможенном состоянии.
повторить просмотра.
Обычно самый простой способ понять свое значение в информатике.