2016-02-20 15 views
7

Sono nuovo a cassandra e lo sto utilizzando per attività di analisi (è necessaria una buona indicizzazione).Cassandra - Clausola WHERE con svantaggi chiave non primaria

Ho letto in questo post (e altri): cassandra, select via a non primary key che non posso interrogare il mio DB con una chiave non primaria colonne con WHERE clause.

Per fare ciò, sembra che non v'è 3 possibilità (tutte con grandi svantaggi):

  • creare un indice secondario (non raccomandato per problemi di prestazioni).
  • Creare una nuova tabella (non voglio dati ridondanti anche se è ok con cassandra).
  • Inserire la colonna che si desidera interrogare all'interno della chiave primaria e in questo caso è necessario definire tutte le parti della chiave primaria nella mia clausola WHERE e non è possibile utilizzare altri operatori oltre a IN o =.

C'è un altro modo per quello che sto cercando di fare (WHERE clause con la colonna chiave non primaria) senza avere i 3 vincoli sopra?

+0

Cassandra non è davvero adatto per il caso d'uso che stai descrivendo. Sembra che tu abbia bisogno di flessibilità di query e semplicemente non lo capirai da Cassandra. La linea di fondo, è che la raccomandazione di creare tabelle di query (con dati ridondanti) *** è una soluzione scalabile ***; mentre cercare di usare Cassandra come un database relazionale non lo è. – Aaron

+0

Salve @Aaron oups, il problema è che per la flessibilità delle query 'mongodb' è raccomandato più di' cassandra' ma per le prestazioni 'read/write' (che è molto importante nel mio caso) e quest'ultimo è molto brutto in questo punto. – farhawa

+0

E l'unico modo in cui vedrete mai quella prestazione è di adottare un approccio di modellazione basato su query utilizzando dati ridondanti. Cassandra si comporta in modo piuttosto terribile quando si tenta di utilizzare un modello relazionale o metodi simili per ottenere la flessibilità delle query. – Aaron

risposta

4

Dall'interno di Cassandra si è limitati alle opzioni specificate sopra. Se volete sapere il motivo per cui dare un'occhiata qui:

A Deep Look to the CQL Where Clause

Tuttavia, se si sta cercando di eseguire analisi su informazioni memorizzate all'interno Cassandra allora hai guardato con Spark. Spark è progettato per l'elaborazione di dati su larga scala su sistemi distribuiti. Infatti, se si sta utilizzando Datastax (vedere here) che presenta alcune funzioni di integrazione tra Spark e Cassandra appositamente per il caricamento e il salvataggio dei dati. Ha sia una versione gratuita (Community) che una versione (Enterprise) a pagamento.

+0

Ciao @bechbd grazie per la tua risposta Ho un problema di indicizzazione qui, come può scintilla essere in grado di caricare i dati senza i vincoli che ho citato abov? – farhawa

+1

Dovrai caricare i dati in Spark RDD utilizzando le limitazioni presenti nel link che avevo sopra. Una volta in Spark puoi quindi utilizzare i filtri, mappare/ridurre, variare per filtrare la grande quantità di dati in ciò che stai cercando. La breve risposta alla tua domanda di indicizzazione è che ciò che stai cercando di fare viola uno dei modi fondamentali con cui Cassandra è stata architetta. AFAIK non c'è modo in Cassandra 2.X che tu possa aggirare questi limiti Se stai usando Cassandra 3.X puoi guardare usando una vista materializzata, tuttavia quelli introducono le loro stesse complicazioni. – bechbd

0

Suppongo che la tabella sia progettata per uno scopo diverso, poiché i campi su cui si desidera eseguire la query non fanno parte della chiave di partizionamento. Il mio suggerimento sarebbe quello di duplicare la tabella e digitarla per i campi in cui si desidera interrogarla. Ti consiglierei di progettare un nuovo tavolo per lo scopo esatto in cui lo utilizzerai come da Data modeling concepts.

Cassandra offre numerosi vantaggi come il ridimensionamento lineare ecc. Imponendo alcune restrizioni rispetto a ciò che è possibile fare con CQL.