1

私はラムダアーキテクチャでCAP定理を打ち負かす方法についてNathan Marzのarticleを読んできましたが、最終的な一貫性がどのように変わらないのかを理解していません。不変データは最終的な一貫性をどのように自明にしますか?

次の段落は、記事から取られる:

キーはデータが不変であるということです。不変のデータとは、更新のようなものがないことを意味します。したがって、データの異なる複製が矛盾することは不可能です。これは、発散値、ベクトルクロック、またはリード修復がないことを意味します。クエリの観点からは、データが存在するか存在しないかのいずれかです。そのデータにはデータと関数だけがあります。最終的な一貫性を強制するために必要なことは何もありません。最終的な一貫性はシステムについての推論の仕方にはなりません。

私は2つのノードAとBを持つ分散型の挿入専用データベースを持っており、両方ともレコード[timestamp=1; id=1; value=10]を保持しています。それと同時に、ノードAに対する挿入があり、結果は[timestamp=2; id=1; value=20]であり、レコードのノードBに対する読み取りはid=1である。

最終的な一貫性の問題を、この例では更新の可能性のあるデータベースよりもどのように解決するのですか?

答えて

0

私は100%ではないですが、とにかく説明しようとします。

たとえば、ネットワークリンクで接続された書き込み/読み取りを受け入れる2つのデータベースがあります。リンクがダウンし、ネットワークパーティションが作成されます。システムをCAPで利用できるようにするため、両方のデータベースで書き込み/読み取りを受け入れます。

変更可能なデータ構造を扱う場合:1番目のデータベースに接続しているクライアントがレコードXの値をAに更新し、2番目のデータベースに接続している別のクライアントがその値をBに更新したいとします。システムが利用可能な場合は、両方のデータベースで両方の書き込みを受け入れますが、ネットワークパラメータがなくなると競合を解決する必要があります。これにより、アップデートの1つが失われます。

不変のデータ構造では、データを更新するのではなく挿入するので、ネットワークの並べ替えが終了した後に両方の書き込みがそこに置かれます。非常に手間のかかる操作命令を保存するには、何らかの種類の時間同期が必要です(Sebastien Diotの記事のコメントを参照してください)。

関連する問題