Sto leggendo un articolo sul framework di sharing Gizzard recentemente pubblicato da twitter (http://engineering.twitter.com/2010/04/introducing-gizzard-framework-for.html). Indica che tutte le operazioni di scrittura devono essere idempotenti per garantire un'elevata affidabilità.Come rendere idempotente l'operazione di scrittura?
Secondo wikipedia, "Le operazioni di idempotenza sono operazioni che possono essere applicate più volte senza modificare il risultato." Ma, IMHO, nel caso Gizzard, le operazioni di scrittura idempotenti dovrebbero essere quelle in cui la sequenza non ha importanza.
Ora, la mia domanda è: Come posso rendere le operazioni di scrittura idempotenti?
L'unica cosa che posso immaginare è avere un numero di versione allegato a ogni scrittura. Ad esempio, in un sistema di blog, ogni blog deve avere un articolo $ blog_id e $. A livello di applicazione, scriviamo sempre contenuti di blog come questo write ($ blog_id, $ content, $ version). La versione $ è determinata per essere unica a livello di applicazione. Quindi, se un'applicazione tenta prima di impostare un blog su "Hello world" e secondo vuole che sia "Goodbye", quindi scrivere è idempotente. Abbiamo due operazioni di scrittura di questo tipo:
write($blog_id, "Hello world", 1);
write($blog_id, "Goodbye", 2);
Queste due operazioni dovrebbero cambiare due diversi record nel DB. Quindi, non importa quante volte e in quale sequenza vengono eseguite queste due operazioni, i risultati sono gli stessi.
Questa è solo la mia comprensione. Per favore correggimi se sbaglio.