【问题标题】:How to maintain the last N versions of primary key in Cassandra?如何在 Cassandra 中维护最后 N 个版本的主键?
【发布时间】:2017-08-17 22:59:10
【问题描述】:
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 个版本?

【问题讨论】:

  • 请注意,在您给定的示例中,未定义聚类列。正确的语法是:CREATE TABLE user_logins ( user_id bigint, login_time timestamp, PRIMARY KEY((user_id), login_time) ) WITH CLUSTERING ORDER BY (login_time DESC);

标签: cassandra


【解决方案1】:

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

正如您所说,一种方法是使用列表/映射/集合/UDT 并始终更新(先读后写)它们。

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

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

【讨论】:

    猜你喜欢
    • 2016-05-17
    • 2014-11-27
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2015-09-01
    相关资源
    最近更新 更多