5

riak でトランザクションを実行できないようです。データが正しいことをどのように保証しますか?

コメントを挿入したいとしましょう。redisで私はやります

commentId=incr commentCount
multi
SET comment_post:commentId postId //for later use when we flag comments. We'll need to know where in the db it is
RPUSH post_comment:postId binaryValue //contains commentId in it + comment body
exec

SQLでは、コメントテーブルにテキストと投稿IDを含む新しい行を挿入します。どちらも複数のステートメントを使用します。トランザクションがないため、コメント本文を挿入し、リアクのコメントに投稿を関連付けるにはどうすればよいですか?

別の問題は、投稿を変更した場合です。投稿を更新し、そのタグを使用して投稿のタグリストを更新するにはどうすればよいですか

4

1 に答える 1

6

Riak は、書き込み可能なように設計された結果整合性のあるシステムであり、アトミック性の概念はありません。アトミック カウンターやトランザクションはありません。

編集: Riak 1.4 で CRDT を使用するカウンターをリリースしました。詳細については、Riak 1.4 のカウンターを参照してください。

Riak が使用するアプローチは、Amazon Dynamo の論文に基づいており、競合の解決にベクトル クロックを使用します。これは、読み取り/変更/書き込みサイクルであり、後続の読み取り中に競合解決が実行されます。任意の時点で、特定のキーに対して複数の値を持つことができ、フェッチを実行するとすべてが返されます。

私たちのセカンダリ インデックスを見たいと思われるようです(私があなたのシナリオを理解している場合、「いいね」に new が必要であるという事実は、詳細を知らなくてもやや混乱します)。ストアを実行するときに本文とともに送信されるコメント本文を指すセカンダリ インデックスを作成します。これで、問題の少なくとも半分は解決します。commentId

取得方法commentIdは少しトリッキーです。グローバル アトミック カウンターは使用できません。あなたのデザインは、シーケンシャル ID に依存せず (おそらく UUID を生成しますか?)、おそらく私たちのリンクを使用する必要がありますか?

興味があり、考えられる設計アプローチについて議論したい場合は、riak-users メーリング リストで私たちに連絡してください。私たちのエンジニア全員がそれを読み、いつでも喜んで質問に答えます。

于 2012-09-08T17:56:09.243 に答える