2017-09-01 5 views
1

Je suis nouveau à CASSANDRA, donc la question peut être trop simple.Comment faire une recherche dans CASSANDRA pour un paramètre qui est dans une certaine plage

J'essaie d'effectuer une requête sur une table qui a une clé de partitionnement composée de deux composants: refid et partid. Le problème que je rencontre est que le nombre de partid peut être grand (et différent pour différents refid). La requête que j'ai maintenant comme:

SELECT * FROM contigs WHERE refid=29179863 AND partid IN (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21); 

Ce que je voudrais faire est d'avoir une requête qui ressemble à ceci:

SELECT * FROM contigs WHERE refid=29179863 AND partid IN range(0,21); 

Est-il possible de le faire? Je voudrais d'abord éviter la création de la chaîne de requête en python et l'exécuter dans Cassandra plus tard ...

Répondre

1

L'utilisation de IN pour la clé de partition dans select peut entraîner des problèmes de performances. Spécifiez refid comme la clé de la partition, mais partid comme regroupement clé et vous serez en mesure de faire des requêtes de gamme par partid

CREATE TABLE contigs ( 
    refid int, 
    partid int, 
     ... other fields... 
    PRIMARY KEY ((refid), partid) 
); 

gamme de requête partid:

SELECT * FROM contigs WHERE refid=29179863 AND partid >= 0 AND partid < 21; 

Mais remarquez, cassandra ont la limitation de 2 des milliards de lignes à l'intérieur d'une clé de partition, dans ce cas, vous ne pouvez pas avoir plus de 2 milliards de partids pour un refid.