2014-05-21 3 views
1

En supposant que nous avons une table Cassandra appelée messages avec des colonnes:requête Création de table Cassandra pour toutes les lignes qui contiennent un ensemble de valeurs données

id int primary key 
subject text 
recipients set<text> 

Comment sélectionner tous les messages qui ont un ensemble spécifique de bénéficiaires? Je ne peux pas trouver une telle option dans CQL. Si ce n'est pas possible, alors pouvez-vous suggérer un schéma alternatif qui permettrait de répondre à de telles requêtes?

+0

quelles sont les autres requêtes? –

Répondre

1

C * 2.0 ne prend pas en charge les index secondaires sur les collections.

De CQL improvements in Cassandra 2.0

Permettez-moi de remarque cependant que l'indexation secondaire des colonnes de collecte est toujours pas encore> supporté en C * 2.0. Cela viendra plus tard.

Dans ce cas, vous devez modéliser vos données différemment pour interroger le destinataire. Rappelez-vous que la modélisation C * est entièrement pilotée par requête, vous souhaiterez donc avoir un destinataire en tant que rowkey.

create table message_recipients (recipient text, message_id int, primary key (recipient)); 
+0

Merci. Des idées sur la façon de faire cela qui n'impliquent pas de créer une ligne pour chaque sous-ensemble possible des destinataires du message? –

+0

Le modèle dans le monde NoSQL est de dénormaliser les données puisque ces systèmes distribués fonctionnent sur du matériel de base avec un stockage bon marché. Une autre option serait d'utiliser un système de recherche externe comme Solr (c'est ce que je fais dans des cas comme celui-ci). Si vous utilisez DataStax Enterprise Edition, il est livré avec Solr et Hadoop pour faciliter cette intégration. –

Questions connexes