我知道在对cassandra列/表等进行插入/更新时,可以定义ttl( INSERT INTO ... USING TTL 1234
). 在创建表时,还可以定义默认的ttl( CREATE TABLE ... WITH default_time_to_live="1234";
).
但是,是否可以定义更具全局性的默认值?可能的情况包括:
在创建键空间时定义全局ttl(以便任何表都继承ttl)?从文件来看,这似乎是不支持的(https://docs.datastax.com/en/dse/5.1/cql/cql/cql_reference/cql_commands/cqlcreatekeyspace.html & https://docs.datastax.com/en/dse/5.1/cql/cql/cql_using/useexpire.html),但我觉得值得一问以防万一
定义(在 cassandra.yaml
配置?)任何新密钥空间的全局ttl
为整个集群中的任何新数据定义全局ttl
另一个问题是:
有没有一种快速而廉价的方法来更改(增加、减少)已有数据的ttl(尽可能全局地-希望是表级的)?根据文件,需要重新插入(https://docs.datastax.com/en/dse/5.1/cql/cql/cql_using/useexpire.html#useexpire__setting-a-ttl-for-a-specific-column-ryjso4iu),所以 ALTER TABLE
不起作用。对吗?有人能提出更好的建议吗?
1条答案
按热度按时间igetnqfo1#
你回答了你自己的问题。1ttl只能在列级或表级进行。2要更改现有列的ttl,需要使用新值重新插入该列。
您可以使用create table ddl和table属性default \u time \u to \u live在表级别设置ttl。
当你重写这个列时,它会用新的ttl向上插入它。不会有两排。记住,每个dml进入Cassandra都有一个时间戳,最新的更新会获胜。