定义一个全局ttl并更改一个已经存在的ttl

0lvr5msh  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(554)

我知道在对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 不起作用。对吗?有人能提出更好的建议吗?

igetnqfo

igetnqfo1#

你回答了你自己的问题。1ttl只能在列级或表级进行。2要更改现有列的ttl,需要使用新值重新插入该列。
您可以使用create table ddl和table属性default \u time \u to \u live在表级别设置ttl。
当你重写这个列时,它会用新的ttl向上插入它。不会有两排。记住,每个dml进入Cassandra都有一个时间戳,最新的更新会获胜。

相关问题