我在Cassandra有一个列族,其中一个列名是状态,值为Y.如果没有更新为其他值,则必须将此状态更新为新值 - 30分钟后为X.在30分钟内。
基本上,如果在指定的时间间隔内没有任何更新,我想将列标记为Expired - X.
此外,一旦过期,它需要触发事件以通知另一个系统(API)说它已过期。
答案 0 :(得分:2)
您可以尝试Cassandra的TTL(生存时间)功能
您可以为列中的数据(计数器列除外)设置一个名为TTL(生存时间)的可选有效期。列的TTL值是秒数。在列创建超过TTL值后的秒数之后,TTL数据被认为已过期并包含在结果中
每次更新字段时,请使用30分钟或1800秒的TTL
示例:
UPDATE users USING TTL 1800 SET password = 'ch@ngem4a' WHERE user_name = 'cbrown';
首次插入时,也请使用上述查询。
因此,对于上面的示例,如果30分钟内没有更新,密码字段将在30分钟后标记为已删除。
但是无法触发事件来通知您的系统。
注意: TTL或删除生成墓碑,大量的墓碑可能会降低您的阅读效果
答案 1 :(得分:1)
同意Ashraful的回答。如果您使用Spring Data for 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);