2015-01-16 24 views
0

我正在尋找理智檢查我的方法來分頁卡桑德拉表。我的使用案例如下:我需要一張表格,爲某個特定日期的某個網站提供最後的X個訪問者,以便爲分析儀表板提供支持。我使用session_id記錄訪問,並且我有以下表格架構:Cassandra分頁正確嗎?

session_id text, 
yyyymmdd test, 
bucket int, 
timeuuid timeuuid, 
primary key((yyyymmdd, bucket), timeuuid) 
WITH CLUSTERING ORDER BY (timeuuid DESC) 

存儲桶用於避免一個節點上的熱點。上分頁: 查詢將是這個樣子:

SELECT session_id FROM recent_visitors WHERE yyyymmdd = ? AND bucket IN (?) LIMIT 1000; 

現在,這個查詢很可能會影響到每一個節點,因爲桶數量比節點的數量較大。這個查詢是否太昂貴/有沒有更好的方法?另外,我知道對於每個分區,數據按聚類列排序,但是cassandra會對所有分區的結果進行排序嗎?換句話說,數據將在每個(yyyymmdd,bucket)組中返回排序,但是跨組將會不得不對最終顯示的結果進行排序?然後,如果我從結果得到的最古老的timeuuid,我就準備用下面的查詢分頁:

SELECT session_id FROM recent_visitors WHERE yyyymmdd = ? AND bucket IN (?) LIMIT 1000 WHERE timeuuid < previous_oldest_timeuuid; 

那是一個理智的方式?預先感謝您的時間。

回答

1

建模在卡桑德拉時間序列看看下面這篇文章的一些基礎知識:

http://planetcassandra.org/blog/getting-started-with-time-series-data-modeling/

你的數據模型看起來神志清醒,但我會改變你的讀取查詢。你會更好地爲不同的桶發送一堆查詢,而不是像這樣批量查詢它們。

您的批處理結果集將按每個桶進行排序,因此您必須以不同的方式將不同的桶組合在一起,並且最好只使用每個查詢命中一個服務器,而不是隻有一個查詢將會擊中多臺服務器。