2013-02-09 7 views
2

Je tente de construire un backend pour les statistiques du jeu-questionnaire: Je veux connaître le pourcentage de reconnaissance pour chaque image globalement et la reconnaissance des pourcentages d'images par pays.Cassandra datamodel

Actuellement datamodel est:

 

TABLE results (
    country text, 
    percent float, 
    image_id text, 
    fail int, 
    ok int, 
    shown int, 
    PRIMARY KEY (country, percent, image_id) 
); 

Je peux interroger les résultats par pays, mais je ne peux pas obtenir des résultats globaux (avec images pour cent plus élevé).

Un conseil?

+0

est image_id unique, ou il peut être lié à un pays afin que les deux pays et image_id doit faire partie de PK? – user1944408

+0

image_id est unique, il fait partie de PK donc je peux interroger tous les résultats pour image_id spécifique – Jhon

Répondre

2

Il est possible de définir le pays "TOTAL" qui contiendra la somme des statistiques pour tous les pays.

P.S. Faire percent partie de la clé primaire ne semble pas être une bonne idée en raison de la cohérence éventuelle de cassandra: il ne sera pas possible de faire une mise à jour atomique du champ percent.

Je pense qu'il existe deux situations possibles: soit l'ensemble de données serait assez petit - alors tout DB SQL avec index secondaire sur le champ percent fera mieux que cassandra, ou il y aurait trop de données pour SQL DB - alors Cassandra avec ce modèle de données ne fonctionnera pas non plus, seule la carte/réduction des comptes partiels fera l'affaire.

0

Vous avez besoin de deux CF.

Une autre façon est d'utiliser le partitionnement et l'utilisation des clés de CompoteType, donc votre clé n'est pas PRIMARY KEY (country, percent, image_id) mais PRIMARY KEY ((country, percent, image_id)).

Vous devez également une autre colonne, image_id et vous pourriez mettre un index secondaire sur ce image_id afin que vous puissiez effectuer des requêtes où image_id = x

Questions connexes