2010-12-29 6 views
7

Veriyi geri okurken filtrelemem gereken birkaç sütunda ikincil dizinlere sahip bir cassandra sütun ailesi kurmaya çalışıyorum. İlk testimde, birden fazla indeksi birlikte kullandığımda, işler yavaşlar. İşte o (cassandra-cli aracılığıyla) şu anda yapılandırılmış nasıl: Ben tüm verileri almak istiyorumApache Cassandra'daki Bileşik Endeksler

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}]; 

nerede create_date> somevalue1 ve sütun_ismi = somevalue2. Müvekkilim için pycassa kullanarak ben aşağıdakileri yapın:

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): 
    ... 

Bu seferki normalde sorgu ihtiyaçlarına dayalı bir bileşik endeksi oluşturmak zorunda kalacak elbette SQL, ortak bir hatadır. Yine de cassandra'ya yeni geldim, bu yüzden böyle bir şeyin gerekip gerekmediğini bilmiyorum.

Cassandra ile olan etkileşimlerim çok sayıda yazım ve çok sayıda okuma ve güncelleme içerecektir. Burada yapılması gereken doğru şeyleri anlatan indeksleri kurdum, ama belki de tamamen yanılıyorum. İndeks kurulumumla veya olmadan bir performans sistemi kurmak için herhangi bir fikre ilgi duyarım.

oh ve bu cassandra 0.7.0-RC3 üzerindedir

+2

daha hükümler nedenle içinde, sorgu süresini artırmak için normaldir ziyaret edebilirsiniz. Daha fazla detay verebilir misiniz? Kaç tane satır eklediniz? Sorgulama yaptığınız sütunlar arasında hangi değer dağılımı var? – jbellis

+0

Şimdilik, değerler bir aralıktaki tüm rastgele verilerdir. Şimdiye kadar yaptığım testler için yaklaşık 1 milyon satırım var. Coulmns'taki veriler için, create_date randomize edilir, böylece tüm değerler aynı yıl içinde olur, domain 8 listesinden rasgele alınan bir alan adıdır ve test_field rastgele karakterlerdir. – Jake

cevap

8

Yerli Cassandra ikincil indeksler bazı sınırlamaları vardır. Veritas dökümantasyonuna göre yüksek kardinaliteye sahip sütunlar (çok sayıda benzersiz değer) için kullanılmaları gerekmez. Endeksleme yaptığınız create_date sütununun yüksek düzeyde asalet sahibi olması gibi görünüyor. Ayrıca, doğal Cassandra indeks desteğinde bileşik indeks diye bir şey yoktur.

derinlik kapsama fazla, sen benim Blog post http://pkghosh.wordpress.com/2011/03/02/cassandra-secondary-index-patterns/

Pranab