假設一個目的如下:卡桑德拉多列排序設計
performance {
userid,
date,
score1,
score2,
score3,
...
}
我想能夠查詢performance
小號排序在任一得分字段。我應該爲每個score
字段創建不同的表作爲複合鍵嗎?還是有更好的方法來做到這一點?
我很猶豫複製performance
對象爲每個score
字段,因爲可能有許多score
字段。
假設一個目的如下:卡桑德拉多列排序設計
performance {
userid,
date,
score1,
score2,
score3,
...
}
我想能夠查詢performance
小號排序在任一得分字段。我應該爲每個score
字段創建不同的表作爲複合鍵嗎?還是有更好的方法來做到這一點?
我很猶豫複製performance
對象爲每個score
字段,因爲可能有許多score
字段。
在服務表現表,你可以考慮在得分1,得分2和得分3上創建二級索引。但是,Cassandra內置的二級索引在具有包含索引值的許多行的列族中效果最佳。因此,您必須平衡您的使用情況,避免使用二級索引來查詢大量記錄以獲取少量結果。 爲了排序,這不是一個好的解決方案。
在最佳實踐中,建議每個查詢模式使用大約一個表。數據重複很好。它還有助於確定最常見的查詢模式並隔離不太常見的查詢模式。一些查詢可能只執行幾千次,而其他查詢可能執行幾十億次。還要考慮哪些查詢對延遲敏感,哪些不是。建議在建模時考慮和平衡兩個高級規則:均勻地在集羣中傳播數據,並儘量減少讀取分區的數量。
我有同樣的問題。並解決它我重複表格。這是因爲對我而言,在where子句中,我可以寫where ... and SCORE1 > 0 and SCORE1 < 100
。如果您只需要使用相等運算符,則可以嘗試創建索引而不復製表。
如果你需要基於這些三列上的結果,那麼你可以用WITH CLUSTERING WITH ORDER BY (score1 DESC,score2 DESC,score3 DESC);
創建表並聲明爲集羣列排序,列要訂購
對不起,也許以前我不明白你的問題,你需要根據這三個列進行排序的結果?因爲如果是的話,那麼你創建了「WITH ORDER BY(score1 DESC,score2 DESC,score3 DESC)」的表格;並聲明爲您要訂購的聚類列列。 –
感謝您的回覆。我會研究二級索引解決方案,因爲我不知道它是如何在cassandra中工作的。不過,我希望能夠看到查詢的頻率。 –
像「得分」這樣的高基數事物可能表現不佳,作爲第二指數 –
@ChrisLohfink,我同意你的意見。根據你的評論我編輯了我的答案。謝謝 :) – Rock