【发布时间】:2017-08-17 06:00:13
【问题描述】:
我正在为我的应用程序使用 Cassandra 数据库,并且我正在为每个请求设置一个 TTL。出于测试目的,我正在使用另一个数据库(相同的架构,但在本地)并且我愿意保留数据,我想知道是否有办法覆盖 ttl,我不知道,通过在创建时将其设置为默认值表格或类似的东西。
谢谢。
【问题讨论】:
我正在为我的应用程序使用 Cassandra 数据库,并且我正在为每个请求设置一个 TTL。出于测试目的,我正在使用另一个数据库(相同的架构,但在本地)并且我愿意保留数据,我想知道是否有办法覆盖 ttl,我不知道,通过在创建时将其设置为默认值表格或类似的东西。
谢谢。
【问题讨论】:
为特定列设置 TTL
使用 CQL 设置数据的 TTL。
要更改特定列的 TTL,您必须重新插入数据 使用新的 TTL。 Cassandra 使用新的 TTL 插入列, 如果有的话,用旧的 TTL 替换旧的值。
为表设置 TTL
CQL 表定义支持 default_time_to_live 属性, 它将特定的 TTL 应用于表中的每一列。之后 已超过 default_time_to_live TTL 值,Cassandra 墓碑 整张桌子。将此默认 TTL 应用于 CQL 中的表,使用 创建表或更改表。
如果您的表在本地环境中的 TTL 值不等于 0,请使用
ALTER TABLE table_name
WITH default_time_to_live= 0
这将改变表级别的 TTL。
如果设置了列级 TTL,请更改代码以插入 0 或更高 TTL 的记录。
【讨论】:
我不认为它朝那个方向起作用;因为您在 CQL 中而不是在表级别指定 TTL。
http://cassandra.apache.org/doc/latest/cql/dml.html
如果表有 default_time_to_live,则 TTL 为 0 将删除插入或更新值的 TTL。 null 的 TTL 相当于插入 TTL 为 0。
CQL TTL 会覆盖默认值。如果你在表级别有 9999 TTL,在 CQL 中使用 50;将使用 50 个。
参考这里-http://www.mail-archive.com/user@cassandra.apache.org/msg50873.html
【讨论】: