2012-09-08 5 views
5

riakで取引できないようです。データが正しいことを確認する方法はありますか?riakの正確性を保証しますか?

コメントを挿入します。 Redisのでは私は、テキスト、ポストIDでコメントテーブルに新しい行を挿入したいSQLで

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 

にしてください。 どちらも2つ以上のステートメントを使用します。どのように私は両方のコメントの本文を挿入し、riakのコメントには、取引がないので、投稿に関連付ける?

投稿を変更すると別の問題が発生します。投稿を更新し、そのタグを使用して投稿のタグリストを更新するにはどうすればいいですか?

答えて

6

Riakは書き込み可能に設計された最終的に一貫したシステムであり、 アトミックカウンタまたは トランザクションがありません。

編集: Riak 1.4でCRDTを使用してカウンタをリリースしました。詳細はこちらCounters in Riak 1.4

Riakが使用するアプローチは、Amazon Dynamoペーパーに基づいており、競合解消のためにベクトルクロックを使用しています。これは、後続の読み取り中に実行される競合解決を伴う読み取り/変更/書き込みサイクルです。任意の時点で、フェッチを実行するときにすべてが返される、指定されたキーに複数の値を持たせることができます。あなたが私たちのsecondary indexesを見てみたいよう

それはの音(私はあなたのシナリオを理解していた場合、あなたはより多くを知らなくても、やや紛らわしいです「のような」の新しいcommentIdを必要とするという事実)。ストアを行うときに本体と一緒に送信されるコメント本文を指し示すセカンダリインデックスを作成します。それは問題の少なくとも半分を解決します。

commentIdを入手する方法は少し難解です。我々はそれらを持っていないので、グローバル原子カウンタを使用することはできません。あなたの設計では、順次ID(おそらくUUIDを生成しますか?)に頼らず、おそらくlinksを使用する必要がありますか?

可能な設計アプローチについてお聞きしたい場合は、riak-users mailing listにpingしてください。私たちのエンジニアはすべてそれを読んで、常に質問に答えることができます。

+0

私は簡単に見ていたので、私はriakについてよく分かりません。私が基礎を知っている以上、私はそこに投稿しますが、今はありません。私はそれがメモリにすべてを収めることができなければならないので、私はredisがdbであることが分かっていることを発見したので、それに適したものを一般的なアイデアにしたい。私は 'ベクトル時計 'に関することは知らないが、あなたはちょうど私が奇妙に聞こえる鍵のために複数の値を持つことができると言ったが、私はriakがかなり効率的であるとふりをするだろう。だからriakは、アプリケーションによって行われるすべての一貫性のあるロジックを持つように設計されていますか?興味深いことに –

+0

私は少し読んだ。私はちょっと混乱していますが、例ではallow_multをtrueに設定しています。だから、もし私が書き込みの競合があり、偽であるものを持っているとすればどうなりますか?それで、すべてにそれにvclockがあるように聞こえますか?それはあなたが書くことができる高いように見える。私はそこでの使用とトレードオフを見ることができます。私は私のニーズのためのものを解決し、修正する方法を想像することができますが、私は想像することはできません/私はマルチを設定しなかった場合、何が起こるのだろうと思う?一方は他方を上書きしますか?それは失敗するでしょうか?私はそれが失敗したら物事を処理する方法を見ることができます(しかし、私は他の書き込みを元に戻す必要があります) –

+0

しかし、それはdoesntが失敗し、他のジョブが開始し、少し後に完了し、データを上書きした。 –

関連する問題