Cassandra - 定义全局 TTL 并更改已经存在的 TTL
Cassandra - defining a global TTL and changing an already existing one
我知道在对 Cassandra 列进行插入/更新时可以定义 TTL/table 等 (INSERT INTO ... USING TTL 1234
)。
还可以在创建 table (CREATE TABLE ... WITH default_time_to_live="1234";
).
时定义默认 TTL
然而,是否可以定义更全局的默认值?可能的情况包括:
- 在创建键空间时定义全局 TTL(以便任何 table 继承 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(尽可能全局 - 希望 table 级别)?根据文档,需要重新插入 (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. TTL 只能在列或 Table 级别。 2. 要更改现有列的 TTL,您需要使用新值重新插入它。
您可以使用 create table ddl 和 table 属性 default_time_to_live 将 TTL 设置为 table 级别。
当您重写列时,它将使用新的 TTL 更新插入。不会有两排躺着。请记住,每个 DML 都带有时间戳并以最新更新为准。
我知道在对 Cassandra 列进行插入/更新时可以定义 TTL/table 等 (INSERT INTO ... USING TTL 1234
)。
还可以在创建 table (CREATE TABLE ... WITH default_time_to_live="1234";
).
然而,是否可以定义更全局的默认值?可能的情况包括:
- 在创建键空间时定义全局 TTL(以便任何 table 继承 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(尽可能全局 - 希望 table 级别)?根据文档,需要重新插入 (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. TTL 只能在列或 Table 级别。 2. 要更改现有列的 TTL,您需要使用新值重新插入它。
您可以使用 create table ddl 和 table 属性 default_time_to_live 将 TTL 设置为 table 级别。
当您重写列时,它将使用新的 TTL 更新插入。不会有两排躺着。请记住,每个 DML 都带有时间戳并以最新更新为准。