2012-04-09 19 views
65

多くの場合、NoSQL、データグリッドなどのさまざまなスピーチで最終的な一貫性について聞きます。 最終的な一貫性の定義は、さまざまなソースによって異なります(具体的なデータストレージによっても異なる場合があります)。最終的な一貫性英語

最終的な一貫性は一般的な意味であり、具体的なデータストレージとは関係のない簡単な説明は誰にもありますか?

+0

を作るために、そのヘルプが例えばでしたWikipediaは役に立たない? http://ja.wikipedia.org/wiki/Eventual_consistency –

+7

@OliCharlesworth:nope。たぶんそれは私だけですが、二度読んだ後でさえ絶対に不明です。 – Roman

答えて

102

結果整合性:

  1. 私は天気予報を見て、明日雨になるだろうということを学びます。
  2. 明日は雨が降るだろうと言います。
  3. あなたの隣人は明日晴れになると妻に話します。
  4. 明日は雨が降ってくるとあなたの隣人に伝えます。

最終的に、すべてのサーバー(あなた、私、あなたの隣人)は真実を知っていますが(明日は雨が降ります)、その間にクライアント(彼の妻)彼女が1つ以上のサーバー(あなたと私)がより最新の価値を持った後に尋ねたにもかかわらず、晴れていました。厳格な一貫性/ ACID準拠とは対照的に

  1. あなたの銀行残高は$ 50です。
  2. $ 100を入金します。
  3. お客様の銀行残高は、どこのATMからでも150ドルです。
  4. あなたの娘はATMカードで$ 40を引き出します。
  5. どこのATMからでも請求された銀行残高は110ドルです。

あなたの残高は、アカウントに行われたすべての取引の実際の合計を正確に反映したものではありません。

非常に多くのNoSQLシステムは、最終的な一貫性を持っている理由は、ほぼすべてのそれらのが配布されるように設計されており、完全な分散システムと厳格な一貫性を維持するために、超線形オーバーヘッドがされていることである理由(だけあなたにできることを意味スケーラビリティを維持するために問題に指数関数的に多くのハードウェアを投げ入れる必要がある場合など)

+0

私は分かりません。成長は線形か指数関数的ですか? –

+2

N個の厳密に一貫したノードのシステムの通信オーバーヘッドの増加は、一般に、超線形(すなわち、線形以上)であると理解される。指数関数的かもしれませんし、キュービックかもしれません...通信プロトコルなどによります。 –

58

結果整合性:

  1. あなたのデータを複数のサーバーに複製され
  2. あなたのクライアントは、誰かが、サーバの1つにデータの一部を書き込みデータ
  3. を取得するためのサーバーのいずれかにアクセスすることができ、
  4. クライアントはデータでサーバーにアクセスし、最新のコピーを取得します
  5. 異なるクライアント(または同じクライアント)がdiffにアクセスします(新しいコピーをまだ入手していないサーバー)、古いコピーを取得します。

複数のサーバー間でデータをレプリケートするには時間がかかるため、データの読み取り要求はサーバー新しいコピーを作成し、古いコピーを持つサーバーに移動します。 「最終的」という用語は、最終的にデータがすべてのサーバーに複製されることを意味し、すべて最新のコピーを保持します。

レスポンスサーバーはデータのコピーを返さなければならず、他のサーバーを参照してデータの内容に関する相互合意に達する時間がないため、最終的な一貫性が必要です。私はblog postを書いてこれについて詳しく説明します。

+1

ニースのブログ記事。最終的な一貫性の考え方に新しい誰かのための読書に値する。この回答は、ブログ記事の内容の詳細を説明するために書き直された方が良いでしょう。 – axiopisty

0

最終的な一貫性は、スペクトルによく似ています。一方の側では強い一貫性があり、他方では最終的な一貫性があります。その間には、スナップショットのようなレベルがあり、私の書き込みを読んだり、縛られたstalenessを読んでいます。ダグ・テリーは、his paper on eventual consistency thru baseball という美しい説明をしています。

最終的な一貫性は、データストアから読み込むたびに、基本的にランダムなデータをランダムな順序で許容します。それより優れているものは、より強固な一貫性モデルです。たとえば、スナップショットには古いデータが含まれていますが、再度読み取ると同じデータが返されるため、予測可能です。時々、アプリケーションは、一貫したデータを要求している一定の期間、古いデータを許容することができます。

一貫性の意味を見ると、それは一貫性または偏差の欠如に関連しています。したがって、コンピュータシステム以外の用語では、予期しない差異に対する許容を意味する可能性があります。それはATMを通して非常によく説明することができます。 ATMはオフラインになる可能性があり、したがってコアシステムからの勘定残高とは異なる。しかし、時間の窓のために異なる残高を示すための寛容があります。 ATMがオンラインになると、コアシステムと同期して同じバランスを反映することができます。したがって、ATMは最終的に一貫していると言えるでしょう。

1

アプリケーションがあるマシン上のデータ項目を変更すると、その変更を他のレプリカに伝播する必要があります。変更の伝播は瞬間的なものではないので、コピーの一部に最新の変更がある時間間隔がありますが、それ以外の時間は変化しません。言い換えれば、コピーは相互に矛盾します。しかし、変更は最終的にすべてのコピーに伝播され、したがって「最終的な整合性」という用語に反映されます。最終的な一貫性という用語は、あるマシンで行われた変更を他のすべてのコピーに伝播する際に無制限の遅延があることを単に認めるものです。伝播の必要がないため、最終的な一貫性は集中型(単一コピー)システムでは意味がなく、関連性がありません。

ソース:私たちが言うことができる非常に簡単な英文でhttp://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf

0

:お使いのシステムが矛盾した状態にあるかもしれないが、その目的は、データごとにいくつかの点で一貫性に到達するために常にあります。

1

アプリケーションとそのレプリカがあるとします。次に、新しいデータ項目をアプリケーションに追加する必要があります。

enter image description here

次に、アプリケーションは以下の

enter image description here

一方、新しいクライアントがまだ更新されていない1つのレプリカからデータを取得するつもりで他のレプリカのショーにデータを同期させます。その場合、彼は正しい日付データを得ることができません。同期には時間がかかるからです。その場合、最終的には一貫性

問題は、どのように我々は一貫結局ができているではないてきましたか?

メディエータアプリケーションを使用してデータの更新/作成/削除を行い、直接クエリを使用してデータを読み取ります。 結果整合性

enter image description here enter image description here

関連する問題