最近リリースされたGizzardシャーディングフレームワークに関する記事をTwitterで読んでいます(http://engineering.twitter.com/2010/04/introducing-gizzard-framework-for.html)。高い信頼性を確保するには、すべての書き込み操作がべき等でなければならないと記載されています。
ウィキペディアによると、「べき等演算は、結果を変更せずに複数回適用できる演算です。」ただし、IMHOの場合、Gizzardの場合、べき等の書き込み操作は、順序が重要ではない操作である必要があります。
さて、私の質問は次のとおりです。書き込み操作をべき等にするにはどうすればよいですか?
私が想像できる唯一のことは、各書き込みにバージョン番号を付けることです。たとえば、ブログシステムでは、各ブログに$blog_idと$contentが必要です。アプリケーションレベルでは、常にこのwrite($ blog_id、$ content、$ version)のようなブログコンテンツを書き込みます。$ versionは、アプリケーションレベルで一意であると判断されます。したがって、アプリケーションが最初に1つのブログを「Helloworld」に設定しようとし、次にそれを「Goodbye」にしたい場合、書き込みはべき等です。このような2つの書き込み操作があります。
write($blog_id, "Hello world", 1);
write($blog_id, "Goodbye", 2);
これらの2つの操作は、DB内の2つの異なるレコードを変更することになっています。したがって、これら2つの操作が何度実行され、どのような順序で実行されても、結果は同じです。
これは私の理解です。私が間違っている場合は訂正してください。