Cassandra dokümantasyonunda,
Bu durumlarda bir dizin kullanmayın:
- Yüksek kardinalite sütunlarında, daha sonra az sayıda sonuç için çok sayıda kaydı sorguladığınızdan. Aşağıdaki Yüksek kardinalite sütun dizini kullanma sorunları bölümüne bakın.
Devam ediyor,
Çok farklı değerleri olan yüksek kardinalite sütununda bir dizin oluşturursanız, alanlar arasındaki bir sorgu çok az sonuç için birçok arama yapılmasına neden olur. Bir milyar şarkı içeren tabloda, sanatçıları yerine şarkı yazarlarına (genellikle her şarkı için benzersiz bir değer) bakmak çok verimsiz olabilir. Tabloyu Cassandra yerleşik dizinini kullanmak yerine manuel olarak bir dizin formu olarak tutmak daha verimli olacaktır. Benzersiz veriler içeren sütunlar için, dizinlenmiş bir sütuna sahip olan tabloya ilişkin sorgu hacmi orta ve sabit yük altında olmadığı sürece, kolaylık sağlamak için bir dizin kullanmak bazen iyi performans gösterir.
Ama soruyu asla gerçekten cevaplamıyor: neden verimsiz? "El ile bir dizin formu olarak tabloyu korumak" ne demek hiçbir fikrim yok. Ama sonra bir şekilde kendisiyle çelişiyor "… bazen sorgu hacmi ılımlı olduğu sürece kolaylık sağlamak için bir indeks kullanmak performans açısından iyi ..."
Bu bana PK'yı ne zaman ve nerede yapabileceğimi söylemeye mi çalışıyor? Verimsizlik nedir? Anladığım kadarıyla, bir dizine çarpan bir sorgunun kümedeki her düğümü sorgulaması gerekir ve ardından her düğüm yerel dizininde bir arama yapar ve sonuçlar daha sonra toplanır. Bu, her zaman ağın gecikmesinde ödeme yaptığımız için, pahalı olmamalıdır (her dizin araması oldukça ucuz olmalıdır), çünkü partinin en yavaş düğümünü beklememiz gerekir. Burada bir şey eksik mi?
Ancak, nadiren de olsa, farklı ama neredeyse benzersiz bir özellik tarafından aranması gereken bajillion öğeleri olan bir koleksiyonum varsa… bu uygun bir kullanımdır, değil mi?
¹Every? Çoğaltma, bu çoğaltma faktörü 3 için kümenin 1 / 3'ünü vurabilir anlamına gelirse?