2017-04-03 3 views
0

私は "cassandra"にchat_matchesというテーブルを持っています。そして、行数(group to_id)で、from_idからdistinct to_idまでのすべてのメッセージの数を取得したいとします。カサンドラcount(*)カサンドラの個体数

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

をto_idするfrom_idによってメッセージ数のグループを選択することができますか? – nevsv

+0

はい、合計チャット数を直接ご確認ください。 – Shanu

答えて

0

ちょうどあなたのカウントを与えるために、タイムアウト例外を発生させることができ、すべてのノードからすべての行をスキャンする必要があり、非常にコストのかかる作業です。

ので、代わりの1以下のようなカウンターテーブル維持count(*)を使用して新しいメッセージが1だけカウント値をインクリメント表示されたら

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

を。

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

今、あなたはあなたがfrom_id、to_idクエリによってfrom_id、to_id、COUNT(*)グループをしたい非常に効率的に

SELECT * FROM message_counter WHERE from_id = 1 AND to_id = 2; 
関連する問題