2013-08-13 10 views
9

Una parte principale di Cassandra che non comprendo completamente è la sua gamma di query. So che Cassandra enfatizza l'ambiente distribuito e si concentra sulle prestazioni, ma probabilmente a causa di ciò, attualmente supporta solo diversi tipi di query di intervalli che può terminare in modo efficiente e quello che vorrei sapere è che: quali tipi di query di intervallo sono supportate di Cassandra.Intervalli di intervallo in Cassandra (CQL 3.0)

Per quanto ne so, Cassandra supporta i seguenti interrogazioni range:

1: Intervallo di query su Chiave primaria con parola chiave TOKEN, ad esempio:

CREATE TABLE only_int (int_key int PRIMARY KEY); 
... 
select * from only_int where token(int_key) > 500; 

2: Gamma query con condizione di un'uguaglianza su un indice secondario con parola chiave ALLOW FILTERING, ad esempio:

CREATE TABLE example (
    int_key int PRIMARY KEY, 
    int_non_key int, 
    str_2nd_idx ascii 
); 
CREATE INDEX so_example_str_2nd_idx ON example (str_2nd_idx); 
... 
select * from example where str_2nd_idx = 'hello' and int_non_key < 5 allow filtering; 

Ma mi chiedo se mi manca qualcosa di un Alla ricerca di una risposta canonica che elenca tutti i tipi di query di intervallo supportate dal CQL corrente (o un work-around che consente più tipi di query di intervallo).

risposta

4

Oltre alle query che hai citato, puoi anche avere domande sulle famiglie di colonne "Chiave composita" (beh, devi progettare il tuo DB usando le chiavi composite, se questo si adatta ai tuoi vincoli). Per un esempio/discussione su questo date un'occhiata a Query using composite keys, other than Row Key in Cassandra. Quando si utilizzano i tasti compositi, è possibile eseguire altri tipi di query, ovvero query "intervallo" che non utilizzano la "chiave di partizione" (primo elemento della chiave composita); in genere è necessario impostare il parametro "Consenti filtraggio" per consentire queste query e può anche eseguire operazioni "ordina per" su quegli elementi, che possono essere molto interessanti in molte situazioni. Penso che le famiglie di colonne chiave composte consentano di superare alcune (necessarie) "limitazioni" (per garantire le prestazioni) del modello di dati cassandra rispetto al modello "estremamente flessibile" (ma lento) di RDBMS ...

5

È possibile cercare le chiavi di cluster . Una chiave primaria può essere formata da una chiave di partizionamento e quindi dai tasti di raggruppamento.

per esempio definizione come questo

CREATE TABLE example (
    int_key int, 
    int_non_key int, 
    str_2nd_idx ascii, 
    PRIMARY KEY((int_key), str_2nd_idx) 
); 

permetterà di fare domande come queste senza l'utilizzo di token

select * from example where str_2nd_idx < 'hello' allow filtering; 

Prima di creare una tabella in Cassandra si dovrebbe iniziare da pensare a query e quello vuoi chiedere dal modello di dati in cassandra.

-1

1) Create table:

create table test3(name text,id int,address text,num int,primary key(name,id,address))with compact storage; 

2) Inserimento dati nella tabella:

insert into test3(name,id,address,num) values('prasad',1,'bangalore',1) ; 

insert into test3(name,id,address,num) values('prasad',2,'bangalore',2) ; 

insert into test3(name,id,address,num) values('prasad',3,'bangalore',3) ; 

insert into test3(name,id,address,num) values('prasad',4,'bangalore',4) ; 

3)

select * from test3 where name='prasad' and id <3; 

4)

name | id | address | num 


--------+----+-----------+----- 

prasad | 1 | bangalore | 1 

prasad | 2 | bangalore | 2 
+0

La domanda riguarda tutti i tipi di query di intervallo supportate, NON come eseguire query di intervallo. – keelar