6

Cassandra を使用して複雑なデータを保存したいのですが、
インデックスを整理する方法がわかりません。

テーブル (列ファミリー) は次のようになります。

Users =
  { 
    RandomId int,
    Firstname varchar,
    Lastname varchar,
    Age int,
    Country int,
    ChildCount int
  }

必須フィールド (Firstname、Lastname、Age) と追加の検索オプション (Country、ChildCount) を含むクエリがあります。
この種のクエリを高速化するには、インデックスをどのように編成すればよいでしょうか?

まず、(Firstname、Lastname、Age) に複合インデックスを作成し、残りのフィールド (Country および ChildCount) に別のセカンダリ インデックスを追加するのが自然だと思いました。
しかし、セカンダリ インデックスを作成した後、テーブルに行を挿入できず、テーブルにクエリを実行できません。

使用する

  • カサンドラ 1.1.0
  • --cql3 オプションを指定した cqlsh。

私たちの問題を解決するための他の提案 (必須および追加のオプションを含む複雑なクエリ) は大歓迎です。

4

2 に答える 2

2

これが私の考えです。行キーとして RandomId を使用し、残りのすべてのフィールドを単純に列として使用して列ファミリーを作成することができます (例: 列名 'firstname'、列値 'jonh')。この後、これらの列ごとにセカンダリ インデックスを作成する必要があります。値のカーディナリティが低いように見えるので、少し効率的である必要があります。

CQL コードは次のようになります。

create column family users with comparator=UTF8Type and column_metadata=[{column_name:  firstname, validation_class: UTF8Type,index_type: KEYS},
{column_name: lastname, validation_class: UTF8Type, index_type: KEYS},
{column_name: contry, validation_class: IntegerType, index_type: KEYS},
{column_name: age, validation_class: IntegerType, index_type: KEYS]},
{column_name: ChildCount, validation_class: IntegerType, index_type: KEYS]];

良いリファレンスはhttp://www.datastax.com/docs/0.7/data_model/secondary_indexesです。

間違っていたら教えてください。

于 2012-06-01T20:36:13.470 に答える