Je suis en train de lire un article sur le framework Gizzard sharding récemment publié par twitter (http://engineering.twitter.com/2010/04/introducing-gizzard-framework-for.html). Il mentionne que toutes les opérations d'écriture doivent être idempotentes pour assurer une grande fiabilité.Comment rendre l'opération d'écriture idempotent?
Selon wikipedia, "Les opérations Idempotent sont des opérations qui peuvent être appliquées plusieurs fois sans modifier le résultat." Mais, à mon humble avis, dans l'affaire Gizzard, les opérations d'écriture idempotentes devraient être celles dans lesquelles la séquence n'a pas d'importance. Maintenant, ma question est: Comment faire pour rendre les opérations d'écriture idempotentes?
La seule chose que je peux imaginer est d'avoir un numéro de version attaché à chaque écriture. Par exemple, dans un système de blog, chaque blog doit avoir un $ blog_id et $ content. Au niveau de l'application, nous écrivons toujours un contenu de blog tel que write ($ blog_id, $ content, $ version). Il est déterminé que la version $ est unique au niveau de l'application. Ainsi, si une application tente d'abord de définir un blog sur "Bonjour tout le monde" et que la deuxième veut que ce soit "Au revoir", alors écrit est idempotent. Nous avons deux telles opérations d'écriture:
write($blog_id, "Hello world", 1);
write($blog_id, "Goodbye", 2);
Ces deux opérations sont censées modifier deux enregistrements différents dans le DB. Donc, peu importe combien de fois et quelle séquence ces deux opérations sont exécutées, les résultats sont les mêmes.
C'est juste ma compréhension. Corrigez-moi si j'ai tort, s'il-vous plait.