2017-04-03 101 views
0

我有一張桌子在「卡桑德拉」chat_matches。並且想要將所有消息的from_id計數爲不同的to_id與行數(group by to_id)。卡桑德拉的不同的計數

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

你想from_id,to_id,COUNT(*)GROUP BY from_id,to_id查詢to_id? – nevsv

+0

是的,想要獲得總聊天數。 – Shanu

回答

0

在卡桑德拉count(*)是一個非常昂貴的操作,需要從所有的節點掃描所有的行只是給你計數並能產生超時異常。

所以除了使用count(*)維護計數表像下面的一個:

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選擇郵件數組非常有效地

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