如何在某个时间间隔后更改列值-Cassandra

如何在某个时间间隔后更改列值-Cassandra,cassandra,datastax-enterprise,cassandra-2.1,spring-data-cassandra,Cassandra,Datastax Enterprise,Cassandra 2.1,Spring Data Cassandra,我在Cassandra中有一个列族,其中一个列名为status,值为Y。如果在30分钟内没有更新为其他值,例如N,则必须在30分钟后将此状态更新为新值-X 基本上,如果在指定的时间间隔内没有任何更新,我想将列标记为Expired-X 此外,一旦过期,它需要触发一个事件,通知另一个系统(API)它已过期。您可以尝试Cassandra的(生存时间)功能。 可以为列(而不是计数器列)中的数据设置名为TTL(生存时间)的可选过期期限。列的TTL值是秒数。在列创建后的秒数超过TTL值后,TTL数据将被视为

我在Cassandra中有一个列族,其中一个列名为status,值为Y。如果在30分钟内没有更新为其他值,例如N,则必须在30分钟后将此状态更新为新值-X

基本上,如果在指定的时间间隔内没有任何更新,我想将列标记为Expired-X


此外,一旦过期,它需要触发一个事件,通知另一个系统(API)它已过期。

您可以尝试Cassandra的(生存时间)功能。

可以为列(而不是计数器列)中的数据设置名为TTL(生存时间)的可选过期期限。列的TTL值是秒数。在列创建后的秒数超过TTL值后,TTL数据将被视为过期并包含在结果中

每次更新字段时,使用30分钟或1800秒的TTL

例如:

UPDATE users USING TTL 1800 SET password = 'ch@ngem4a' WHERE user_name = 'cbrown';
对于第一次插入,也使用上面的查询

因此,对于上述示例,如果密码字段在30分钟内未更新,则密码字段将在30分钟后标记为已删除。

但不可能触发事件来通知您的系统

注意:TTL或delete生成墓碑,大量墓碑会降低您的读取性能


同意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", "ch@ngem4a"), 
                User.class);

我已经考虑过TTL了。就像我上面提到的,我需要行出现,列值必须更新。也许是一个触发器?