0

私がいつも言っているように、私の英語はごめんなさい。Cassandraのいくつかの列ファミリーの手動インデックスの作成に取り組んでいます。私はこれについて私ができるすべてを読みました、しかし私は私がきちんと理解することができない何かを見つけました。

このプレゼンテーションでは、Cassandraでの索引付け、36〜45ページ、Ed Anuffによって行われた、Users列ファミリーのインデックスを作成するための彼の簡単な例を見てきました。彼は2つの明らかなCFともう1つのCFを使用して並行性を処理します。この3番目のCFは「私の問題」です。私が間違っていなければ、Cassandraは常に各列の最新の値を保存します。この値にインデックスが付けられている場合、インデックスCFで更新する必要があります(古いインデックスを削除して新しいインデックスを作成する)が、なぜ3番目のCFが必要なのですか?それと並行性について考えるとき、私の理解は次のとおりです。わかりました。多くの人がインデックス付けされた値を更新しています。インデックスの更新には多くの作業が必要になりますが、最終的に最後の値はユーザーCFとインデックスCFになります。そのため、列ごとにタイムスタンプがあります。同時実行性はどうでしょうか。さらに、

私はCassandraの問題について大いに無知であることを知っていますが、3番目のCFの背後にある理由はわかりません。Ed Anuffは、この3番目の列ファミリーを使用すると、ここでインデックスを一貫性のあるステータスに復元できると説明していますが、なぜそれらは一貫性のないステータスに陥るのですか?そして、これが発生した場合、ユーザーCFはインデックスを復元するのに十分である可能性がありますか、それとも私は間違っていますか?

誰かが私にこれを説明してもらえますか?私のエラーは何ですか?

どうもありがとうございます!

4

2 に答える 2

0

他の誰かが私と同じ疑問を持っている可能性があると思うので、私が見つけたもので私自身の質問に答えるつもりです:

私が想定したように、主な問題は同時実行性です。更新する前にインデックスを読み取る必要があるため、多くのユーザーが同時に同じインデックス付きの値を変更できると仮定すると、値を読み取ってからインデックス内の値を更新するまでの間に、別のユーザーが変更した可能性があります。再びその値。また、値が更新された瞬間からインデックスを更新するまで、システムがクラッシュする可能性があります。次に、いくつかの同時変更の後、インデックスには、その値を持たない行を指す古い値が含まれる可能性があります。

3 番目のカラムファミリーを追加することで、このプロセスはより安全になりますが、100% 安全ではありません。

最後に、私の理解では、値を更新するときに同時実行性がなければ、問題はないはずです。ユーザーデータのインデックスを作成しているとします。データの所有者のみがデータの変更を許可されている場合、同時実行性はまったくありません。固有のリスクは、インデックスを値に合わせるためのプロセスを完了する前にシステムがクラッシュすることですが、この操作はべき等であるため、成功するまで繰り返すことができます。

これが私が理解したことを説明し、他の人を助けることを願っています.

于 2013-02-01T17:01:03.100 に答える
0

実際には、同時実行性よりもべき等性の方が重要だと思います。列ファミリーが 2 つまたは 3 つある場合、同時ユーザーは偽陽性の結果を生成する可能性があります。つまり、その値をもう持たない行を指すインデックス列ファミリーのキーです...ただし、いずれかを繰り返すと、2 つの列ファミリーの設計になります。更新プロセスの一部として、インデックス列ファミリーの正しい行の行のキーを失う可能性があります...ただし、3 つの列ファミリーの設計では、各行のキーがインデックス列ファミリーの正しい場所にあること確認できます...結果をフィルタリングすることで誤検知の問題は解決しますが、キーが正しい場所にない場合、行を簡単に取得できず、インデックス作成メカニズム全体が無駄になります...

この例を 2 カラム ファミリー デザインで考えてみましょう。ユーザー 1 が場所を更新し、Cassandra はエラーを返しますが、書き込みは成功しました。ユーザー 2 は場所を更新し、ユーザー 1 の書き込み結果を読み取り、自分の場所を列ファミリーに書き込みます ユーザー 1 は再試行し、列ファミリーに自分の場所を書き込み、インデックス列ファミリーを更新します ユーザー 2 はインデックス列ファミリーを更新し、ユーザー 1 の場所を削除して挿入します彼自身の

最後に、ユーザーはユーザー 1 の場所を取得しましたが、行キーはユーザー 2 の入力インデックス行にしか存在しません

私は今この例を作成していますが、それに問題があるか、更新プロセスを変更することで適切な場所でキーを失う問題を解決できるかもしれませんが、背後にある概念を理解する必要があります. より良い例を考えることができます。

しかし、これについてはよくわかりませんが、この説明は私には理にかなっています。うまくいけば、あなたに説明できます...

于 2013-09-01T12:41:37.280 に答える