【问题标题】:Updating only TTL in cassandra在 cassandra 中仅更新 TTL
【发布时间】:2015-11-29 14:51:06
【问题描述】:
在 python 中运行model.update(args, kwargs) 时,如果数据没有不同,它实际上并没有进行任何更改,对吗?如果是这样,它会更新 TTL 吗?如果没有,我们怎样才能让它重置 TTL?
用例:
我们有一个模型可以存储扭曲的循环信息,并且我们有一个 10 秒的 TTL。该程序设置为每 2 秒自动检查一次配置,如果没有,那么我们希望将该数据从活动循环中删除。这是它变得棘手的地方,一旦为特定循环设置数据,它就很少更改。
如果有帮助,我可以发布模型和其他信息。
【问题讨论】:
标签:
python
cassandra
cassandra-2.0
【解决方案1】:
当您在 Cassandra 中执行插入或更新时,新值会覆盖旧值,即使它是相同的值。这是因为 Cassandra 在存储新数据之前不会读取现有数据。每次写入只是一个追加操作,Cassandra 不知道新值是否与旧值相同。
当您进行读取时,Cassandra 会找到最近的写入,即当前值。因此,如果您的插入或更新设置了 TTL,那么该 TTL 将覆盖您插入/更新的列的任何先前 TTL。
因此,如果您正在写入 TTL 为 10 秒的数据,那么如果您希望它再停留 10 秒,则需要在 10 秒结束之前再次写入相同的数据。