2017-04-26 70 views
0

我們正在運行Apache Cassandra 2.1.X並使用Datastax驅動程序。我有一個用例,我們需要記錄各種事情。我想出了這樣的模式:在卡桑德拉計數寬行

create table count{ 
partitionKey bigInt, 
type text, 
uniqueId uuid, 
primary_key(partitionKey, type, uniqueId) 

所以這只不過是寬行。我的問題是,如果我做了類似
select count(uniqueId) from count where paritionKey=987 and type='someType',並返回與說150k計數。

  • 這對Cassandra來說是否是一項昂貴的操作?有沒有更好的方法來計算像這樣的計數。我也想知道是否有人解決過這樣的問題?

  • 我寧願遠離計數器,因爲它不是那麼準確,並且在應用程序級別保持計數是註定要失敗的。

  • 此外,它將很高興知道Cassandra如何在內部計算這些數據。

非常感謝幫助社區的人!

回答

0

即使您指定分區鍵卡桑德拉仍需要讀取150K細胞給你算

如果您還沒有指定分區鍵卡桑德拉需要掃描的節點的所有所有的行,給你計數。

最佳方法是使用計數器表。

CREATE TABLE id_count (
    partitionkey bigint, 
    type text, 
    count counter, 
    PRIMARY KEY ((partitionkey, type)) 
); 

只要uniqueId插入在這裏增加計數。

+0

謝謝@Ashrauful。從我在卡桑德拉的研究計數器不準確,計數可能會失去同步。在我的用例中,我需要一個準確的計數。你認爲這種方法會起作用嗎?你有任何其他建議嗎? – Coder

+0

@Coder你可以寫一個後臺任務,它會同步你的計數。 –