2013-09-30 198 views
4

我有以下Cassandra表記錄用戶對網頁的訪問權限。Cassandra基於時間的查詢

create table user_access (
    id timeuuid primary key, 
    user text, 
    access_time timestamp 
); 

,並願做這樣的查詢:
得到誰訪問頁面超過10倍,在最後一小時的用戶列表。

在Cassandra中可以做到嗎? (我有點卡住了有限的CQL查詢功能)
如果不是,我該如何重新編碼表來做到這一點?

回答

3

你能做到嗎?是。 你能有效地做到嗎?我不相信。

目前尚不清楚您使用的是什麼timeuuid。

您可以重組這

CREATE TABLE user_access (
    user text, 
    access_time timestamp, 
    PRIMARY KEY (user_id, access_time) 
); 

SELECT COUNT(*) 
FROM user_access 
WHERE user_id = '101' 
    AND access_time > 'current unix timestamp - 3600' 
    AND access_time < 'current unix timestamp'; 

然後篩選對自己的結果在您所選擇的語言。我不會讓你的呼吸等待子查詢支持。

如果你有很多用戶,這將會非常低效。

可能有更好的解決方案,使用cql的計數器列和合並訪問到小時開始。這可能會讓你每小時訪問一次,但這與最近一小時內不一樣。