2013-06-24 67 views
1

我想離開存儲訪問者的mysql在社交媒體應用程序中,並認爲cassandra會很好。如何獲得最新的20個獨特的東西

假設followign表:

CREATE TABLE visitors (
    visiteduserid bigint, 
    visitinguserid bigint, 
    visitdate timestamp, 
    PRIMARY KEY (visiteduserid,visitinguserid) 
); 

我想獲得最新的20個獨特的visitinguserid對當前visiteduserid,但

SELECT visitinguserid FROM visitors WHERE visiteduserid=1 ORDER BY visitdate DESC LIMIT 20 

Bad Request: Order by is currently only supported on the clustered columns of the PRIMARY KEY, got visitdate 

我是正確的假設,我不能只是添加visitdate到主鍵,因爲我只想擁有單個用戶/用戶組合的最新訪問日期。最好的辦法是讓他們按訪問日期降序排序,如「Twitter克隆」演示文稿中所述...

任何幫助嗎?

+0

Patric McFadin在cassandra峯會上介紹了時間序列和數據建模。看看[他的幻燈片](http://www.slideshare.net/planetcassandra/c-summit-2013-the-worlds-next-top-data-model-by-patrick-mcfadin),他們是一個優秀的資源,有一個「用戶活動」數據模型的例子,它幾乎是你想要的。 '也可以'您可以將'visitdate'添加到複合鍵上,然後按照您想要的方式進行分類。 –

+0

目前版本的casssandra似乎不可能。 實施了一種解決方法,現在正在研究hbase。 –

回答

2

你就近了。試試這個,看看它是如何爲你的作品

CREATE TABLE visitors (
    visiteduserid bigint, 
    visitdate timestamp, 
    visitinguserid bigint, 
    PRIMARY KEY (visiteduserid,visitdate) 
) WITH CLUSTERING ORDER BY (visitdate DESC); 

那麼做到這一點:

SELECT visitinguserid FROM visitors WHERE visiteduserid=1 LIMIT 20 

這應該做你在找什麼。依靠使用比較器來創建您想插入的訂單效率更高。

+1

儘管此數據模型將存儲每次訪問,但OP需要20個最近的唯一訪問者。如果訪問者多次訪問,則會有重複。但是,您可以使用您編寫的查詢和翻頁查詢,直到您有20位唯一身份訪問者。如果每個訪問者不經常訪問,這是有效的。 – Richard