如何在Cassandra中维护最后N个主键版本?

时间:2017-08-17 13:56:04

标签: cassandra

CREATE TABLE user_logins (
    user_id bigint PRIMARY KEY,
    login_time timestamp
)WITH CLUSTERING ORDER BY (login_time DESC);

有没有办法可以在Cassandra中维护密钥的最后3个版本?如果我用这个主键添加更多行,它应该自动截断删除最旧的行以确保一次只维护3行?例如,对于每个用户仅维护其最后3个登录时间戳。

一种方法是使用list之类的集合来存储时间戳,然后执行read-before-write来获取当前值,修改它并保留它?有没有其他方法我可以拥有TTL之类的功能而没有时间概念但是维持最后N个版本?

1 个答案:

答案 0 :(得分:2)

在Cassandra中没有这样的功能,您需要使用变通方法。

正如你所说,一种方法是使用list / maps / sets / UDT并一直更新(read-before-write)它们。

另一种方法是拥有N个表,例如user_logins_N,在客户端/服务器端,您将在这些表上循环。每个表只有一个版本的密钥和一个登录时间戳,并且您将始终只保存N个版本的登录。

第三种方式,是做一些后台管家进程,这将通过密钥并删除旧的/不相关的登录。