2016-02-20 23 views
7

cassandra için yeni ve analitik görevler için kullanıyorum (iyi endeksleme gerekli).Cassandra - birincil anahtar olmayan dezavantajları olan WHERE yan tümcesi

Bu yazımda (ve başkaları) okudum: cassandra, select via a non primary key DB'mi WHERE clause numaralı birincil anahtar sütunlarla sorgulayamıyorum. (Performans sorunları için önerilmez)

  • ikincil indeks oluşturma Bunu yapmak için:

    , (TÜM büyük dezavantajları ile birlikte) 3 olasılık var gibi görünüyor.

  • Yeni bir tablo oluşturun (gereksiz veriyi istemiyorum, çünkü cassandra ile sorun yok).
  • Sorgulamak istediğiniz sütunu birincil anahtarın içine koyun ve bu durumda birincil anahtarın tüm bölümlerini WHERE yanımda belirtmem gerekir ve IN veya ='dan başka bir operatör kullanamıyorum.

Yukarıdaki 3 kısıtlamaya sahip olmadan yapmaya çalıştığım (WHERE clause birincil olmayan anahtar sütunu) başka bir yolu var mı?

+0

Cassandra gerçekten tanımladığınız kullanım durumu için uygun değildir. Sorgu esnekliğine ihtiyacınız var gibi geliyor ve bunu Cassandra'dan çıkarmayacaksınız. Alt satırda, sorgu tabloları (yedekli verilerle) oluşturmanın önerisi, ölçeklenebilir bir çözümdür ***; Cassandra'yı ilişkisel bir veritabanı gibi kullanmaya çalışırken değil. – Aaron

+0

Hi @Aaron oups, problem, sorgunun esnekliği için 'mongodb' 'cassandra' 'dan daha fazla tavsiye edildi, fakat' read/write '(benim durumumda çok önemli olan) performans için ve ikincisi bu noktada çok kötü. – farhawa

+0

Ve bu performansı görebilmenin tek yolu, gereksiz verileri kullanarak sorgu tabanlı bir modelleme yaklaşımı almaktır. Sorgu esnekliği elde etmek için ilişkisel bir model veya benzer yöntemler kullanmaya çalıştığınızda Cassandra oldukça korkunç bir performans sergiliyor. – Aaron

cevap

4

Cassandra'nın kendisinden, yukarıda belirttiğiniz seçeneklerle sınırlıdır. Eğer bilmek istiyorsanız neden buraya bakın:

A Deep Look to the CQL Where Clause

o zaman Spark kullanarak baktım Cassandra içinde depolanan bilgilerin ilgili analizleri çalıştırmak için çalışıyoruz Ancak eğer. Spark, dağıtılmış sistemlerde büyük ölçekli veri işleme için üretilmiştir. Aslında, özellikle veri yükleme ve kaydetme konusunda Spark ve Cassandra arasında bazı güzel entegrasyon özelliklerine sahip olan Datastax'ı (bkz. here) kullanmayı düşünüyorsanız. Hem ücretsiz (Topluluk) hem de ücretli (Kurumsal) sürümleri vardır.

+0

Merhaba @bechbd için teşekkürler cevap sende Burada bir indeksleme problemim var, abov'dan bahsettiğim kısıtlamalar olmadan veriyi nasıl yükleyebilirim? – farhawa

+1

Verileri, yukarıdaki bağlantıda bulunan sınırlamaları kullanarak Spark RDD'ye yüklemeniz gerekecektir. Spark'e bir kez daha sonra, aradığınız şeylere büyük miktarda veriyi filtrelemek için filtreler, harita/azaltma aralığını kullanabilirsiniz. Endeksleme sorunuzun kısa cevabı, yapmaya çalıştığınız şey, Cassandra'nın mimarlık yapmanın temel yollarından birini ihlal etmesidir. AFAIK, Cassandra 2.X'in bu sınırlamaların üstesinden gelmenin bir yolu yoktur. Cassandra 3.X'i kullanıyorsanız, materyalize bir bakış açısına bakabilirsin, ancak bunlar kendi komplikasyonlarını tanıtır. – bechbd

0

Sorgulamak istediğiniz alanların bölümleme anahtarının bir parçası olmadığından, tablonun farklı bir amaç için tasarlandığını varsayalım. Benim önerim, tabloyu çoğaltmak ve onu sorgulamak istediğiniz alanlara göre anahtarlamak olacaktır. Data modeling concepts'a göre kullanacağınız tam amaç için yeni bir tablo tasarlamanızı öneririm.

Cassandra, CQL ile yapabileceklerinize göre belirli kısıtlamalar koyarak, doğrusal ölçekleme vb. Gibi çeşitli avantajlar sunar.

İlgili konular