2017-05-04 45 views
2

我有一個表在卡桑德拉與下面的模式:Cassandra更新查詢|時間戳列作爲聚集鍵

CREATE TABLE user_album_entity (
    userId text, 
    albumId text, 
    updateDateTimestamp timestamp, 
    albumName text, 
    description text, 
    PRIMARY KEY ((userId), updateDateTimestamp) 
); 

獲得的數據將有由updateTimestamp一個其中userid = XXX訂單所需的查詢。因此該模式具有updateDateTimestamp。

問題出在更新表的列。查詢是:更新用戶的相冊信息,其中用戶id = xxx。但根據規範,對於更新查詢,我需要updateDateTimestamp的確切值,在正常的世界情況下,應用程序絕不會發送該值。

這樣的問題應該是什麼答案,因爲我相信這是一個非常常見的用例,其中選擇查詢需要在時間戳上進行排序。任何幫助深表感謝。

回答

1

問題是,你的表結構允許同一個專輯有多個記錄,唯一的區別是時間戳(集羣密鑰)。

三種可能的解決方案:

  1. 刪除聚集鍵,並在應用層面對數據進行排序。
  2. 刪除羣集密鑰並將Secondary Index添加到時間戳記字段。
  3. 刪除集羣密鑰並創建一個Materialized View來執行查詢。
+0

我意識到的一件事是絕對updateDateTimestamp絕不應該是您的集羣密鑰的一部分。 KillrChat的所有例子都顯示按日期排列的順序是創建/上傳日期等等。如果我將userId保留爲分區鍵,並將albumId和creationDate保留爲集羣鍵,則映射爲1:n仍然聽起來有點奇怪。如果任何一天我必須更新所有用戶的專輯名稱,我必須執行異步多個更新,因爲我不能在userId作爲第一個密鑰執行IN操作。我是對@ xmas79,或者有一個隱藏的更好的方法來做到這一點。 – piyushGoyal