2017-08-17 72 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个版本的登录信息。

第三种方式,就是做一些后台管家的过程,即通过键和删除旧/不相关的登录。