2

同時書き込みの場合、Cassandra はレプリカの一貫性を保証しますか? たとえば、N=3、W=3 で、3 つの同時書き込みがある場合、各レプリカで 3 つの異なる値になる可能性はありますか?

これは Cassandra 固有の問題ですか、それともベクトル クロックを使用しているにもかかわらず、正規の Dynamo 設計にもこの問題がありますか?

4

2 に答える 2

3

この場合、Cassandraはクライアント提供のタイムスタンプを使用して、各レプリカが「最新」の値を保持するようにします。あなたの例では、各レプリカに書き込む場合、レプリカが異なる順序で書き込みを受信する場合でも、レプリカは書き込みで提供されるタイムスタンプを使用して、保持するタイムスタンプを決定します。古いタイムスタンプを持つ同じキーをレプリカに書き込んでも無視されます。

このメカニズムは、同時書き込みに対処するためだけに必要なわけではありません。Cassandraは、長期間にわたって順不同で書き込みを受信する可能性があります(つまり、最近ダウンしたノードにヒントを応答する)。これに対処するために、CassandraがSSTablesを圧縮し、同じ2つのキーに遭遇すると、タイムスタンプを使用してどちらを保持するかを決定します。

同様に、Cassandraには読み取り修復と呼ばれる機能があります。読み取り時に、Cassandraは各レプリカによって指定されたタイムスタンプを比較し、最新のタイムスタンプに関連付けられた値をクライアントに返します。次に、この値を古いレプリカに書き戻します(これはパフォーマンスに影響を与える可能性があるため、後続の書き込みを行う可能性は調整可能です)。

于 2012-08-30T13:26:02.917 に答える
0

tom.wilkie の回答に追加するだけです。最新の値を保持してデータの一貫性を確保したい場合は、常に LOCAL_QUORUM または QUORUM の一貫性で読み取りと書き込みを試みてください。

于 2012-08-31T16:52:11.607 に答える