2017-01-28 4 views
0

仮定:RF = 3カサンドラ差は

整合性レベルのスピーカーについて、インターネット上のいくつかのビデオでは、CL = ONEが優れていると言う、我々はCLを使用する場合、CL = ANYので、= ANYコーディネータは意志その後、ヒント(およびデータ)のみを格納するのが喜んで(ここでは、対応するパーティションキー範囲を持つ他のすべてのノードが停止していると仮定しています)、コーディネーターの失敗のためにデータが失われる可能性があります。しかし、私が理解しているように、CL = ONEを使用し、このパーティション・キーに使用可能なノードが1つしかない(たとえば3つしかない)場合、データが挿入されたノードは1つしかありません。損失のリスクは同じです。

しかし私は同じ状況を想定しなければならないと思います。特定のトークンのすべてのノードはなくなりました。次に、書き込み操作を破棄して、コーディネーターの損失のリスクが大きい書き込みを行う方がよいでしょう。

答えて

3

CL = ANYは、本番環境では決して使用しないでください。ヒントがヒントログにあるときにデータを読み取ることができないため、そのパーティションを所有するノードにヒントが書き込まれるまで、書き込みは使用できなくなります。

CL = ONEとRF = 3の2つのノードを使用すると、a)コミットログとノードのmemtable、b)ヒントログの両方にデータが格納されます。これらはおそらく異なるノードですが、同じ1/3の時間になる可能性があります。つまり、CL = ONEとCL = ANYを使用すると、単一のノードに障害が発生してもデータが完全に失われる危険があります。

ANYまたはONEの代わりに、CL = QUORUMまたはCL = LOCAL_QUORUMを使用します。

+0

ありがとう、私の質問のポイントに短いとひどい!私は強い一貫性を得る方法を知っています....そしてそのための選択肢があります。強固な一貫性のための公式は、「読み込みのCL +書き込みのためのCL> RF」です。私はちょうどANYとONEのケースの可能性を理解しようとしていて、あなたはそれを手伝ってくれます。 – Deil

0

ヒントは、デフォルトで3時間だけ保存され、修復を実行する必要がある時間より長く保存されます。クラスタ内のどこかのノードにこのデータのコピーが少なくとも1つあれば修復できます(コーディネータに保存されているヒントはカウントされません)。

一貫性1は、クラスタ内の少なくとも1つのノードが何を問わずコミットログに記録することを保証します。 Anyは最悪の場合、コーディネーターのヒントに格納され(他のノードはアクセスできません)、これはデフォルトで3時間の時間枠に格納されます。他の2つのインスタンスがダウンしている場合、ANYを3時間経過するとデータが失われます。

リスクが懸念される場合は、クォーラムを使用し、2ノードがデータを保存する必要があります。決定するのはアプリケーション開発者/設計者の責任です。クォーラムは、通常、書き込みよりも待ち時間が少し長くなります。しかし、負荷が劇的に増加すると、ノードなどを追加することはいつでも可能です。

はまた、様々な整合性とレプリケーションの要因がアプリケーションに持っていますどのような影響を参照するには、この便利なツールを見て:RF 3で

https://www.ecyrd.com/cassandracalculator/

を、クラスタ内の3つのノードは、実際に書き込みを取得します。一貫性は、あなたがそれらからの応答を待つ時間だけです... Oneを使用すると、1つのノードがコミットログにそれを持つまで待つでしょう。しかしコーディネーターは実際にすべての人に書き込みを送るでしょう。もし彼らがコーディネーターに反応しなければ、書き込みをヒントに保存します。

ほとんどの場合、実際に生産されているのは悪い考えです。

+0

ありがとうございますが、一貫性のレベル、ヒントを保存する時間についての一般的な情報のようです。私の質問にはまっすぐではない。とにかくリンクをありがとう! – Deil