2017-04-03 2 views
0

J'ai une table chat_matches dans "cassandra". Et vous voulez obtenir le nombre de tous les messages from_id à distinct to_id avec le nombre de lignes (group by to_id).Compte distinct à Cassandra

CREATE TABLE chat_matches(
    chat_id uuid, 
    from_id bigint, 
    to_id bigint, 
    message text, 
    message_send_time timestamp, 
    PRIMARY KEY ((chat_id,from_id),message_send_time) 
); 
+0

vous voulez from_id, to_id, groupe count (*) par from_id, to_id requête? – nevsv

+0

Oui, vous voulez obtenir le nombre total de tchat en personne. – Shanu

Répondre

0

En cassandra count(*) est une opération très coûteuse, doivent balayer toute la ligne de tout le nœud juste pour vous donner le nombre et peut générer de dépassement de délai.

Ainsi, au lieu d'utiliser count(*) maintenir une table de comptoir comme ci-dessous un:

CREATE TABLE message_counter (
    from_id bigint, 
    to_id bigint, 
    count counter, 
    primary key((from_id, to_id)) 
); 

Lorsqu'un nouveau message apparaît incrémenter juste la valeur de comptage par un.

UPDATE message_counter SET count = count + 1 WHERE from_id = 1 AND to_id = 2; 

Maintenant, vous pouvez sélectionner le groupe de comptage de messages par from_id à to_id très efficacement

SELECT * FROM message_counter WHERE from_id = 1 AND to_id = 2;