2017-12-01 7 views
1

2つのだけの操作が必要です。キー/値ストアは並行性をどのように管理しますか?私は、キー値ストアを明記の記事の数を読みました

  • set(key, value)
  • get(key)

をこれは、単一のプロセスのための罰金ですが、複数のプロセスを持っているとき、キー値ストアは並行性をどのように管理しますか? compare-and-swapスタイルの並行処理が必要なバージョン番号(たとえば、符号なし整数)が考えられました。例えば、2つの操作が次のようになります。

  • set(key, value, version)version条件であり、 - 不一致が同時実行エラーが発生し、成功したマッチが増加の原因となります。
  • get(key)valueversionの両方を返します)。
+0

ほとんどのキー/値構造体は、すべての操作でスレッドセーフではありません。データ競争を避けることはユーザーの責任です。 – iamnoten

+0

ミューテックスなどを使用してデータ競合を回避しますか?これは、共有されたKVストアを持つ別々のマシンからは不可能です。 – magnus

+0

共有KVストアの場合、データベースのように機能し、通常はレース処理メカニズムが異なります。特定の文書を確認する必要があります。あなたのバージョン番号の解決策はその1つかもしれませんが、実際の実装はより複雑です。 – iamnoten

答えて

0

デザインには2種類あります。ロックを使用するものとMultiVersion Concurrency Controlを使用するものがあります。

MVCCはロックなしで並行性を実現します。それはのように要約することができます:単一の読み取りでは

  • 、データベースは単一の書き込みでは、データ
  • の最新バージョンを返す、databaeは場合、データ
  • のための新しいバージョンを追加します読取り/書込み並行要求の場合、読取りは最新のバージョンのデータを、すなわち現在の書込みの前に取得する。
  • 書き込み/書き込み同時リクエストの場合、書き込みの1つが放棄され、後で再生されると思います。
関連する問題