1

これが、Cassandraの標準の列ファミリーとして使用したいPOJOの概要です。

class Person {
string key
string name
string dob
List<String> phones
List<String> ids }

明らかに私の鍵は私の主要なインデックスです。リストの作り方がわからない?それらの新しいCFを作成する必要がありますか、それともすべてを列として追加する必要がありますか?
OK、だから私はすべてを平等で検索できるようにしたい。get Person where phone = 1112223333 get Person where firstname = Al and dob = yyyy-mm-dd

私が話しているのは1億人で、すべての列がほぼ一意です。それで、組み込みのセカンダリインデックスが除外されるのでしょうか。

私は自分のCFをインデックスとして「取得」します。ここで、主キーは電話であり、列名はPersonCFの主キーです。

しかし、key = 1234を指定して電話を削除する必要がある場合、電話のCFインデックスを維持するにはどうすればよいですか。TIAジャージーマン

4

1 に答える 1

3

まず、セカンダリインデックスは、カーディナリティが低い場合(つまり、繰り返し値が多い場合)に適切に機能するため、正しい選択にはなりません。電話番号はこれを満たしていません。これらは技術的には機能しますが、クラスターサイズが大きくなると非効率になります。

セカンダリインデックスなしで双方向ルックアップが必要な場合、おそらく最善のアプローチは独自のインデックスを維持することです。これは、データを読み取るために必要な方法でデータを書き込むという一般的な設計哲学に従います。RDBMSの世界から来ると、正規化に慣れているので、これには多少の慣れが必要になる場合があります。

あなたが見逃しているのは、電話番号をあなたの人のCFとインデックスの両方の場所に保存したいということだと思います。これにより、人のための電話と電話のための人を見ることができます。電話を追加/削除する必要がある場合は、両方の場所で同時に実行します。関係を維持するロジックをDBMSからアプリケーションに移動するだけです。

于 2012-04-30T13:57:44.053 に答える