0

Riak の Links を使用して、二重リンク リストを作成します。

そのためのアルゴリズムは非常に単純です。

  1. 'N0' を挿入する新しい要素とする
  2. 「次の」リンクを含むリストの先頭を取得します (N1)
  3. N1 の「前」を N0 に設定します。
  4. N0 の「次」を N1 に設定します
  5. リストの先頭の「次」を N0 に設定します。

ここでの問題は、明らかな競合状態があることです。2 つの同時クライアントがリストの先頭を取得すると、アイテムの 1 つが「失われる」可能性が高いためです。それを回避する方法はありますか?

4

1 に答える 1

2

CAP 定理について話すとき、Riak は結果整合性のあるシステムです。

バケット プロパティを設定したallow_multi=true場合、2 つの同時クライアントがリストの先頭を取得して書き込みを行うと、兄弟レコードが作成されます。次の読み取りでは、複数の値 (兄弟) を受け取り、競合を解決して結果を書き込む必要があります。いかなる種類の原子性も持たないことを考えると、リンクされたオブジェクトを更新しようとすると、大量の同時書き込みの下で追加の競合が発生する可能性があります。解決することは不可能ではありませんが、間違いなくトリッキーです。

おそらく、リスト全体を単一のオブジェクトにシリアル化する方がよいでしょう。これにより、競合の解決がはるかに簡単になります。

于 2013-04-06T03:23:37.093 に答える