2010-12-29 15 views
7

いくつかの列にセカンダリインデックスを持つcassandra列ファミリを設定しようとしていますが、データを読み込むときにフィルタリングする必要があります。私の最初のテストでは、複数のインデックスを一緒に使うと状況が遅くなります。ここでは、私はそれが(カサンドラ-CLI経由)現在設定されている方法です:私は、すべてのデータを取得したいApacheの複合インデックスCassandra

update column family bulkdata with comparator=UTF8Type and column_metadata=[{column_name: test_field, validation_class: UTF8Type}, {column_name: create_date, validation_class: LongType, index_type: KEYS}, {column_name: domain, validation_class: UTF8Type, index_type: KEYS}]; 

どこCREATE_DATE> somevalue1とCOLUMN_NAME = somevalue2。私のクライアントのためにpycassaを使用して、私は次の操作を行います。

domain_expr = create_index_expression('domain', 'whatever.com') 
    cd_expr = create_index_expression('create_date', 1293650000, GT) 
    clause = create_index_clause([domain_expr, cd_expr], count=10000) 
    for key, item in col_fam.get_indexed_slices(clause): 
    ... 

これは1が通常のクエリのニーズに基づいて複合インデックスを作成する必要がありますもちろんのSQL、中に一般的な間違いがあります。私はcassandraにはかなり新しいので、そのようなことが必要か、存在するかどうかはわかりません。

私はcassandraとのやりとりに大量の書き込みと多数の読み込みと更新が含まれます。私は彼らがここで行うべき正しいことであると考えてインデックスを設定しましたが、おそらく私は完全に間違っています。私は、パフォーマンスの高いシステムをセットアップするためのアイデアに興味があります。

ああ、これはカサンドラ0.7.0-RC3にある

+2

より多くの条項が理由の中に、クエリ時間を増加するのは正常です。詳細を教えていただけますか?挿入した行の数はいくつですか?クエリしている列全体でどのような値の分布ですか? – jbellis

+0

今のところ、値はすべて範囲内のランダムなデータです。今までの私のテストでは、私は約100万行を持っています。 coulmnsのデータの場合、create_dateはランダム化され、すべての値が同じ年内にあり、domainは8のリストから無作為に選ばれたドメイン名であり、test_fieldはランダムな文字です。 – Jake

答えて

8

ネイティブカサンドラセカンダリインデックスは、いくつかの制限があります。データストアのドキュメントによれば、カーディナリティの高い列(ユニークな値が多すぎる)には使用されていません。インデックス作成しているcreate_dateカラムのカーディナリティが高いようです。また、ネイティブのカサンドラ指数のサポートでは複合インデックスのようなものはありません。

深さカバレッジの詳細については、あなたが私のブログの記事を訪問することができ http://pkghosh.wordpress.com/2011/03/02/cassandra-secondary-index-patterns/

Pranab

関連する問題