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); 
相關問題