我在Cassandra中有一个列族,其中一个列名称的状态为值Y.此状态必须更新为新值 - X之后如果30分钟内没有更新到其他值,则为30分钟。如何在特定时间间隔后更改列值 - Cassandra
基本上,如果在指定的时间间隔内没有任何更新,我想将该列标记为Expired-X。另外,一旦这个过期,它需要触发一个事件来通知另一个系统(API)说它已经过期。
我在Cassandra中有一个列族,其中一个列名称的状态为值Y.此状态必须更新为新值 - X之后如果30分钟内没有更新到其他值,则为30分钟。如何在特定时间间隔后更改列值 - Cassandra
基本上,如果在指定的时间间隔内没有任何更新,我想将该列标记为Expired-X。另外,一旦这个过期,它需要触发一个事件来通知另一个系统(API)说它已经过期。
您可以尝试Cassandra的TTL(生存时间)特性
您可以设置在一列数据,比计数器列以外的其他可选的到期期限被称为TTL(生存时间)。列的TTL值是几秒钟。由于列的创作超过TTL值的秒数之后,TTL数据被认为是过期的,并包括在结果
每次更新的30分钟或1800秒
实施例的字段,使用TTL :
UPDATE users USING TTL 1800 SET password = '[email protected]' WHERE user_name = 'cbrown';
对于第一次插入,也使用上面的查询。
因此,对于上述示例,如果密码字段在30分钟内未更新,则会在30分钟后标记为已删除。
但是不可能触发事件来通知您的系统。
注:TTL或删除生成的墓碑,墓碑的巨量可以减缓你的读取性能
同意Ashraful的答案。如果你使用Spring数据为Apache Cassandra的2.0(目前里程碑),那么你可以使用下面的代码来实现Ashraful的例子:
@Table("users")
public class User {
@PrimaryKey("user_name")
String userName;
String password;
}
WriteOptions options = WriteOptions.builder().ttl(1800).build();
template.update(query(where("userName").is("cbrown")).queryOptions(options),
update("password", "[email protected]"),
User.class);
我已经考虑TTL。就像我上面提到的那样,我需要该行存在,列值必须更新。也许像触发器的东西? –