2017-08-17 65 views
3
CREATE TABLE user_logins (
    user_id bigint PRIMARY KEY, 
    login_time timestamp 
)WITH CLUSTERING ORDER BY (login_time DESC); 

有沒有一種方法可以在Cassandra中維護密鑰的最後3個版本?如果使用此主鍵添加更多行,它應該自動截斷刪除最舊的行,以確保一次只保留3行?例如,每個用戶只保留最後3次登錄時間戳。如何維護Cassandra中主鍵的最後N個版本?

其中一種方法是使用像列表這樣的集合來存儲時間戳,然後進行先讀後讀取以獲取當前值,修改並保存它?除了時間概念,還有其他方式可以讓TTL具有類似的功能,但是可以維護最後的N個版本嗎?

+0

請注意,在給定的示例聚類列中沒有定義。正確的語法是: 'CREATE TABLE user_logins( USER_ID BIGINT, login_time時間戳, PRIMARY KEY((USER_ID),login_time) )聚類ORDER BY(login_time DESC);' – Oresztesz

回答

2

Cassandra中沒有這樣的功能,您需要使用解決方法。

正如你所說的,一種方式是使用列表/地圖/集合/ UDT和更新(先讀後寫)它們。

另一種方法是有N個表,例如user_logins_N,在客戶端/服務器端,您將對這些表進行循環。每張表只有一個版本的密鑰和一個登錄時間戳,並且您將始終只保存N個版本的登錄信息。

第三種方式,就是做一些後臺管家的過程,即通過鍵和刪除舊/不相關的登錄。