我有以下表users((username), last_seen)
其中last_seen基本上是寫時間。表中的記錄數量約爲1000萬。 插入是非常簡單的insert into users (username, last_seen) VALUES ([username], now)
MATERIALIZED VIEW VS查詢與允許過濾
但我需要通過last_seen
欄查詢(此查詢運行,每分鐘),例如:
select username from users where last_seen < (now - 1 day)
我有兩個選擇,因爲我看到它:
使用物化視圖:
CREATE MATERIALIZED VIEW users_last_seen AS SELECT last_seen, username FROM users WHERE last_seen IS NOT NULL PRIMARY KEY (last_seen, username);
,只是查詢
select username from users_last_seen where last_seen < (now - 1 day)
查詢用戶表
select username from users where last_seen < (now - 1 day) ALLOW FILTERING
哪一個更有效? AFAIK實體化視圖不穩定並會影響性能。
非常感謝。然而,這並不能真正解決這個問題,因爲'day'是一個參數,它也可以是小時或任何其他時期。因此使用建議的表格不是一個適當的解決方案。 – igx
您總是可以根據參數進行多個查詢。 例如:如果是3天,請進行3次查詢以獲得結果。 通過這種方式,您可以識別Cassandra的分區,並避免完全搜索出現不可預知的性能問題。 – chaitan64arun
我的意思是,我需要的是這樣來查詢: '選擇用戶名其中,last_seen <(現在 - 1小時)' 也 '選擇用戶名從用戶那裏last_seen <(現在 - 1天)' 所以預定'日/小時'是不可能的。我可以按分鐘劃分,但它會創建到很多分區不是嗎? – igx