Estoy leyendo un artículo sobre el marco de fragmentación de Gizzard recientemente publicado por twitter (http://engineering.twitter.com/2010/04/introducing-gizzard-framework-for.html). Menciona que todas las operaciones de escritura deben ser idempotentes para garantizar una alta fiabilidad.¿Cómo hacer que la operación de escritura sea idempotente?
De acuerdo con wikipedia, "las operaciones de Idempotent son operaciones que se pueden aplicar varias veces sin cambiar el resultado". Pero, en mi humilde opinión, en el caso de Gizzard, las operaciones de escritura idempotentes deberían ser aquellas en las que la secuencia no importa.
Ahora, mi pregunta es: ¿cómo hacer que las operaciones de escritura sean idempotentes?
Lo único que puedo imaginar es tener un número de versión adjunto a cada escritura. Por ejemplo, en un sistema de blog, cada blog debe tener un $ blog_id y $ contenido. En el nivel de aplicación, siempre escribimos contenido de blog como este write ($ blog_id, $ content, $ version). El $ version se determina como único en el nivel de la aplicación. Por lo tanto, si una aplicación primero intenta establecer un blog en "Hola mundo" y segundo quiere que sea "Adiós", entonces escriba es idempotente. Tenemos esas dos operaciones de escritura:
write($blog_id, "Hello world", 1);
write($blog_id, "Goodbye", 2);
Estas dos operaciones se supone que son cambiadas dos registros diferentes en la base de datos. Entonces, no importa cuántas veces y qué secuencia se ejecutan estas dos operaciones, los resultados son los mismos.
Esto es lo que yo entiendo. Por favor corrígeme si estoy equivocado.