2

我在Cassandra中有一个列族,其中一个列名称的状态为值Y.此状态必须更新为新值 - X之后如果30分钟内没有更新到其他值,则为30分钟。如何在特定时间间隔后更改列值 - Cassandra

基本上,如果在指定的时间间隔内没有任何更新,我想将该列标记为Expired-X。另外,一旦这个过期,它需要触发一个事件来通知另一个系统(API)说它已经过期。

回答

2

您可以尝试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或删除生成的墓碑,墓碑的巨量可以减缓你的读取性能

Read More about tombstone

+0

我已经考虑TTL。就像我上面提到的那样,我需要该行存在,列值必须更新。也许像触发器的东西? –

1

同意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); 
相关问题