Я читаю статью о недавно выпущенном фреймворке Gizzard через твиттер (http://engineering.twitter.com/2010/04/introducing-gizzard-framework-for.html). В нем упоминается, что все операции записи должны быть идемпотентными для обеспечения высокой надежности.
Согласно википедии «Идемпотентные операции - это операции, которые могут применяться несколько раз без изменения результата». Но, IMHO, в случае с Gizzard идемпотентными операциями записи должны быть операции, последовательность которых не имеет значения.
Теперь мой вопрос: как сделать идемпотентными операции записи?
Единственное, что я могу себе представить, это иметь номер версии, прикрепленный к каждой записи. Например, в системе блогов каждый блог должен иметь $ blog_id и $ content . На уровне приложения мы всегда пишем содержимое блога, например write ($ blog_id, $ content, $ version) . $ версия определена как уникальная на уровне приложения. Итак, если приложение сначала пытается установить для одного блога «Hello world», а второе хочет, чтобы оно было «до свидания», тогда write идемпотентно. У нас есть две такие операции записи:
write($blog_id, "Hello world", 1);
write($blog_id, "Goodbye", 2);
Предполагается, что эти две операции изменили две разные записи в БД. Таким образом, независимо от того, сколько раз и в какой последовательности выполняются эти две операции, результаты одинаковы.
Это только мое понимание. Пожалуйста, поправьте меня, если я ошибаюсь.