我在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。就像我上面提到的那樣,我需要該行存在,列值必須更新。也許像觸發器的東西? –